Telnet smtp.mail - 必须首先发出 STARTTLS 命令

问题描述 投票:0回答:2

在我的 Mac 终端上,我尝试通过

telnet
smtp.gmail.com
进入我的
port 587

在 Google Apps(设置为管理 Dreamhost 域)上,我配置了中继,如下所示:

"Allowed senders: Only addresses in my domains"
"Require SMTP Authentication: Yes

当我

HELO <[email protected]>
时,我得到:

250 smtp.gmail.com at your service

然后我输入

MAIL FROM: <[email protected]>

返回:

530 5.7.0 Must issue a STARTTLS command first.

我做错了什么?

smtp telnet
2个回答
25
投票

您需要首先开始加密连接。这是使用 STARTTLS 命令完成的。

您可以使用以下命令代替

telnet

openssl s_client -starttls smtp -ign_eof -crlf -connect smtp.gmail.com:587

它的工作方式类似于 telnet 命令,但首先负责启动加密。


3
投票

正在连接

如果从 Mac 和 Linux 上的命令行,可以使用

openssl
。例如:

openssl s_client -starttls smtp -4 -connect smtp.server.no:587 -crlf -ign_eof
强制 IPv4 可能需要

-4

如果从 Windows 命令行,则不应使用

-crlf
选项。例如:

openssl s_client -starttls smtp -4 -connect smtp.server.no:587 -ign_eof

你好

连接成功并受到欢迎后

250 HELP
进行正常操作
EHLO
:

EHLO nero<ENTER>

生成服务器规范。

250-smtp.server.no Hello nero [1.2.3.4]
250-SIZE 157286400
250-8BITMIME
250-PIPELINING
250-PIPE_CONNECT
250-AUTH PLAIN LOGIN
250-CHUNKING
250 HELP

认证

我在这里介绍

AUTH PLAIN
AUTH LOGIN

  • 对于
    LOGIN
    ,我们需要使用 base-64 作为用户名和密码。
    • printf %s 'user' | base64
      =>
      dXNlcg==
    • printf %s 'pass' | base64
      =>
      cGFzcw==
  • 对于
    PLAIN
    ,我们需要 64 进制
    0x00Username0x00Password
    • printf '\0%s\0%s' 'user' 'pass' | base64
      =>
      AHVzZXIAcGFzcw==

LOGIN

登录方法如下开始。

AUTH LOGIN<ENTER>
334 VXNlcm5hbWU6
dXNlcg==<ENTER>
334 UGFzc3dvcmQ6
cGFzcw==<ENTER>
235 Authentication succeeded

或(在 AUTH 行上使用用户名):

AUTH LOGIN dXNlcg==<ENTER>
334 UGFzc3dvcmQ6
cGFzcw==<ENTER>
235 Authentication succeeded

响应是(以 64 为基数):

  • VXNlcm5hbWU6
    =
    Username:
  • UGFzc3dvcmQ6
    =
    Password:

PLAIN

AUTH PLAIN<ENTER>
334
AHVzZXIAcGFzcw==<ENTER>
235 Authentication succeeded

或者 AUTH、用户名和密码写在一行:

AUTH PLAIN AHVzZXIAcGFzcw==<ENTER>
235 Authentication succeeded

此后继续正常使用

RCPT TO
等或其他什么。

© www.soinside.com 2019 - 2024. All rights reserved.