一、关键要点
当使用Java发送电子邮件时,以下是一些关键要点:
- 导入依赖库:确保项目中包含JavaMail库的依赖项。通常使用Maven或Gradle等构建工具来管理依赖关系。
- 配置邮件服务器参数:提供邮件服务器的主机名、端口号、协议(如SMTP)以及可能需要的身份验证信息(如用户名和密码)。
- 创建邮件会话:使用javax.mail.Session类创建与邮件服务器的会话。在会话中,指定服务器参数和身份验证信息。
- 构造邮件对象:使用javax.mail.internet.MimeMessage类构造邮件对象。设置发件人、收件人、主题和正文等信息。
- 设置邮件内容:使用javax.mail.internet.MimeMessageHelper类或其他适当的方式设置邮件的内容。可以支持HTML内容、附件和其他邮件特性。
- 发送邮件:通过javax.mail.Transport类的send方法发送邮件。提供构建的邮件对象作为参数。
- 处理异常:使用try-catch块捕获javax.mail.MessagingException异常,并适当处理发送邮件过程中可能发生的异常情况。
- 附加操作(可选):根据需求,可能需要添加更多功能,如抄送、密送、回复地址、邮件优先级等。
请注意,发送邮件的具体实现方式可能因邮件服务器的不同而有所差异。在使用JavaMail发送邮件之前,需要先了解所使用的邮件服务器的要求和配置。另外,保护用户数据的安全性也是非常重要的,建议采取适当的安全措施,如使用SSL/TLS加密连接或使用授权码代替密码进行身份验证。
二、发送邮件原理
发件人【设置授权码】 - SMTP协议【Simple Mail TransferProtocol - 是一种提供可靠且有效的电子邮件传输的协议】 - 收件人
三、SpringBoot中邮件发送
2. 开发代码
2.1 导入依赖
<!--对邮件的支持jar-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.2 配置
spring:
mail:
host: smtp.qq.com # 设置邮箱主机(服务商),这里使用QQ邮件服务器
username: 1184266892@qq.com # 设置用户名 - 发送方
password: xjirjxexiadciafb # 设置密码,该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码
properties:
mail:
smtp:
auth: true # 必须进行授权认证,它的目的就是阻止他人任意乱发邮件
starttls: #SMTP加密方式:连接到一个TLS保护连接
enable: true
required: true
2.3 发送简单邮件
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.internet.MimeMessage;
import java.io.File;
@SpringBootTest
public class EmailTest {
@Autowired
private JavaMailSender javaMailSender;
//1. 发送简单邮件
@Test
public void send1(){
SimpleMailMessage mailMessage = new SimpleMailMessage();
//设置发送人
mailMessage.setFrom("test1@qq.com");
//邮件主题
mailMessage.setSubject("测试邮件");
//邮件内容:普通文件无法解析html标签
mailMessage.setText("test.....");
//收件人
mailMessage.setTo("test2@qq.com");
//发送邮件
javaMailSender.send(mailMessage);
}
//2. 发送复杂邮件(邮件格式、附件)
@Test
public void send2() throws Exception {
//创建复杂邮件对象
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//true - 能够添加附件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,"utf-8");
helper.setFrom("test1@qq.com");
helper.setSubject("测试邮件");
//true - 能够再内容中编写html标签 - 会解析
helper.setText("<h1>你的店铺已经注册!!!</h1><img src='http://dfs.java.itsource.cn/group1/M00/00/B9/rBE3kWD_fEuALou2AAB4rV4bI7c231.jpg' ><a href='http://localhost:8080/shop/active/22'>点击该链接激活</a>",true);
//添加附件
helper.addAttachment("p7.jpg",new File("C:\\Users\\Administrator\\Pictures\\photos\\p7.jpg"));
helper.addAttachment("g1.gif", new File("C:\\Users\\Administrator\\Pictures\\g1.gif"));
//收件人
helper.setTo("test2@qq.com");
javaMailSender.send(mimeMessage);
}
}