【问题标题】:SMTP socket -- Authentocation & SSLSocketSMTP 套接字——身份验证和 SSLSocket
【发布时间】:2014-04-21 11:03:56
【问题描述】:

我正在研究 SMTP 套接字进行实验并编码 this 示例。

代码正在与服务器建立连接(我正在连接到 gmail 的 smtp)。

在连接期间,我从服务器收到以下消息。 (在 line-cmets 中是发送的流,导致来自服务器的消息。)

220 mx.google.com ESMTP qw8sm31710864pbb.27 - gsmtp   // EHLO MY-HOSTNAME
250-mx.google.com at your service, [184.6.159.254]  // STARTTLS
250-8BITMIME   // MAIL From: myName <xyz@gmail.com>
250-SIZE 35882577    //  RCPT To: destName <pqr@hotmail.com>
250-STARTTLS // DATA
250-ENHANCEDSTATUSCODES // Subject: subjectline here
250 CHUNKING // .
220 2.0.0 Ready to start TLS // QUIT

来自服务器的消息表明连接和发送的数据没有问题(?)但是,服务器正在放弃请求——我在 pqr@hotmail.com 没有看到消息。

1.) 在我看过的这个例子和其他一些例子中,我没有看到任何身份验证的痕迹——密码没有出现在任何地方,甚至一个字都没有。如果没有身份验证,这应该如何工作?我见过的每个听起来都像是身份验证的样本不是问题。有了这个,任何人都可以从任何人的帐户发送电子邮件。

2.) sample code 建议使用 SSLSocket。 findJar 中的每个都带有 一些浏览器附加组件和其他一些软件包。有没有办法解决这个问题 - 我只是想获得 sslSocket 本身。

我是这里的新手。

【问题讨论】:

    标签: sockets authentication ssl smtp sslsocketfactory


    【解决方案1】:

    服务器通常需要某种形式的身份验证,但通常至少会确保您从您所说的发送地址的域发送(通过根据域检查您的 IP 地址并验证该域是否被允许) )。已经做了很多工作来防止垃圾邮件发送者在开放的电子邮件主机上发送电子邮件。

    您的部分问题是当邮件服务器(MTA - 邮件传输代理)期望您协商 SSL 会话时,您正在发送 SMTP 命令。您可以尝试使用 tcpdump 或 wireshark 之类的工具来检查实际会话。

    如果 C 是客户端,S 是服务器,那么通常你会:

    C - connect to server
    S - shows SMTP prompt with a 2xx series prefix
    C - send ELHO (or HELO for less capable servers)
    S - should respond with a 2xx series of messages with capabilities one per line if your domain is ok
    C - send STARTTLS
    S - response with 2xx series message
    

    此时您必须协商 TLS 连接 协商好之后你就可以开始发送命令了 跨越那个连接。必须编写代码来处理协商 并切换到 TLS,因为它不会被自动处理。如果你没有你的后续 命令基本上将被视为乱码并被服务器忽略。在本质上, 发送后续的 SMTP 命令看起来像是对 TLS 协商会话。

    http://en.wikipedia.org/wiki/STARTTLS 有更多信息和一些指针。 SMTP 可能相当复杂,因此除非您连接到特定系统,否则它可能是 最好使用 JavaMail 之类的东西与 MTA 进行通信。

    【讨论】:

      【解决方案2】:

      您对服务器消息的解释完全错误:

      220 mx.google.com ESMTP qw8sm31710864pbb.27 - gsmtp 
      

      这是您在连接后收到的欢迎消息,例如不发送任何数据。

      250-8BITMIME
      250-SIZE 35882577 
      250-STARTTLS
      250-ENHANCEDSTATUSCODES
      250 CHUNKING
      

      这是您在 EHLO 命令中得到的多行响应。

      220 2.0.0 Ready to start TLS
      

      这是您收到的响应 STARTTLS 命令的消息。

      如您所见,服务器甚至没有开始处理您的 MAIL FROM、RCPT TO 和 DATA,因此邮件没有发送也就不足为奇了。我认为您应该在尝试使用 SMTP 协议之前让自己更加熟悉它。

      【讨论】:

        猜你喜欢
        • 2015-03-08
        • 2010-10-27
        • 2015-04-29
        • 2011-11-17
        • 1970-01-01
        • 2019-01-03
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多