gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:26:15 27 4
gpt4 key购买 nike

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

    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 它工作正常。在这里:

    Transport.send(mm);

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

 transport = s.getTransport(addresses[0]);

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

最佳答案

Transport.send(msg) 正在查找与您电子邮件的收件人 关联的协议(protocol),对于每个 type收件人。

您的所有收件人都是 InternetAddress,即 have the type rfc822

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

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

关于javamail 返回 smtp 作为传输,而不是 smtps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471073/

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