使用javamail从hotmail发送邮件?

8

我已经让Gmail和Yahoo正常工作了,但是Hotmail却不行。以下是我的设置,请问我做错了什么?

private String mailhost = "smtp.live.com";

    public hotmailSenderActivity(String user, String password) {   
    this.user = user;   
    this.password = password;   

  //This connects to the actual mailserver
    Security.addProvider(new com.provider.JSSEProvider());
    Properties props = new Properties();   
    props.setProperty("mail.transport.protocol", "smtp");   
    props.setProperty("mail.host", mailhost); 
    props.put("mail.smtp.starttls.enable", "true");  
    props.put("mail.smtp.auth", "true");   
    props.put("mail.smtp.port", "587");   
    props.put("mail.smtp.socketFactory.port", "587");   
    props.put("mail.smtp.socketFactory.class",   
            "javax.net.ssl.SSLSocketFactory");   
    props.put("smtp.starttls.enable", "true");
    props.put("mail.smtp.socketFactory.fallback", "false");   
    props.setProperty("mail.smtp.quitwait", "false");   

    session = Session.getDefaultInstance(props, this);  

我尝试过使用非SSL的25端口和587端口。我也尝试使用带有SSL的465端口。邮箱和密码都是正确的(我已经将它们硬编码以确保准确性)。

但我并没有收到任何错误信息……那么问题出在哪里呢?


你是从这里找到这段代码的吗? - Deepak
是的,就像我说的那样,它在 Gmail 和 Yahoo 上运行得非常好。 - Vic Vuci
2个回答

20

1)使用调试输出:

session.setDebug(true);

2) Hotmail SMTP服务器在端口25或587上启动非SSL连接,并在初始连接后使用starttls;因此,请删除以下行:

props.put("mail.smtp.socketFactory.port", "587");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

3) 最少的设置如下:

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

假设端口是25,否则添加props.put("mail.smtp.port", "587")。

4) 这看起来更加漂亮:

    ...
    props.put("mail.smtp.starttls.enable", "true");
    Session session = Session.getDefaultInstance(props);
    Transport trans = session.getTransport("smtp");
    trans.connect("smtp.live.com", 25, "user", "pass");

你现在已连接,使用Transport的方法。


2
啊哈!你刚刚减轻了我生活中35%的压力。 - Vic Vuci

2

还有什么需要我清除的吗?当我移除它们时,没有做任何更改。 - Vic Vuci
你有阅读常见问题解答吗?它会告诉你当事情出现问题时该怎么做。 - Bill Shannon
好的,再说一遍,常见问题解答告诉你如果某些事情不起作用该怎么做。其中之一是打开会话调试并发布协议跟踪。你试过了吗?这可能提供我们需要帮助你的信息。 - Bill Shannon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接