【发布时间】:2014-08-29 14:55:36
【问题描述】:
我正在尝试向侦听端口 25、使用 STARTTLS 并需要身份验证的 SMTP 服务器发送电子邮件。
据我了解,客户应该
- 用
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 与我的设置一起工作的正确咒语是什么?
【问题讨论】:
标签: java smtp jakarta-mail