Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于TLS的Java邮件_Java_Email_Ssl - Fatal编程技术网

基于TLS的Java邮件

基于TLS的Java邮件,java,email,ssl,Java,Email,Ssl,我正在尝试通过TLS连接从我的程序发送电子邮件。这是我的密码 final String username = "XXXXXX"; final String password = "XXXXX"; Properties props = new Properties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.starttls.enable","true");

我正在尝试通过TLS连接从我的程序发送电子邮件。这是我的密码

    final String username = "XXXXXX";
    final String password = "XXXXX"; 
    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", "mail.xxxx.com");
    props.put("mail.smtp.port", "587");

    Session session = Session.getInstance(props,
            new javax.mail.Authenticator() {
              protected PasswordAuthentication getPasswordAuthentication() {
                  return new PasswordAuthentication(username, password);
              }
            });

    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("from@xxxx.com"));
    message.setRecipients(Message.RecipientType.TO,
        InternetAddress.parse(to_address));
    message.setSubject("Test Mail"); 
    message.setText("TestMail ");
    Transport.send(message)
我的电子邮件网关在端口587上具有启用SSL的传入邮件设置和启用TLS的传出邮件设置。我可以在outlook中配置此设置,它工作正常。但是通过我的java程序,它说的是“连接被拒绝”。 谢谢你的帮助

最后工作: 我使用该程序导入certicate以生成jssecacerts文件,并将该文件添加到my/jre/lib/security/path中。这是我的工作代码

    properties.put("mail.transport.protocol", "smtp");
    properties.put("mail.smtp.host", "XXXXXX");  
    properties.put("mail.smtp.port", "465"); 
    properties.put("mail.smtp.ssl.enable", true);
    properties.put("mail.smtp.socketFactory.port", "465");
    properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    properties.put("mail.smtp.socketFactory.fallback", "false"); 
    properties.put("mail.smtp.quitwait", "false"); 
    properties.put("mail.smtp.auth", "true"); 

您需要使用
smtps
协议,而不是
smtp

props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.starttls.enable","true");
props.put("mail.smtps.auth", "true");
props.put("mail.smtps.host", "mail.xxxx.com");
props.put("mail.smtps.port", "587");
您还可以尝试为rfc822专门设置协议,这有时会有所帮助

props.put("mail.transport.protocol.rfc822", "smtps");

我尝试了同样的问题…这次它尝试连接“localhost”,端口25。这是我的调试日志。。。。调试SMTP:尝试连接到主机“localhost”,端口25,isSSL,您使用的是什么版本的javamail?props.put(“mail.transport.protocol”,“smtps”);props.put(“mail.smtp.starttls.enable”、“true”);props.put(“mail.smtp.auth”,“true”);props.put(“mail.smtp.host”、“mail.xxxxx.com”);props.put(“mail.smtp.port”,“587”);props.put(“mail.debug”,“true”);正在获取“连接被拒绝”…正确端口上的连接被拒绝?(JavaMail调试所说的连接到的)SMTP通常是465而不是587(通常是IMAP)。587+TLS的传出邮件工作正常,但不是465。在这种情况下,您只需要从特定服务器导入证书?我也有同样的问题,但我的应用程序需要从用户配置的任何帐户发送邮件,该代码适用于Outlook、Google和Yahoo,但对于使用smtp zimbra.xxxxxxx.net.br的帐户,由于此证书,该代码不起作用。