除了连接到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邮件?
发布于 2014-11-14 18:01:10
Transport.send(msg)正在查找与您的电子邮件收件人相关联的协议,用于收件人的每个类型。
您的所有收件人都是InternetAddresses,哪个rfc822
以下是设置JavaMail以使用smtps协议用于rfc822地址的三种方法:
rfc822=smtps添加到属性文件javamail.address.map或javamail.default.address.map中(如javadoc中所述)s.setProtocolForAddress("rfc822", "smtps")` (需要JavaMail 1.4或更高版本)mail.transport.protocol.rfc822设置为smtps (需要JavaMail 1.4.3或更高版本)发布于 2012-05-06 15:48:58
比尔·香农 (Javamail的当前维护者)在这个问题中表示
去掉所有的套接字工厂属性;如果您使用的是最近版本的JavaMail,则不需要它们。有关如何将JavaMail配置为访问Gmail,请参见Gmail。如果仍然不能工作,您还可以在那里找到调试技巧。 另外,将Session.getDefaultInstance更改为Session.getInstance。
以下是来自Javamail常见问题的相关代码
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();
}https://stackoverflow.com/questions/10471073
复制相似问题