项目中会遇到需要使用公共邮箱给其他邮箱发邮件的需求。在这个需求下,发邮件主要有两种不同场景。
1.能获取到公共邮箱的授权码,【此授权码在公共邮箱的个人设置里进行申请,如qq 网易邮箱见下图】
2.无法获取到授权码。只知道公共邮箱的密码,此中情况需要进行特殊处理
一.能获取到公共邮箱的授权码
如qq的授权码申请位置
1.需要引入的pom坐标
`<``dependency``>`
`<``groupId``>javax.mail</``groupId``>`
`<``artifactId``>mail</``artifactId``>`
`<``version``>1.4.4</``version``>`
`</``dependency``>`
2.springboot中添加的配置
spring:
mail:
host: smtp.qq.com //邮箱服务的域名
username: 615745867@qq.com //公共邮箱名
password: bnllzturxgngbfhd //授权码【不是邮箱密码】
default-encoding: utf-8 //编码格式
3.发送邮件的代码段
@Autowired //springboot中配置了上面的内容后可直接引入
private JavaMailSender mailSender
public void send(){
MimeMessage message=mailSender.createMimeMessage();
try {
MimeMessageHelper helper=new MimeMessageHelper(message,true);
helper.setTo("yangzhe-cto@boe.com.cn");//收信人
helper.setSubject("测试邮件");//主题
helper.setText("<html><body><h3><font color=\\"red\\">" + "大家好,这是springboot发送的HTML邮件" + "</font></h3><div>这是一封测试邮件,哈哈!</div></body></html>",true);//内容
helper.setFrom(from);//发信人
} catch (MessagingException e) {
e.printStackTrace();
}
mailSender.send(message);
}
//上文只是一个发送html内容的邮件,还有带附件,文本等形式的邮件发送,具体见[https://www.runoob.com/java/java-sending-email.html](https://www.runoob.com/java/java-sending-email.html)
二.无法获取到授权码,只有邮箱密码
1.jar的pom坐标同上
2.代码段
//设置服务器域名
private static String VALUE_SMTP = "smtp.163.com";//邮箱域名如stmp.qq.com
//发件人邮箱
private String SEND_USER = "mymail@163.com";
private String SEND_UNAME = "测试"; //发件人名称
//邮箱密码
private String SEND_PWD = "mypwd"; //邮箱的密码而不是授权码
// 建立会话
private MimeMessage message;
private Session s;
public void send(){
try {
// 发件人
InternetAddress from = new InternetAddress(SEND_USER);//发送人地址
message.setFrom(from);
// 收件人
InternetAddress to = new InternetAddress(receiveUser);
message.setRecipient(Message.RecipientType.TO, to);
// 邮件标题
message.setSubject(headName);
String content = sendHtml.toString();
// 邮件内容,也可以使纯文本"text/plain" 指定类型
message.setContent(content, "text/html;charset=UTF-8");
message.setSentDate(new Date());
message.saveChanges();
Transport transport = s.getTransport("smtp");
POP3/SMTP/IMAP服务时,不需要授权码
transport.connect(VALUE_SMTP, SEND_USER, SEND_PWD);
// 发送
transport.sendMessage(message, message.getAllRecipients());
transport.close();
System.out.println("send success!");
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
只需要有公共邮箱的用户名密码就能发送邮件
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。