【问题标题】:Sending Email to Gmail's SMTP server using TLS and Plain Authentication使用 TLS 和普通身份验证将电子邮件发送到 Gmail 的 SMTP 服务器
【发布时间】:2011-10-14 00:09:08
【问题描述】:

我有一个情况。我想连接到 gmail smtp 服务器并从我的 gmail 帐户发送电子邮件。因为 gmail smtp 服务器使用 PLAIN 身份验证和 TLS。我连接到 gmail smtp 服务器。服务器响应如下。

220 mx.google.com ESMTP n21sm810716wed.43

然后我发送它“AUTH PLAIN”并发送“EHLO”命令。服务器响应如下:

503 5.5.1 EHLO/HELO first. n21sm810716wed.43

然后我再次向它发送“EHLO”命令,响应是:

250-mx.google.com 为您服务,[203.99.179.10]

在这之后,无论我给它什么。它打印一系列行并退出。它给出的响应顺序是;

250 尺寸 35882577

250-8BITMIME

250-STARTTLS

250 个增强状态代码

我应该给它什么才能让我登录并给我发送电子邮件?任何帮助或建议将不胜感激。谢谢

另见

Using SMTP, Gmail, and STARTTLS

【问题讨论】:

  • 您用“c”标记了您的问题,但没有引用 C 代码。您是否正在编写 C 程序来连接到 SMTP 服务器?你在使用任何库吗?

标签: email ssl login smtp gmail


【解决方案1】:

你面临三个问题:

首先,您没有阅读 EHLO 命令的整个响应

此命令有多行响应:

250-mx.google.com at your service, [203.99.179.10] 
250-SIZE 35882577 
250-8BITMIME 
250-STARTTLS 
250 ENHANCEDSTATUSCODES

注意最后 250 代码后面的 空格 - 这意味着这是最后一个响应行。

第二: EHLO 应该是您发送的第一个命令。

第三: Gmail 不允许在不使用 SSL 的情况下登录,无论是隐式(在 465 端口上)还是显式(STARTTLS 命令)

【讨论】:

  • 我正在阅读 Ehlo 命令的全部响应。 Ehlo 是我发送的第一个命令。在这些响应之后,我发送了 STARTTLS 和服务器响应“220 2.0.0 Ready to start TLS”,但无论我在此服务器退出后发送什么。我不知道我在哪里犯错或遗漏了什么?
【解决方案2】:

您应该在给定响应后发出 STARTTLS 命令。下面是一个 SMTP 会话示例,使用端口 587 上的 smtp.gmail.com 上的 netcat 获得:

220 mx.google.com ESMTP z83sm46627weq.20
EHLO localhost
250-mx.google.com at your service, [109.114.60.32]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
STARTTLS
220 2.0.0 Ready to start TLS

【讨论】:

  • 我发出了 STARTTLS 命令并得到响应“220 2.0.0 Ready to start TLS”。但无论我输入什么,服务器都会向我发送退出回复。这是为什么??我做错了吗?
  • @Ali 你发出 STARTTLS 命令后开始使​​用 SSL 了吗?
  • @Pawel Lesnikowski 我不明白“使用 SSL”是什么意思。在 STARTTLS 之后,我只需继续在同一个套接字上发送数据,而无需修改步骤。你能解释一下吗?
  • 表示开始 TLS 握手。之后,所有发送和接收的数据都被加密:见en.wikipedia.org/wiki/Transport_Layer_Security。在 STARTTLS 之后,您必须重新发出 EHLO 命令,然后使用 AUTH 命令继续进行身份验证:请参阅 en.wikipedia.org/wiki/SMTP_Authenticationtools.ietf.org/html/rfc4954
【解决方案3】:

除非我们与服务器建立了安全连接,否则我们不能使用 STARTTLS。简单的 SMTP 库和 telnet 不支持 STARTTLS。为此,我不得不使用 GNUTLS,它与服务器进行握手并交换证书以建立安全连接。之后我发送 STARTTLS 并且它工作正常。希望这有助于其他面临类似问题的人。谢谢

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 2015-07-08
    • 2020-11-12
    • 2016-09-07
    • 2021-08-13
    • 1970-01-01
    • 2022-01-09
    • 2014-10-15
    相关资源
    最近更新 更多