packagecom.smartdoorbell.util;importandroid.os.AsyncTask;importjava.util.Date;importjava.util.List;importjava.util.Properties;importjavax.activation.CommandMap;importjavax.activation.MailcapCommandMap;importjavax.mail.Authenticator;importjavax.mail.Message;importjavax.mail.Multipart;importjavax.mail.PasswordAuthentication;importjavax.mail.Session;importjavax.mail.Transport;importjavax.mail.internet.InternetAddress;importjavax.mail.internet.MimeBodyPart;importjavax.mail.internet.MimeMessage;importjavax.mail.internet.MimeMultipart;/*** Created by zhangjie on 15/8/31.*/
public classJEmailHelper {private int port = 25; //smtp协议使用的端口
private String host = "smtp.163.com"; //发件人邮件服务器
private String user = "[email protected]"; //使用者账号
private String password = "xxxxxxx"; //使用者密码
private ListemailTos;private ListemailCCs;privateString subject;privateString body;private Listpaths;enumSendStatus {
SENDING, UNDO, SENDOK, SENDFAIL
};privateSendStatus sendStatus;public interfaceJieEmailInfterface {voidstartSend();voidSendStatus(SendStatus sendStatus);
}privateJieEmailInfterface jieEmailInfterface;public voidsetJieEmailInfterface(JieEmailInfterface jieEmailInfterface) {this.jieEmailInfterface =jieEmailInfterface;
}publicJEmailHelper() {synchronized (JEmailHelper.class) {
sendStatus=SendStatus.UNDO;
}
}//构造发送邮件帐户的服务器,端口,帐户,密码
public JEmailHelper(String host, intport, String user, String password) {synchronized (JEmailHelper.class) {this.port =port;this.user =user;this.password =password;this.host =host;
sendStatus=SendStatus.UNDO;
}
}/***@paramemailTos
* 主要接收人的电子邮箱列表
*@paramemailCCs
* 抄送人的电子邮箱列表
*@paramsubject
* 邮件标题
*@parambody
* 正文内容
*@parampaths
* 发送的附件路径集合*/
public void setParams(List emailTos, ListemailCCs,
String subject, String body, Listpaths) {this.emailTos =emailTos;this.emailCCs =emailCCs;this.subject =subject;this.body =body;this.paths =paths;
}public voidsendEmail() {newJieAsynTask().execute();
}private void sendEmailBg() throwsException {
Properties properties= newProperties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");//true一定要加引号
properties.put("mail.transport.protocol", "smtp");
JieAuthenticator jieAuth= newJieAuthenticator(user, password);
Session session=Session.getInstance(properties, jieAuth);//创建一个消息
MimeMessage msg = newMimeMessage(session);//设置发送人
msg.setFrom(newInternetAddress(user));//设置主要接收人
if (emailTos != null && !emailTos.isEmpty()) {int size =emailTos.size();
InternetAddress[] addresses= newInternetAddress[size];for (int i = 0; i < size; i++) {
addresses[i]= newInternetAddress(emailTos.get(i));
}
msg.setRecipients(Message.RecipientType.TO, addresses);
}//设置抄送人的电子邮件
if (emailCCs != null && !emailCCs.isEmpty()) {int size =emailCCs.size();
InternetAddress[] addresses= newInternetAddress[size];for (int i = 0; i < size; i++) {
addresses[i]= newInternetAddress(emailCCs.get(i));
}
msg.setRecipients(Message.RecipientType.CC, addresses);
}
msg.setSubject(subject);//创建一个消息体
MimeBodyPart msgBodyPart = newMimeBodyPart();
msgBodyPart.setText(body);//创建Multipart增加其他的parts
Multipart mp = newMimeMultipart();
mp.addBodyPart(msgBodyPart);//创建文件附件
if (paths!=null){for(String path : paths) {if (path!=null){
MimeBodyPart fileBodyPart= newMimeBodyPart();
fileBodyPart.attachFile(path);
mp.addBodyPart(fileBodyPart);
}
}
}//增加Multipart到消息体中
msg.setContent(mp);//设置日期
msg.setSentDate(newDate());//设置附件格式
MailcapCommandMap mc =(MailcapCommandMap) CommandMap
.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
msg.saveChanges();//发送消息
Transport.send(msg);
}class JieAuthenticator extendsAuthenticator {privateString strUser;privateString strPwd;publicJieAuthenticator(String user, String password) {this.strUser =user;this.strPwd =password;
}protectedPasswordAuthentication getPasswordAuthentication() {return newPasswordAuthentication(strUser, strPwd);
}
}class JieAsynTask extends AsyncTask{
@Overrideprotected voidonPreExecute() {super.onPreExecute();if (jieEmailInfterface != null) {
jieEmailInfterface.startSend();
}
}
@Overrideprotected voidonPostExecute(SendStatus result) {super.onPostExecute(result);if (jieEmailInfterface != null) {
jieEmailInfterface.SendStatus(result);
}
sendStatus=SendStatus.UNDO;
}
@OverrideprotectedSendStatus doInBackground(Void... params) {try{
sendStatus=SendStatus.SENDING;
sendEmailBg();
sendStatus=SendStatus.SENDOK;
}catch(Exception e) {
e.printStackTrace();
sendStatus=SendStatus.SENDFAIL;
}returnsendStatus;
}
}
}