项目中会遇到需要使用公共邮箱给其他邮箱发邮件的需求。在这个需求下,发邮件主要有两种不同场景。
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(); } }
只需要有公共邮箱的用户名密码就能发送邮件