Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载。
需要用到两个jar包
mail.jar:http://www.oracle.com/technetwork/java/javamail/index-138643.html
activation.jar :http://www.oracle.com/technetwork/articles/java/index-135046.html
发送邮箱时 需要SMTP服务器,163、126、qq都有这个功能。
如163邮箱:
钩上开启smtp服务就可以。
126邮箱需要设置授权码,也就是使用stmp服务的密码
简单封装:
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.List;
import java.util.Properties;
public class MailUtils {
private MimeMessage message;
//组装最终的消息
private MimeMultipart multipart = new MimeMultipart();
public static MailUtils getMail() {
MailUtils mailUtils = new MailUtils();
mailUtils.init();
return mailUtils;
}
private MailUtils init() {
// 配置发送邮件的环境属性
final Properties props = new Properties();
// 表示SMTP发送邮件,需要进行身份验证
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.126.com");
// 发件人的账号
props.put("mail.user", "xxx@126.com");
// 访问SMTP服务时需要提供的密码
//如果有授权码,只需要在这里填写授权码
props.put("mail.password", "xxx");
// 构建授权信息,用于进行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);
// 创建邮件消息
message = new MimeMessage(mailSession);
// 设置发件人
InternetAddress form = null;
try {
form = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(form);
// 设置抄送
// InternetAddress cc = new InternetAddress("abc@123.net");
// message.setRecipient(MimeMessage.RecipientType.CC, cc);
// 设置密送,其他的收件人不能看到密送的邮件地址
// InternetAddress bcc = new InternetAddress("def@163.com");
// message.setRecipient(MimeMessage.RecipientType.BCC, bcc);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
return this;
}
public MailUtils sendTo(String email){
InternetAddress to = null;
try {
to = new InternetAddress(email);
message.setRecipient(MimeMessage.RecipientType.TO, to);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
return this;
}
public MailUtils sendTo(String emails[]){
try {
InternetAddress to[] = new InternetAddress[emails.length];
for (int i=0; i<emails.length; i++)
to[i] = new InternetAddress(emails[i]);
message.addRecipients(MimeMessage.RecipientType.TO, to);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
return this;
}
public boolean send() {
// 发送邮件
try {
message.setContent(multipart);
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
return true;
}
public MailUtils setTitle(String title) {
// 设置邮件标题
try {
message.setSubject(title);
} catch (MessagingException e) {
e.printStackTrace();
}
return this;
}
//发送文本
public MailUtils setText(String text) {
try {
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setText(text);
multipart.addBodyPart(contentPart);
} catch (MessagingException e) {
e.printStackTrace();
}
return this;
}
//发送html消息
public MailUtils setContent(String content) {
try {
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setContent(content, "text/html");
multipart.addBodyPart(contentPart);
} catch (MessagingException e) {
e.printStackTrace();
}
return this;
}
//发送多个附件
public MailUtils setFiles(List<String> filepaths) {
for (String path : filepaths)
setFile(path);
return this;
}
//发送附件
public MailUtils setFile(String filepath) {
try {
//创建文件部分
MimeBodyPart filePart = new MimeBodyPart();
DataSource source = new FileDataSource(filepath);
filePart.setDataHandler(new DataHandler(source));
multipart.addBodyPart(filePart);
} catch (MessagingException e) {
e.printStackTrace();
}
return this;
}
}
使用:
boolean res = MailUtils.getMail().sendTo("xxx@qq.com")
.setTitle("==>title")
.setText("123\n").setContent("\n<a>xyz.com</a>").setContent("321")
.send();
System.out.println("==> "+res);
参考:
http://blog.csdn.net/xietansheng/article/details/51673073
http://www.runoob.com/java/java-sending-email.html