首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javamail返回smtp作为传输,而不是smtps

javamail返回smtp作为传输,而不是smtps
EN

Stack Overflow用户
提问于 2012-05-06 13:57:44
回答 2查看 7.9K关注 0票数 2

除了连接到smtps服务器的基本信息外,我还将mail.transport属性设置为smtps:

代码语言:javascript
复制
    Properties p = new Properties();
    p.put("mail.transport.protocol", "smtps");
    p.put("mail.smtps.host", "smtp.gmail.com");
    p.put("mail.smtps.auth", true);

    Session s = Session.getDefaultInstance(p,new Authenticator(){/*authenticator impl.*/});

    MimeMessage mm = new MimeMessage(s); /*then i set the subject, then the body... */
    mm.setRecipients(RecipientType.TO, "myfakeaddress@gmail.com");

现在,我试着发送我的信息。我想尝试静态方法;使用实例方法sendMessage可以很好地工作。下面是:

代码语言:javascript
复制
    Transport.send(mm);

它尝试连接到smtp服务器,而不是smtps服务器。深入javamail的实现(顺便说一句,我的版本是1.4.5),我发现失败的方法是:

代码语言:javascript
复制
 transport = s.getTransport(addresses[0]);

因为它返回一个SMTPTransport而不是SMTPSSLTransport;即使我已经将mail.transport.protocol属性设置为smtps,在第二行代码中也可以看到。我的程序是否有问题,还是不可能通过Transport.send静态方法发送smtps邮件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-14 18:01:10

Transport.send(msg)正在查找与您的电子邮件收件人相关联的协议,用于收件人的每个类型

您的所有收件人都是InternetAddresses,哪个rfc822

以下是设置JavaMail以使用smtps协议用于rfc822地址的三种方法:

  1. 将行rfc822=smtps添加到属性文件javamail.address.mapjavamail.default.address.map中(如javadoc中所述)
  2. 在实例化会话上调用s.setProtocolForAddress("rfc822", "smtps")` (需要JavaMail 1.4或更高版本)
  3. 实例化会话时将属性mail.transport.protocol.rfc822设置为smtps (需要JavaMail 1.4.3或更高版本)
票数 4
EN

Stack Overflow用户

发布于 2012-05-06 15:48:58

比尔·香农 (Javamail的当前维护者)在这个问题中表示

去掉所有的套接字工厂属性;如果您使用的是最近版本的JavaMail,则不需要它们。有关如何将JavaMail配置为访问Gmail,请参见Gmail。如果仍然不能工作,您还可以在那里找到调试技巧。 另外,将Session.getDefaultInstance更改为Session.getInstance。

以下是来自Javamail常见问题的相关代码

代码语言:javascript
复制
String host = "smtp.gmail.com";
String username = "user";
String password = "passwd";

Properties props = new Properties();
props.put("mail.smtps.auth", "true");
props.put("mail.debug", "true");

MimeMessage msg = new MimeMessage(session);
// set the message content here

Transport t = session.getTransport("smtps");

try {
  t.connect(host, username, password);
  t.sendMessage(msg, msg.getAllRecipients());
} finally {
  t.close();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10471073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档