【问题标题】:How to check mailserver supports TLS or Not如何检查邮件服务器是否支持 TLS
【发布时间】:2016-02-11 07:16:30
【问题描述】:

我想用javamail检查邮件服务器是否支持TLS加密。

我可以在 Linux 操作系统中通过终端进行检查。

 >> dig +short gmail.com mx
20 alt2.gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
5 gmail-smtp-in.l.google.com.
40 alt4.gmail-smtp-in.l.google.com.
30 alt3.gmail-smtp-in.l.google.com.


>> telnet gmail-smtp-in.l.google.com 25
220 mx.google.com ESMTP c90si10657664pfd.233 - gsmtp
>>ehlo gmail.com
250-mx.google.com at your service, 
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250 SMTPUTF8

250 STARTTLS 然后该电子邮件服务器配置为支持使用 TLS。

以同样的方式,我们如何以编程方式使用 javamail 做到这一点?

请帮忙。

【问题讨论】:

  • 试试看吧。没有办法预测未来。

标签: java jakarta-mail starttls


【解决方案1】:

您真的只需要“是的,服务器支持它”还是“不,它不支持它”?或者您必须发送电子邮件,并且只有在您可以安全地发送的情况下才想发送?

如果是前者,你可以做 telnet 做的事情,而不必费心使用 javamail。

如果是后者,如果服务器不支持 TLS,您可以将 javamail 配置为失败。 有关详细信息,请参阅An SMTP protocol provider for the JavaMail API。属性 'mail.smtp.starttls.required' 是您所需要的。

【讨论】:

  • 我想知道服务器是否支持 TLS。无需发送邮件。
  • 您将如何处理这些信息?如果服务器不支持,你会怎么做?如果服务器确实支持它,你会怎么做?您从不打算使用该服务器发送邮件吗?
  • @BillShannon 如果用户向收件人发送邮件,请说 x@abc.com。然后我会查看传入的 smtp 服务器 abc.com 是否支持 TLS,以便在收件人邮件服务器未使用 TLS 加密时向用户显示信息。由用户决定是否需要发送信息(可能是敏感信息)。
  • 一个解决方案是扭转问题。尝试安全地发送它。如果失败,请询问用户是否仍想发送消息但不安全。
  • 用户想发送邮件到 x@abc.com,但你不会使用 abc.com 邮件服务器,你将使用自己的邮件服务器。您将告诉发件人 abc.com 邮件服务器是否不支持 TLS,因为如果收件人的服务器 (abc.com) 不支持 TLS,发件人可能不想发送邮件?不,这根本没有帮助。您无法知道收件人的邮件阅读器在阅读邮件时是否会使用 TLS。 smtp 服务器中的 TLS 支持并不意味着读取消息。
【解决方案2】:

java“是的,服务器支持它”检查 tls 会是什么样子?

我实际看到的唯一方法是进行 dns 查找(例如通过 javax.naming.directory.InitialDirContext)。

然后通过 telnet 连接(例如通过 apache telnet 客户端) 并解析

【讨论】:

    【解决方案3】:

    您可以使用 EHLO 命令通过 java / jakarta 邮件查询服务器。 以下方法查询服务器是否支持 TLS。不发送电子邮件。可以添加其他属性。当然必须启用 ehlo (mail.smtp.ehlo=true)

    boolean detectTls(String smtpServerHost, int smtpServerPort,  String smtpUserName, String smtpUserAccessToken) {
        
        Transport transport = null;
        try {
            Properties props = System.getProperties();
            props.put("mail.transport.protocol", "smtp");
            props.put("mail.smtp.port", smtpServerPort);
            
            Session session = Session.getDefaultInstance(props);
            //session.setDebug(true);
    
            transport = session.getTransport();
            transport.connect(smtpServerHost, smtpServerPort, smtpUserName, smtpUserAccessToken);
                
            if(transport instanceof SMTPTransport) {
                return ((SMTPTransport)transport).supportsExtension("STARTTLS");
            }
            return false;
        } 
        catch (Exception ex) {
            //Proper loggin & exception handling!!!
            //return false;
        }
        finally {
            if(transport!=null) {
                try {
                    transport.close();
                }
                catch (MessagingException e) {
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多