【问题标题】:javax.mail unable to send mail to hotmailjavax.mail 无法发送邮件到 hotmail
【发布时间】:2013-07-02 21:24:27
【问题描述】:

我正在尝试从 hotmail 帐户使用 javax.mail 发送邮件。
到目前为止,我还使用 gmail 帐户 测试了我的代码,一切正常,但是 使用 hotmail 没有什么特别的效果,我收到了 MailConnectException
这是我用来发送邮件的代码:

props.put("mail.starttls.enable", true);
props.put("mail.smtp.host", "smtp.live.com");
props.put("mail.smtp.port", "25");
props.put("mail.debug", true);
props.put("mail.smtp.auth", true);

如您所见,我创建了一个 PropertiesFactory 以便为我使用的每个特定邮件主机创建 Properties 对象的特定实例。在代码中有 HotmailProperties 结构的工厂。

开始调试会话我检查了 useAuth 选项和 isSSL 都等于 false。
我要在属性配置中更改什么?也许代码中还有其他错误?

这是我的程序的调试结果: http://ideone.com/SDu4JG

已解决 我已经解决了 hotmail 服务器的问题。 正在查看此页面:http://windows.microsoft.com/en-us/windows/outlook/send-receive-from-app 我知道 hotmail 与 gmail 和 yahoo 等其他邮件服务器不同,它将用户名视为完整的电子邮件地址。因此,当我登录时,我总是会收到错误消息。

终于成功了。谢谢大家。

【问题讨论】:

  • 异常堆栈跟踪好吗?
  • ideone.com/9g9JCn 这是我执行程序时得到的。
  • props.put("mail.smtps.port", "487"); ?
  • 端口不正确?我不使用“mail.smtp.port”吗?
  • 如果端口是正确的,你必须查看hotmail的帮助站点,。但是您的调试消息说主机正在响应 530 5.7.0 Must issue a STARTTLS command first 所以端口应该是正确的。这些属性在配置时被命名为 false,我很确定 ;)

标签: java jakarta-mail


【解决方案1】:

来自您的调试输出:

MAIL FROM:<shadowtemplate@hotmail.com>
530 5.7.0 Must issue a STARTTLS command first
DEBUG SMTP: got response code 530, with response: 530 5.7.0 Must issue a STARTTLS command first

状态码 530 表示客户端未通过身份验证。 (我用谷歌搜索了“SMTP 错误状态代码 530”来得到这个)

您上面的消息表明需要 TLS(传输层安全:加密)

显然,Hotmail 要求您通过 smtps 发送邮件,并且默认端口是 587。

【讨论】:

  • 调试:setDebug:JavaMail 版本 1.5.0 调试:getProvider() 返回 javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle] 调试 SMTP:useEhlo true ,useAuth true DEBUG SMTP:尝试连接到主机“smtp.live.com”,端口 587,isSSL true 这就是我使用的协议 smtps
【解决方案2】:

它对我有用。当然它会为你工作 :--

使用端口 587:--

        props.setProperty("mail.transport.protocol", "smtp");   
        props.setProperty("mail.smtp.host", "smtp.live.com");   
        props.put("mail.smtp.auth", "true");   
        props.put("mail.smtp.port", "587");   
        props.setProperty("mail.smtp.quitwait", "false");  
        props.put("mail.smtp.starttls.enable", "true");

    Session smtpSession = Session.getInstance(props1, authenticator);
        smtpSession.setDebug(true);

【讨论】:

  • 可能是身份验证问题。我保持最后两行的会话及其为我工作
  • good :) 所以为其他人发布答案也可以获得努力:)
【解决方案3】:

您将属性命名为 mail.smtps 而不是 mail.smtp

已经有一个问题解决了,看看:Java Mail over TLS

【讨论】:

  • 但是这种操作应该可以启用。还是不行?
  • 是的(我知道你不想使用它)。在这种情况下,您必须另外设置身份验证凭据(用户名/密码),否则将无法正常工作。
  • props.put("mail.starttls.enable", true); props.put("mail.smtp.host", "smtp.live.com"); props.put("mail.smtp.port", "25"); props.put("mail.debug", true); props.put("mail.smtp.auth", true);我应该使用这个配置吗?够了吗?
  • that and props.put("mail.smtp.user", "USERNAME"); and props.put("mail.password", "PASSWORD ");
  • 协议是smtp而不是smtps?
猜你喜欢
  • 2013-07-02
  • 1970-01-01
  • 2017-05-30
  • 2017-07-30
  • 2011-02-24
  • 2015-10-20
  • 2016-01-13
  • 1970-01-01
  • 2011-09-07
相关资源
最近更新 更多