Android App 使用javax.mail.* API發送email&&Eclipse工程導入jar

福利!!在附件中贈送相關jar!!

1.導入相關jar:

調用郵件操作相關的jar如下(可在code.google.com上下載):

activation.jar

additionnal.jar

mail.jar

在需要導入的Android工程中屬性頁設置:

選擇Add External Jar,並將三個jar包導入;

現在即可在代碼調用相關API:

2.在項目中新建一個郵件發送的MailSender類:

代碼:

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.Message;
public class MailSender extends Authenticator {
    private Properties properties;
    private Session session;
    private MimeMultipart multipart;
    private Message message;
    public MailSender() {
        super();
        this.properties = new Properties();
    }
    public void setProperties(String host, String post) {
        this.properties.put("mail.smtp.host", host);
        this.properties.put("mail.smtp.post", post);
        this.properties.put("mail.smtp.auth", true);
        this.session = Session.getInstance(properties);
        this.message = new MimeMessage(session);
        this.multipart = new MimeMultipart("mixed");
    }
    public void setReceiver(String[] receiver) throws MessagingException {
        Address[] address = new InternetAddress[receiver.length];
        for (int i = 0; i < receiver.length; i++) {
            address[i] = new InternetAddress(receiver[i]);
        }
        this.message.setRecipients(Message.RecipientType.TO, address);
    }
    public void setMessage(String from, String title, String content)
            throws AddressException, MessagingException {
        this.message.setFrom(new InternetAddress(from));
        this.message.setSubject(title);
        MimeBodyPart textBody = new MimeBodyPart();
        textBody.setContent(content, "text/html;charset=gbk");
        this.multipart.addBodyPart(textBody);
    }
    public void addAttachment(String filePath) throws MessagingException {
        FileDataSource fileDataSource = new FileDataSource(new File(filePath));
        DataHandler dataHandler = new DataHandler(fileDataSource);
        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        mimeBodyPart.setDataHandler(dataHandler);
        mimeBodyPart.setFileName(fileDataSource.getName());
        this.multipart.addBodyPart(mimeBodyPart);
    }
    public void sendEmail(String host, String account, String pwd)
            throws MessagingException {
        this.message.setSentDate(new Date());
        this.message.setContent(this.multipart);
        this.message.saveChanges();
        Transport transport = session.getTransport("smtp");
        transport.connect(host, account, pwd);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
}


注意區別兩個同名的類:javax.mail.Message和android.os.Message;

3.在主類中新建子線程調用MailSender類:

3.1 Activity主類中變量聲明、參數設置:

private MailSender mailsender;
private String str_SMTP = "smtp.126.com";
private String str_SMTP_PORT = "587";
private String str_USER_NAME = "[email protected]";
private String str_PASSWORD = "******";
private String str_MAILTITLE = "System.Log";
private String str_TARGETMAIL = "[email protected]";
private String str_SMTP = "smtp.126.com";
private String str_SMTP_PORT = "587";
mailsender = new MailSender();
mailsender.setProperties(str_SMTP, str_SMTP_PORT);

本例使用一個126的郵箱發到一個yahoo郵箱中;

3.2 寫了個方法:

public void SendingTargetMail(String str_content) throws AddressException,MessagingException {
mailsender.setMessage(str_USER_NAME, str_MAILTITLE, str_content);
mailsender.setReceiver(new String[] { str_TARGETMAIL });
mailsender.sendEmail(str_SMTP, str_USER_NAME, str_PASSWORD);


3.3 寫個子線程調用(郵件正文遵循html語法):

Runnable Sward_runnable = new Runnable() {
        public void run() {            
                SendingTargetMail("<html><body>"   + "System time    :"+ getCurrentTime() + "<br>"
                                                   + "</body><html>");     
        }
    };

3.4 主線程啓動子線程,後者一啓動就發了個郵件:

Sward_Thread = new Thread(Sward_runnable);
Sward_Thread.start();


3.5 Manifest文件中別忘了加上權限聲明:

<uses-permission android:name="android.permission.INTERNET" />




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章