转载

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

项目中会遇到需要使用公共邮箱给其他邮箱发邮件的需求。在这个需求下,发邮件主要有两种不同场景。

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();  
  }
  
}

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

原文  https://segmentfault.com/a/1190000021338867
正文到此结束
Loading...