使用javamail从hotmail发送?

时间:2012-01-31 20:25:49

标签: java android javamail

我有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。电子邮件和密码是正确的(我已经硬编码确认)。

我没有收到任何错误......那么问题是什么?

2 个答案:

答案 0 :(得分:19)

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

的方法

答案 1 :(得分:2)

http://www.oracle.com/technetwork/java/javamail/faq/index.html#hotmail

摆脱所有套接字工厂的东西,你不需要它。