A pom.xml
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
B MailBean.java
package cn.yuhuans.tianfutv.beans;
import java.util.ArrayList;
import java.util.List;
public class Mail {
private String addresser; //发件人
private List<String> addressess = new ArrayList<>();//收件地址、人
private String cc;//抄送人
private List<String> bcc = new ArrayList<>();//密送人
private String subject; //主题
private String content; //内容
private List<String> attachment = new ArrayList<>();//附件
get/set
}
C
package cn.yuhuans.tianfutv.utils;
import cn.yuhuans.tianfutv.beans.Mail;
import com.sun.mail.smtp.SMTPTransport;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.List;
import java.util.Properties;
public class MailUtils {
public static Properties props = new Properties();
public static Properties getProps() {
return props;
}
public static void setProps(Properties props) {
MailUtils.props = props;
}
public static void send(String host, String port, String protocol, String username, String password, Mail mail) {
if (mail.getAddressess() != null) {
if (mail.getAddresser() == null)
mail.setAddresser(username);
if (mail.getSubject() == null)
mail.setSubject("无主题");
}
//协议
props.setProperty("mail.transport.protocol", protocol);
//服务器主机名
props.setProperty("mail.smtp.host", host);
//端口
props.setProperty("mail.smtp.port", port);
//是否将纯文本连接升级为加密连接(TLS或SSL)
props.put("mail.smtp.starttls.enable", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
//设置超时时间为20秒
props.setProperty("mail.smtp.timeout", "20000");
//使用SSL
//开启安全协议
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
} catch (GeneralSecurityException e1) {
e1.printStackTrace();
}
props.put("mail.smtp.ssl.enable", "true");
if (sf != null) {
props.put("mail.smtp.ssl.socketFactory", sf);
}
//获取session实例
Session session = Session.getDefaultInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
//创建Message实例对象
MimeMessage message = new MimeMessage(session);
try {
//发件人
message.setFrom(new InternetAddress(mail.getAddresser()));
//收件人
List<String> recipientT0List = mail.getAddressess();
if (recipientT0List != null) {
for (String aRecipientT0List : recipientT0List) {
message.addRecipients(Message.RecipientType.TO, aRecipientT0List);
}
}
//密送人
List<String> recipientBCCList = mail.getBcc();
if (recipientBCCList != null) {
for (String aRecipientBCCList : recipientBCCList) {
message.addRecipients(Message.RecipientType.BCC, aRecipientBCCList);
}
}
//主题
message.setSubject(mail.getSubject());
//时间
message.setSentDate(new Date());
//容器类,可以包含多个MimeBodyPart对象
Multipart mp = new MimeMultipart();
//MimeBodyPart可以包装文本,图片,附件
MimeBodyPart body = new MimeBodyPart();
//正文
body.setContent(mail.getContent(), "text/html; charset=UTF-8");
mp.addBodyPart(body);
//添加图片&附件
List<String> attachmentts = mail.getAttachment();
if (attachmentts != null && attachmentts.size() > 0) {
for (String attachment : attachmentts) {
body = new MimeBodyPart();
// 得到数据源
FileDataSource fds = new FileDataSource(attachment);
// 得到附件本身并至入BodyPart
body.setDataHandler(new DataHandler(fds));
//采用这去除中文乱码
try {
body.setFileName(MimeUtility.encodeText(fds.getName()));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
mp.addBodyPart(body);
}
}
//设置邮件内容
message.setContent(mp);
message.saveChanges();
SMTPTransport t = (SMTPTransport) session.getTransport(protocol);
try {
t.connect(username, password);
t.sendMessage(message, message.getAllRecipients());
} finally {
t.close();
}
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
D application.yml
Spring:
mail:
host:
post:
username:
password:
protocol:
F test.java
package cn.yuhuans.tianfutv;
import cn.yuhuans.tianfutv.beans.Mail;
import cn.yuhuans.tianfutv.utils.MailUtils;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TianfuTVApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MailTest {
@Value("${spring.mail.username}")
String username;
@Value("${spring.mail.password}")
String password;
@Value("${spring.mail.host}")
String host;
@Value("${spring.mail.protocol}")
String protocol;
@Value("${spring.mail.port}")
String port;
@Test
public void mailTest() {
Mail mail = new Mail();
mail.setContent("你好啊,今天不是说20度吗?怎么这么冷啊!收到请尽快回复!");
List<String> attachmentts = new ArrayList<>();
attachmentts.add("F:\\阿里巴巴Java开发手册终极版v1.3.0.pdf");
attachmentts.add("D:\\my\\upload\\1ae97f20460d11e9df559471b0c183875824.jpg");
mail.setAttachment(attachmentts);
List<String> addressess = new ArrayList<>();
addressess.add("chaoqian1354@foxmail.com");
mail.setAddressess(addressess);
List<String> bcc = new ArrayList<>();
bcc.add("583907444@qq.com");
bcc.add("zcq18962285918@163.com");
mail.setBcc(bcc);
MailUtils.send(host, port, protocol, username, password,mail);
}
}
g 稳!