package com.kaixin.android.mail;
import java.io.File;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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 android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
/**
* ����ʵ����sendHtmlMail sendTextMail ,ֻ�Ƿֱ�text ,html ���ֵ���Ϣװ��Message �����У�����from ,
* to , port �ȣ�δ���в��� ���Ǵ��ಢ����ֱ��ʹ�ã� �����Ѷ�����һ��populateCommonInfo����
* ��Ҫ�������ʵ�֣���MailSenderInfo ��Ϣ��װ��Message ������ ��Ϊ��Щ���� ��Ҫ�õ�SSL
* ,����Щ���ã����������ǵ�����ֱ���populateCommonInfo�н�����Ϣ����װ ����������ssl
* ���Dz��ã���Ҫ�ͻ������ж�,Ȼ��ʹ����Ӧ������ ��֪����������MailSender SSLMailSender
*
* @author Administrator
*
*/
public class MailSender implements AbstractMailSender {
Properties props = null;
protected Message populateCommonInfo(MailSenderInfo mailInfo)
throws MessagingException {
props = new Properties();
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
if (mailInfo.getMailServerHost().equals("smtp.gmail.com")
|| mailInfo.getMailServerHost().equals("smtp.qq.com")) {
props.setProperty("mail.smtp.host", mailInfo.getMailServerHost());
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
} else if (mailInfo.getMailServerHost().equals("smtp.163.com")) {
props.setProperty("mail.smtp.host", mailInfo.getMailServerHost());
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.stmp.port", "25");
} else {
props.put("mail.smtp.host", mailInfo.getMailServerHost());
props.put("mail.smtp.auth", "true");
props.put("mail.stmp.port", "25");
}
Session session = Session.getInstance(props, new MyAuthenticator(
mailInfo.getUserName(), mailInfo.getPassword()));
System.out.println(mailInfo.getUserName() + mailInfo.getPassword()
+ mailInfo.getMailServerHost());
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(mailInfo.getFromAddress()));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(mailInfo.getToAddress(), false));
msg.setSubject(mailInfo.getSubject());
msg.setSentDate(new Date());
return msg;
}
public boolean sendHtmlMail(MailSenderInfo mailInfo)
throws AddressException, MessagingException {
try {
Message msg = populateCommonInfo(mailInfo);
Multipart mainPart = new MimeMultipart();
// 创建�?��包含HTML内容的MimeBodyPart
// 设置信件的附�?
for (File f : mailInfo.getAttachFileNames()) {
BodyPart filePart = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(f));
filePart.setFileName(f.getName());//
filePart.setDataHandler(dh);
mainPart.addBodyPart(filePart);
}
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内�?
msg.setContent(mainPart);
Transport.send(msg);
for (File f : mailInfo.getAttachFileNames()) {
System.out.println("delete");
f.delete();
}
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
public boolean sendTextMail(MailSenderInfo mailInfo)
throws AddressException, MessagingException {
try {
Message msg = populateCommonInfo(mailInfo);
msg.setText(mailInfo.getContent());
Transport.send(msg);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
}