今日研究了一下java发送邮件的程序,有两种方法,一种是用java.mail;一种是用commons-email。
一、JAVA Mail是很常用的用于发送邮件的包,我们可以从这里获取,或者在maven中添加如下配置:
com.sun.mail
javax.mail
1.5.5
示例代码如下:
package cn.mail.test;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EmailTest {
private static boolean send_qqmail(String strMail, String strTitle, String strText){
boolean bret = false;
try
{
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
//你自己的邮箱
props.put("mail.user", "[email protected]");
//你开启pop3/smtp时的验证码
props.put("mail.password", "xxxxxxxx");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.starttls.enable", "true");
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
InternetAddress to = new InternetAddress(strMail);
message.setRecipient(RecipientType.TO, to);
// 设置邮件标题
message.setSubject(strTitle);
// 设置邮件的内容体
message.setContent(strText, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
bret = true;
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
return bret;
}
private static boolean send_163mail(String strMail, String strTitle, String strText){
boolean bret = false;
try
{
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.163.com");
// 发件人的账号
props.put("mail.user", "[email protected]");
//发件人的密码
props.put("mail.password", "xxxxxxx");
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
// 设置收件人
InternetAddress to = new InternetAddress(strMail);
message.setRecipient(RecipientType.TO, to);
// 设置邮件标题
message.setSubject(strTitle);
// 设置邮件的内容体
message.setContent(strText, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
bret = true;
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
return bret;
}
public static void main(String[] args) {
if (send_qqmail("[email protected]", "测试QQ邮箱发送", "你们好吗
"))
System.out.println("QQ邮件发送成功");
if (send_163mail("[email protected]", "测试网易邮箱发送", "你们好吗
"))
System.out.println("网易邮件发送成功");
}
}
这里的时候,在用QQ邮箱时,发送邮件的邮箱记得开通pop3/smtp服务。
二、使用JAVA Mail我们可以完成邮件的发送,但是我们可以发现实现过程略显复杂,比较繁琐,所以我们可以借助commons-email
简化发送邮件的过程,commons-email可以从这里下载,或在maven中添加如下配置:
org.apache.commons
commons-email
1.4
示例代码如下:
package com.mail.test;
import java.util.Date;
import org.apache.commons.mail.SimpleEmail;
public class CommonsEmailTest{
/**
* 发送文本邮件
*
* @throws Exception
*/
public static boolean sendTextMail(String strMail, String strTitle, String strText) throws Exception{
boolean bret = false;
SimpleEmail mail = new SimpleEmail();
// 设置邮箱服务器信息
mail.setSslSmtpPort("25");
mail.setHostName("smtp.163.com");
// 设置密码验证器
mail.setAuthentication("[email protected]", "XXXXXX(授权密码)");
// 设置邮件发送者
mail.setFrom("[email protected]");
// 设置邮件接收者
mail.addTo(strMail);
// 设置邮件编码
mail.setCharset("UTF-8");
// 设置邮件主题
mail.setSubject(strTitle);
// 设置邮件内容
mail.setMsg(strText);
// 设置邮件发送时间
mail.setSentDate(new Date());
// 发送邮件
mail.send();
return bret;
}
public static void main(String[] args) {
try {
if (sendTextMail("[email protected]", "测试QQ邮箱发送", "你们好吗???"))
System.out.println("QQ邮件发送成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这里用common-email时,我选择用163邮箱往QQ邮箱上发送邮件,发送成功,代码量也比用mail是简单多了
注意事项:
在用java程序发送邮件时,大部分问题是邮箱没有开通pop3/smtp,会报javax.mail.AuthenticationFailedException,遇到这个问题首先要先确定pop3/smtp服务是否开启,详情参考:http://blog.csdn.net/zouxucong/article/details/60578824
这里,多谢两位大神的文章可供参看
参考文章一:http://blog.csdn.net/jianggujin/article/details/51253129
参考文章二:http://blog.csdn.net/zhang_ruiqiang/article/details/50754615