public class SendEmail {
private static final String TAG = "SendEmail";
//要发送Email地址
private String mailTo = null;
//邮件发送来源地址
private String mailFrom = null;
//SMTP主机地址
private String smtpHost = null;
//是否启用调试
private boolean debug = false;
private String messageBasePath = null;
//Email主题
private String subject;
public void setMailTo(String mailTo) {
this.mailTo = mailTo;
}
public void setMailFrom(String mailFrom) {
this.mailFrom = mailFrom;
}
public void setSmtpHost(String smtpHost) {
this.smtpHost = smtpHost;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
public void setMessageBasePath(String messageBasePath) {
this.messageBasePath = messageBasePath;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setMsgContent(String msgContent) {
this.msgContent = msgContent;
}
public void setAttachedFileList(Vector attachedFileList) {
this.attachedFileList = attachedFileList;
}
public void setEmailAccount(String emailAccount) {
this.emailAccount = emailAccount;
}
public void setEmailPwd(String emailPwd) {
this.emailPwd = emailPwd;
}
public void setMessageContentType(String messageContentType) {
this.messageContentType = messageContentType;
}
public void setEmailbccTo(String emailbccTo) {
this.emailbccTo = emailbccTo;
}
public void setEmailccTo(String emailccTo) {
this.emailccTo = emailccTo;
}
//Email内容
private String msgContent;
private Vector attachedFileList;
private String emailAccount = null;
private String emailPwd = null;
private String messageContentType = "text/html;charset=utf-8";
private String emailbccTo = null;
private String emailccTo = null;
/*
默认构造函数
*/
public SendEmail() {
super();
}
private void writeEmail(Session session, Message message) throws MessagingException {
String fileName;
Multipart multipart = new MimeMultipart();
//设定发件人地址
if (mailFrom != null) {
message.setFrom(new InternetAddress(mailFrom));
Log.i(TAG, "发件人邮件地址:" + mailFrom);
} else {
Log.i(TAG, "没有指定发件人邮件地址");
return;
}
//设定收件人地址
if (mailTo != null) {
message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
Log.i(TAG, "收件人邮件地址:" + mailTo);
} else {
Log.i(TAG, "没有指定收件人邮件地址");
return;
}
//设定抄送地址
if (emailccTo != null) {
message.setRecipient(Message.RecipientType.CC, new InternetAddress(emailccTo));
Log.i(TAG, "抄送邮件地址:" + emailccTo);
} else {
Log.i(TAG, "没有指定抄送邮件地址");
return;
}
//设定密送地址
if (emailbccTo != null) {
message.setRecipient(Message.RecipientType.BCC, new InternetAddress(emailbccTo));
Log.i(TAG, "密送邮件地址:" + emailbccTo);
} else {
Log.i(TAG, "没有指定密送邮件地址");
return;
}
//设置邮件主题
message.setSubject(subject);
Log.i(TAG, "邮件主题:" + subject);
//设置回复地址
message.setReplyTo(new InternetAddress[]{new InternetAddress(mailFrom)});
//创建并设置第一部分
MimeBodyPart bodyPart = new MimeBodyPart();
if (msgContent != null) {
Log.i(TAG, "邮件内容:" + msgContent);
bodyPart.setContent(msgContent, messageContentType);
} else {
bodyPart.setContent("", messageContentType);
}
multipart.addBodyPart(bodyPart);
//附件文件到邮件中
if (attachedFileList != null) {
for (Enumeration fileList = attachedFileList.elements(); fileList.hasMoreElements(); ) {
fileName = (String) fileList.nextElement();
MimeBodyPart mBodyPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(messageBasePath + fileName);
Log.i(TAG, "Email发送的附件为:" + messageBasePath + fileName);
mBodyPart.setDataHandler(new DataHandler(fds));
mBodyPart.setFileName(fileName);
multipart.addBodyPart(mBodyPart);
}
}
Log.i(TAG, "设置邮件部分");
message.setContent(multipart);
message.setSentDate(new Date());
}
/**
* 发送邮件方法
*
* @return true 表示发送成功,false表示不成功
*/
public boolean sendEmail() {
int loopCount;
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", smtpHost);
properties.setProperty("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "25");
MailAuthenticator authenticator = new MailAuthenticator();
Session session = Session.getInstance(properties, authenticator);
session.setDebug(debug);
MimeMessage mimeMessage = new MimeMessage(session);
//这里如果用Transport的话会出现错误
SMTPTransport transport = new SMTPTransport(session, new URLName("smtp", "smtp.qq.com", 25, null, MailAuthenticator.TENCENT_EMAIL_USER, MailAuthenticator.TENCENT_EMAIL_PWD));
try {
writeEmail(session, mimeMessage);
//transport = session.getTransport("smtp");
try {
Log.i(TAG, "开始连接服务器");
transport.connect(smtpHost, 25, MailAuthenticator.TENCENT_EMAIL_USER, MailAuthenticator.TENCENT_EMAIL_PWD);
} catch (AuthenticationFailedException e) {
e.printStackTrace();
Log.i(TAG, "连接服务器失败");
return false;
} catch (MessagingException e) {
e.printStackTrace();
Log.i(TAG, "发送邮件过程中出现错误");
return false;
}
Log.i(TAG, "开始发送邮件");
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
transport.close();
Log.i(TAG, "关闭连接");
} catch (MessagingException e) {
e.printStackTrace();
Log.i(TAG, "发送邮件失败");
return false;
} finally {
try {
if (transport != null && transport.isConnected()) {
transport.close();
Log.i(TAG, "在finally中关闭连接");
}
} catch (MessagingException e) {
e.printStackTrace();
}
}
Log.i(TAG, "邮件发送成功");
return true;
}
}
tips---其中的MyAuthenticator类继承自Authenticator,重写这个方法即可
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(邮箱用户名,密码);
}