有授权码的邮件发送及只有邮箱用户名密码的邮件发送

项目中会遇到需要使用公共邮箱给其他邮箱发邮件的需求。在这个需求下,发邮件主要有两种不同场景。
1.能获取到公共邮箱的授权码,【此授权码在公共邮箱的个人设置里进行申请,如qq 网易邮箱见下图】
2.无法获取到授权码。只知道公共邮箱的密码,此中情况需要进行特殊处理

一.能获取到公共邮箱的授权码
如qq的授权码申请位置
有授权码的邮件发送及只有邮箱用户名密码的邮件发送_第1张图片

1.需要引入的pom坐标

`<``dependency``>`

`<``groupId``>javax.mail`

`<``artifactId``>mail`

`<``version``>1.4.4`

``

2.springboot中添加的配置

 spring:
    mail:  
         host: smtp.qq.com    //邮箱服务的域名
        username: [email protected]   //公共邮箱名
        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("[email protected]");//收信人  
            helper.setSubject("测试邮件");//主题  
            helper.setText("

" + "大家好,这是springboot发送的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 = "[email protected]"; 
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();  
  }
  
}

只需要有公共邮箱的用户名密码就能发送邮件

你可能感兴趣的:(java,spring,springboot)