原文链接:https://blog.csdn.net/qq_38225558/article/details/84960229
<!-- 邮件支持 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>activation</groupId>
<artifactId>activation</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
/**
* 发送QQ邮件
* 方式①:发送邮件的简单代码
* 方式②:发送邮件中添加附件
* 方式③:发送HTML的邮件格式
*/
public class EmailTest {
@Test //发送邮件的简单代码
public void testSimpleEmail() throws Exception {
SimpleEmail email = new SimpleEmail(); //创建一个最简单的email对象
//这里我使用的是QQ,使用的是smtp服务器,需要身份验证,大家如果是使用其它服务器,可以自己去网上进行搜索
email.setHostName("smtp.qq.com");
//POP3服务器(端口995)
//SMTP服务器(端口465或587)。
email.setSmtpPort(465);
//验证信息(发送的邮箱地址与密码) 注:这里的密码是授权码
email.setAuthenticator(new DefaultAuthenticator("xxx@qq.com", "填写你的授权码"));
email.setSSLOnConnect(true); // 是否启用SSL
email.setFrom("xxx@qq.com"); //发送邮件的地址(和验证信息的地址一样)
email.setSubject("第一封简单邮件"); //邮件的标题
email.setMsg("简单的邮件来了哦!!!"); //邮件的内容
email.addTo("xxx@qq.com"); //发送给哪一个邮件
email.send(); //进行邮件发送
}
@Test //发送邮件中添加附件
public void testEmailAttachment() throws Exception {
EmailAttachment attachment = new EmailAttachment(); //创建一个附件对象
attachment.setPath("POITestImage/1.jpg"); //放一张项目中的图片(指向真实的附件)
attachment.setDisposition(EmailAttachment.ATTACHMENT); //完成附件设置
attachment.setDescription("这张图片是一个..."); //设置附件的描述
attachment.setName("1.jpg"); //设置附件的名称
//创建email对象(MultiPartEmail可以操作附件)
MultiPartEmail email = new MultiPartEmail();
email.setHostName("smtp.qq.com");
email.setSmtpPort(465);
//验证信息(发送的邮箱地址与密码) 注:这里的密码是授权码
email.setAuthenticator(new DefaultAuthenticator("xxx@qq.com", "填写你的授权码"));
email.setSSLOnConnect(true); // 是否启用SSL
email.setFrom("xxx@qq.com"); //发送邮件的地址(和验证信息的地址一样)
email.addTo("xxx@qq.com"); //发送给哪一个邮件
email.setSubject("这是一张图片"); //邮件标题
email.setMsg("我发了一张图片给你看哦!"); //邮件内容
email.attach(attachment); //把附件加到邮件中
email.send(); //发送邮件
}
@Test //发送HTML的邮件格式
public void testHtml() throws Exception {
HtmlEmail email = new HtmlEmail(); // 创建可以写Html的email对象
email.setHostName("smtp.qq.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("xxx@qq.com", "填写你的授权码"));
email.setSSLOnConnect(true); // 是否启用SSL
email.setCharset("UTF-8"); //发送的时候如果乱码,配置相应的编码
email.addTo("xxx@qq.com"); //发送给哪一个邮件
email.setFrom("xxx@qq.com", "xx");//xx为发件人名字
email.setSubject("这里面写HTML,非常厉害");
//设置HTML的信息
String url = "https://www.baidu.com/";
email.setHtmlMsg("<html><h1 style='color:green;'><a href="+url+">www.baidu.com</a></h1>点击进入百度</html>");
//email.setTextMsg("这个就是很一般的显示"); //也可以配置普通的信息
email.send();//发送邮件
}
}
最近又在网上找了一种 Spring boot方式
这是原文链接https://zhengqing.blog.csdn.net/article/details/108677812
<!--发送邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.yml配置
server:
port: 80
spring:
# ========================== ↓↓↓↓↓↓ 发送邮件配置(QQ邮箱) ↓↓↓↓↓↓ ==========================
mail:
host: smtp.qq.com
username: xxx@qq.com # TODO 账号
password: xxxxxxxxxx # TODO 注:这里填写 在邮箱 设置 -> 账号 里面生成的`授权码` !!!
default-encoding: UTF-8
form: xxx@qq.com # TODO 邮件发送人地址
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
工具类
@Component
public class EmailUtil {
private static JavaMailSender javaMailSender;
private static String formEmail;
@Value("${spring.mail.form}")
private String formEmail2;
@Autowired
private JavaMailSender javaMailSender2;
@PostConstruct
public void beforeInit() {
javaMailSender = javaMailSender2;
formEmail = formEmail2;
}
/**
* 发送邮件 - 不带附件
*
* @param title:邮件标题
* @param content:
* 邮件内容
* @param sendTo:
* 收件人
* @return: void
* @author : zhengqing
* @date : 2020/8/14 19:28
*/
@SneakyThrows(Exception.class)
public static void sendMail(String title, String content, String... sendTo) {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 发送人邮件地址
helper.setFrom(formEmail);
// 接收人邮件地址
helper.setTo(sendTo);
// 主题
helper.setSubject(title);
// html内容 (设置true标识发送html邮件)
helper.setText(content, true);
javaMailSender.send(message);
}
/**
* 发送邮件 - 带附件
*
* @param title:邮件标题
* @param content:
* 邮件内容
* @param attachmentFilename:附件文件名
* @param file:附件
* @param sendTo:
* 收件人
* @return: void
* @author : zhengqing
* @date : 2020/8/14 19:28
*/
@SneakyThrows(Exception.class)
public static void sendMail(String title, String content, String attachmentFilename, File file, String... sendTo) {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 发送人邮件地址
helper.setFrom(formEmail);
// 接收人邮件地址
helper.setTo(sendTo);
// 主题
helper.setSubject(title);
// ① html内容 (设置true标识发送html邮件)
helper.setText(content, true);
// ② 附件
if (StringUtils.isNotBlank(attachmentFilename)) {
helper.addAttachment(attachmentFilename, file);
}
javaMailSender.send(message);
}
}
测试
@RestController
@RequestMapping("/api/test")
public class TestController {
@GetMapping("/sendEmailTest")
public String sendEmailTest() {
EmailUtil.sendMail("测试发送普通邮件", "test...", "xxx@qq.com");
File file = new File("C:\\Users\\Administrator\\Desktop\\临时垃圾站\\test.docx");
EmailUtil.sendMail("测试发送带附件邮件", "test...", "test.docx", file, "xxx@qq.com");
return "SUCCESS ~";
}
}
第一步:项目引入相应资源 commons-email-xx.jar,mail.jar,activation.jar
maven项目pom引入 (注意对应配置的版本问题哦~) 可参考 --> maven依赖查询
发送前注意需要对要发送的邮箱进行相应的设置,可参考 QQ邮箱开启SMTP服务的步骤
开启下面的2项
记住你的授权码哦,后面要使用到!!
第二步:发送邮件 (3种形式可供参考)
效果图: