gpt4 book ai didi

谈谈在Java发送邮件中遇到的的问题

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章谈谈在Java发送邮件中遇到的的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

发送邮件的代码是我从以前的一个应用上直接拷贝过来的。以前使用的腾讯的邮件服务,程序执行起来没有任何问题。后来修改为微软office365邮件服务后,却遇到了两个问题.

问题一,tls加密设置 。

异常信息如下:

?
1
Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

这个解决起来比较容易。找了些资料,添加如下配置即可:

?
1
mail.smtp.starttls.enable = true

问题二,提示协议为null:

异常信息如下:

?
1
2
3
4
5
Exception in thread "main" javax.mail.NoSuchProviderException: Invalid protocol: null
  at javax.mail.Session.getProvider(Session.java:449)
  at javax.mail.Session.getTransport(Session.java:667)
  at javax.mail.Session.getTransport(Session.java:648)
  at javax.mail.Session.getTransport(Session.java:634)

这个问题是在将应用部署到生产环境后才遇到的。经检查后发现调用的jar包不是我在maven中指定的版本。后来确认是应用使用的jar包和容器(就是jetty)使用的jar包冲突了。容器使用的jar版本较旧,不过默认优先加载容器的jar。这样问题解决思路有两个:

依赖容器的jar重新写代码; 。

更新容器的jar.

第二个选择多少有些危险,就采用第一个选项好了,只需要修改一行即可:

?
1
Transport transport = session.getTransport( "smtp" );

这个问题在javax.mail 1.4版本中会出现。之后较高的版本会默认采用SMTP协议发送邮件.

修改后的程序:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.zhyea.zytools;
 
import java.util.Date;
import java.util.Properties;
 
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
public class MailSender {
 
  private static final String MAIL_SMTP_HOST = "smtp.exmail.qq.com" ;
  private static final Integer MAIL_SMTP_PORT = 587 ;
  private static final Boolean MAIL_SMTP_AUTH = true ;
  private static final String MAIL_SMTP_USER = "robin@zhyea.com" ;
  private static final String MAIL_SMTP_PASSWORD = "robinzhyea" ;
 
  private static Properties props = new Properties();
 
  static {
   props.put( "mail.smtp.host" , MAIL_SMTP_HOST);
   props.put( "mail.smtp.auth" , MAIL_SMTP_AUTH);
   props.put( "mail.smtp.user" , MAIL_SMTP_USER);
   props.put( "mail.smtp.password" , MAIL_SMTP_PASSWORD);
   props.put( "mail.smtp.starttls.enable" , true );
  }
 
 
  /**
   * 发送邮件
   */
  public static void send(String to, String title, String content) {
   try {
    Session session = Session.getInstance(props); //创建邮件会话
    MimeMessage message = new MimeMessage(session); //由邮件会话新建一个消息对象
 
    message.setFrom( new InternetAddress(MAIL_SMTP_PASSWORD)); //设置发件人的地址
    message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); //设置收件人,并设置其接收类型为TO
    //设置信件内容
    //message.setText(mailContent); //发送 纯文本 邮件 TODO
    message.setSubject(title); //设置标题
    message.setContent(content, "text/html;charset=gbk" ); //发送HTML邮件,内容样式比较丰富
    message.setSentDate( new Date()); //设置发信时间
    message.saveChanges(); //存储邮件信息
 
    //发送邮件
    Transport transport = session.getTransport( "smtp" );
    transport.connect(MAIL_SMTP_USER, MAIL_SMTP_PASSWORD);
    transport.sendMessage(message, message.getAllRecipients()); //发送邮件,其中第二个参数是所有已设好的收件人地址
    transport.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 
}
package com.zhyea.zytools;
 
import java.util.Date;
import java.util.Properties;
 
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
public class MailSender {
 
  private static final String MAIL_SMTP_HOST = "smtp.exmail.qq.com" ;
  private static final Integer MAIL_SMTP_PORT = 587 ;
  private static final Boolean MAIL_SMTP_AUTH = true ;
  private static final String MAIL_SMTP_USER = "robin@zhyea.com" ;
  private static final String MAIL_SMTP_PASSWORD = "robinzhyea" ;
 
  private static Properties props = new Properties();
 
  static {
   props.put( "mail.smtp.host" , MAIL_SMTP_HOST);
   props.put( "mail.smtp.auth" , MAIL_SMTP_AUTH);
   props.put( "mail.smtp.user" , MAIL_SMTP_USER);
   props.put( "mail.smtp.password" , MAIL_SMTP_PASSWORD);
   props.put( "mail.smtp.starttls.enable" , true );
  }
 
 
  /**
   * 发送邮件
   */
  public static void send(String to, String title, String content) {
   try {
    Session session = Session.getInstance(props); //创建邮件会话
    MimeMessage message = new MimeMessage(session); //由邮件会话新建一个消息对象
 
    message.setFrom( new InternetAddress(MAIL_SMTP_PASSWORD)); //设置发件人的地址
    message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); //设置收件人,并设置其接收类型为TO
    //设置信件内容
    //message.setText(mailContent); //发送 纯文本 邮件 TODO
    message.setSubject(title); //设置标题
    message.setContent(content, "text/html;charset=gbk" ); //发送HTML邮件,内容样式比较丰富
    message.setSentDate( new Date()); //设置发信时间
    message.saveChanges(); //存储邮件信息
 
    //发送邮件
    Transport transport = session.getTransport( "smtp" );
    transport.connect(MAIL_SMTP_USER, MAIL_SMTP_PASSWORD);
    transport.sendMessage(message, message.getAllRecipients()); //发送邮件,其中第二个参数是所有已设好的收件人地址
    transport.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 
}

以上就是本文的全部内容,希望本文的内容对大家的学习工作能有所帮助.

最后此篇关于谈谈在Java发送邮件中遇到的的问题的文章就讲到这里了,如果你想了解更多关于谈谈在Java发送邮件中遇到的的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com