SMTP 套接字 -- Authentocation & SSLSocket



我正在寻找SMTP套接字的实验和编码这个样本。

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

在连接期间,我从服务器接收到以下消息。(在行注释中是引起服务器消息的发送流。)

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)。示例代码建议使用SSLSocket。findJar中的每个都是带进来的一些浏览器插件和其他一些软件包。是不是有一种方法来绕过这个-我只是想获得sslSocket本身。

我对这些不熟悉。

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

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协议之前,您应该先熟悉它。

服务器通常需要某种形式的身份验证,但通常至少会确保您从您所说的发送域发送(通过检查您的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通信。

相关内容

  • 没有找到相关文章

最新更新