Java发送邮件超详细!!!(以QQ邮箱个人版和企业版为例)
个人邮箱示例
配置依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
简单了解涉及的两个传输协议
**发送邮件:**我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
接收邮件: 我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
QQ邮箱中获取对应的权限
QQ邮箱需要安全验证,我们需要获取他对应的权限
配置文件
#发送邮件配置
# SMTP服务器的地址,这是QQ的,其他的邮箱要改一下
spring.mail.host=smtp.qq.com
#发送方的邮箱
spring.mail.username=xxxxxxx@qq.com
#这里刚刚获得的授权码
spring.mail.password=movndmshshvxecag
# 设置是否需要认证,如果为true,那么用户名和密码就必须的,
# 如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。
spring.mail.properties.mail.smtp.auth=true
# STARTTLS 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
工具类
@Component
@Slf4j
public class MailUtil {
@Value("${spring.mail.username}")
private String sender;
@Resource
private JavaMailSender javaMailSender;
public void sendSimpleMail(Mail mail) {
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(sender);
mailMessage.setTo(mail.getRecipient());
mailMessage.setSubject(mail.getSubject());
mailMessage.setText(mail.getContent());
javaMailSender.send(mailMessage);
log.info("邮件发送成功 收件人:{}", mail.getRecipient());
} catch (Exception e) {
log.error("邮件发送失败 {}", e.getMessage());
throw new BusinessException(BusinessExceptionCode.EMAIL_FORMAT_ERROR);
}
}
}
JavaBean
public class Mail implements Serializable {
private static final long serialVersionUID = 4359709211352400087L;
private String recipient;
private String subject;
private String content;
}
测试类
@SpringBootTest
public class SpringbootMailApplicationTests {
@Resource
private MailUtil mailUtil;
private static final String recipient = "bugbugbug@qq.com";
@Test
public void sendSimpleMail() {
Mail mail = new Mail();
int code = (int) ((Math.random() * 9 + 1) * 100000);
mail.setRecipient(recipient);
mail.setSubject("修改邮箱");
mail.setContent("亲爱的用户:您好!\n" +
"\n" + " 您收到这封电子邮件是因为您 (也可能是某人冒充您的名义) 申请了修改邮箱。假如这不是您本人所申请, 请不用理会这封电子邮件, 但是如果您持续收到这类的信件骚扰, 请您尽快联络管理员。\n" +
"\n" +
" 请使用以下验证码完成后续修改邮箱流程\n" + "\n " +
code + "\n\n" +" 注意:请您收到邮件的十分钟内("+
DateFormatUtils.format(new Date().getTime() + 10 * 60 * 1000, "yyyy-MM-dd HH:mm:ss")+
")前使用,否则验证码将会失效。"
);
mailUtil.sendSimpleMail(mail);
}
}
结果
企业邮箱示例
企业邮箱相对于个人邮箱要改两处地方
一:配置文件
#需要改一下smtp地址,我在这卡了半天没找到,太草了QwQ!!!
spring.mail.host=smtp.exmail.qq.com
spring.mail.username=xxxxx@xxxx.com
#注意这里的密码可以填登录密码,不需要授权码,但如果你想用授权码登录,授权码获取参照第三条
spring.mail.password=xxxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
#如果是https的,ssl配置必须有,如果不是可以不用加
#spring.mail.properties.mail.smtp.ssl.enable=true
#spring.mail.properties.mail.smtp.ssl.socketFactory.class=com.sun.mail.util.MailSSLSocketFactory
#spring.mail.properties.mail.smtp.ssl.socketFactory.fallback=false
二:用管理员账号授予邮箱对应权限
三:获取授权码
如果想用授权码登陆可以这样获取授权码
|