Java发送邮件
添加依赖
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
MailServer.java
创建与SMTP 邮件服务器的会话
package com.lgyt;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import java.util.Properties;
public class MailServer {
private static Session session = null;
public static Session getSession() {
if(MailServer.session != null){
return MailServer.session;
}
Properties properties = new Properties();
properties.setProperty("mail.smtp.host", "smtp.qq.com");
properties.setProperty("mail.smtp.port", "587");
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.ssl.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.starttls.enable", "true"); // 启用TLS加密
properties.setProperty("mail.smtp.ssl.protocols", "TLSv1.2");
properties.setProperty("mail.smtp.auth", "true");
//Session.getDefaultInstance()方法创建的是一个默认的、全局的Session实例,在程序结束时它会自动关闭。
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxxx@qq.com","授权码");
}
});
session.setDebug(true);
MailServer.session = session;
return MailServer.session;
}
}
JavaMail.java
构建消息
package com.lgyt;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Date;
public class JavaMail {
private Session session = null;
public JavaMail(){
this.session = MailServer.getSession();
}
//纯文字信息
public MimeMessage constructSimpleMessage() {
MimeMessage mimeMessage = null;
try {
mimeMessage = new MimeMessage(this.session);
mimeMessage.setFrom("xxxx@qq.com");//邮件发信人
mimeMessage.addRecipients(Message.RecipientType.TO, "xxxx@qq.com");//设置收信人
mimeMessage.setSentDate(new Date());//设置发送日期
mimeMessage.setSubject("hello world!");//邮件主题
mimeMessage.setContent("邮箱测试...", "text/plain;charset=utf-8");//正文内容
} catch (MessagingException e){
e.printStackTrace();
}
return mimeMessage;
}
//正文、附件
public MimeMessage constructComplexMessage() {
MimeMessage mimeMessage = null;
try {
mimeMessage = new MimeMessage(this.session);
mimeMessage.setFrom("xxxx@qq.com");//邮件发信人
mimeMessage.addRecipients(Message.RecipientType.TO, "xxxx@qq.com");//设置收信人
mimeMessage.setSubject("hello world!");//邮件主题
MimeMultipart mixed = new MimeMultipart("mixed");
mimeMessage.setContent(mixed);//设置整封邮件的MIME消息体为混合的组合关系
MimeBodyPart attach1 = new MimeBodyPart();//创建附件一
MimeBodyPart attach2 = new MimeBodyPart();//创建附件二
MimeBodyPart content = new MimeBodyPart();//创建邮件正文
mixed.addBodyPart(attach1);//将附件一添加到MIME消息体中
mixed.addBodyPart(attach2);//将附件二添加到MIME消息体中
mixed.addBodyPart(content);//将正文添加到消息体中
FileDataSource fds1 = new FileDataSource(new File("E:\\pic.jpg"));//构造附件一的数据源
DataHandler dh1 = new DataHandler(fds1);//数据处理
attach1.setDataHandler(dh1);//设置附件一的数据源
attach1.setFileName(MimeUtility.encodeText("壁纸"));//设置附件一的文件名
FileDataSource fds2 = new FileDataSource(new File("E:\\小作文.txt"));
DataHandler dh2 = new DataHandler(fds2);
attach2.setDataHandler(dh2);
attach2.setFileName(MimeUtility.encodeText("小作文"));//设置文件名时,如果有中文,可以通过MimeUtility类中的encodeText方法进行编码,避免乱码
MimeMultipart bodyMimeMultipart = new MimeMultipart("related");//设置正文的MIME类型
content.setContent(bodyMimeMultipart);//将bodyMimeMultipart添加到正文消息体中
MimeBodyPart bodyPart = new MimeBodyPart();//正文的HTML部分
bodyPart.setContent("邮箱测试...<hr/><img src='cid:pic.png'/>","text/html;charset=utf-8");
MimeBodyPart picPart = new MimeBodyPart();//正文的图片部分
DataHandler dh3 = new DataHandler(new FileDataSource("E:\\pic.jpg"));
picPart.setDataHandler(dh3);
picPart.setContentID("pic.png");
//将正文的HTML和图片部分分别添加到bodyMimeMultipart中
bodyMimeMultipart.addBodyPart(bodyPart);
bodyMimeMultipart.addBodyPart(picPart);
mimeMessage.saveChanges();
} catch (UnsupportedEncodingException e){
e.printStackTrace();
} catch (MessagingException e){
e.printStackTrace();
}
return mimeMessage;
}
public void sendMessage(MimeMessage mimeMessage) {
Transport transport = null;
try {
transport = this.session.getTransport();
transport.connect();
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());//发送邮件,第二个参数为收件人
} catch (MessagingException e) {
e.printStackTrace();
} finally {
try {
if(transport != null ) transport.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}
测试
在JavaMail类中添加Main函数进行测试
//测试constructSimpleMessage函数
public static void main(String[] args) {
JavaMail javaMail = new JavaMail();
MimeMessage simpleMessage = javaMail.constructSimpleMessage();
javaMail.sendMessage(simpleMessage);
}
//测试constructComplexMessage函数
public static void main(String[] args) {
JavaMail javaMail = new JavaMail();
MimeMessage complexMessage = javaMail.constructComplexMessage();
javaMail.sendMessage(complexMessage);
}