如何使用SMTP将邮件发送到某个主机?

我正尝试使用SMTP将邮件发送到某个服务器上的帐户(例如在Gmail上)。

到目前为止我已经尝试过:

220 mx.google.com ESMTP y14sm3079810ibf.45 HELO 250 mx.google.com at your service STARTTLS 220 2.0.0 Ready to start TLS AUTH LOGIN Connection closed by foreign host. 

我做错了什么,我该如何解决它,所以我发送电子邮件,就好像我是我自己的服务器?

提交STARTTLS命令不会将连接置于TLS模式。 你必须正确地进行谈判和实施 。

Gmail需要TLS代表您中继邮件。 当您的桌面或移动电子邮件客户端从您的Gmail帐户发送邮件时,此类连接是必需的。

但是,任何普通的邮件服务器仍然会接受该服务器上的收件人的邮件而不使用TLS或任何types的validation。 例如,您可以通过端口25连接到gmail-smtp-in.l.google.com并执行未encryption的SMTP会话。

假设您是[email protected],您已经login到您的邮件服务器mail.mydomain.com,并且您正在向[email protected]发送消息,如下所示:

  1. dig yourdomain.com mx和注意结果(让我们说这是mail001.yourdomain.com)
  2. telnet mail001.yourdomain.com 25
  3. 发送消息:
 HELO mail.mydomain.com MAIL FROM: [email protected] RCPT TO: [email protected] RCPT TO: [email protected] DATA From: "Mehrdad" <[email protected]> To: "Enrique Peñalosa" <[email protected]> Cc: "Gabriela Peñalosa" <[email protected]> Date: Fri, 30 Sep 2011 11:21:19 -0700 Subject: Thanks for all the fish! It was a wonderful picnic. I really enjoyed the salmon burgers. See you next week, Mehrdad . 

注意事项:

  1. Backspace在SMTP会话中不起作用 ! 你应该是一个服务器,服务器不会造成错别字。 如果您正在亲自尝试,最好事先编写input,以便从文本编辑器复制和粘贴每行。
  2. 因为您的邮件不一定会看起来像来自真正的邮件服务器 – 例如,接收服务器可能会检查您的反向DNS和SPFlogging等事情 – 您可能会在接收端无意中与垃圾邮件防护发生冲突。 在像Gmail这样的目的地的情况下,您的邮件几乎可以保证被检测为伪造,并直接发送到垃圾邮件文件夹。

要了解更多信息,请参阅Wikipedia文章 。

您向您的SMTP服务器发出了HELO命令。 这告诉它你想要使用原始的SMTP命令。 STARTTLS不是这些命令之一,因此您不应该能够使用STARTTLS

解决这个问题的第一步是从HELO命令切换到EHLO命令。 当你这样做的时候,你会看到SMTP服务器用它支持的一组SMTP扩展来响应。 希望STARTTLS能够上市。

这里是与GMail的SMTP服务器的对话:

 CLIENT: EHLO me.example.com SERVER: 250-mx.google.com at your service SERVER: 250-SIZE 35882577 SERVER: 250-8BITMIME SERVER: 250-STARTTLS SERVER: 250 ENHANCEDSTATUSCODES CLIENT: STARTTLS SERVER: 220 2.0.0 Ready to start TLS <negotiation begins here...>