[英]Sending mail using JavaMail - port 25, STARTTLS, authentication
我正在尝试向SMTP服务器发送电子邮件,该服务器在端口25上侦听,使用STARTTLS并需要身份验证。
据我了解,客户应
EHLO clientName
向服务器打招呼 STARTTLS
启动TLS AUTH LOGIN
身份验证 RCPT TO
等发送电子邮件 我的简化代码是
String protocol = "smtp";
Properties props = new Properties();
props.put("mail.debug", "true");
props.put("mail." + protocol + ".auth", true);
props.put("mail." + protocol + ".host", smtpHost);
props.put("mail." + protocol + ".starttls.required", true);
Session session = Session.getInstance(props);
InternetAddress[] recipients = InternetAddress.parse(username);
Message message = buildMessage(session, username, recipients);
Transport t = session.getTransport(protocol);
t.connect(username, password);
t.sendMessage(message, recipients);
据我了解,这应该工作,但调试输出显示它挂在
STARTTLS
220 2.0.0 Ready to start TLS
删除starttls.required
属性会导致服务器拒绝访问,因为除非发出STARTTLS
,否则AUTH
命令永远不会存在
MAIL FROM:<deliverytest@somedomain.com>
250 2.1.0 Ok
RCPT TO:<deliverytest@somedomain.com>
554 5.7.1 Service unavailable; Client host [50.16.63.26] blocked using zen.spamhaus.org; http://www.spamhaus.org/query/bl?ip=50.16.63.26
使Javamail与我的设置配合使用的正确方法是什么?
这里有两件事是错误的
如果您按照错误中给出的链接( http://www.spamhaus.org/query/bl?ip=50.16.63.26 )转到页面,该页面显示
参考:PBL1522093
50.16.0.0/16在策略阻止列表(PBL)上列出
此IP范围的Amazon Web Services EC2的出站电子邮件策略:
Amazon Web Services EC2的政策是,仅通过分配给Amazon Web Services EC2客户的指定出站邮件服务器发送从该IP地址发送的未经身份验证的电子邮件。 要查找要使用的正确邮件服务器的主机名,客户应查阅原始注册文档或联系Amazon Web Services EC2技术支持。
换句话说,您必须通过Amazon为您提供的SMTP服务器发送所有传出邮件。 您不可以直接发送电子邮件,任何使用Spamhaus的接收主机(很多,如果不是大多数)都将阻止您进行发送。
您做对了。 您确定它已挂起并且不会引发意外异常吗? 如果挂起了,堆栈跟踪显示什么?
原来的代码在工作。 我被两个错误送出:
OTOH,对于Javamail调试模式,最好在实际发送消息时通知我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.