在我的 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.
我做错了什么?
您需要首先开始加密连接。这是使用 STARTTLS 命令完成的。
您可以使用以下命令代替
telnet
:
openssl s_client -starttls smtp -ign_eof -crlf -connect smtp.gmail.com:587
它的工作方式类似于 telnet 命令,但首先负责启动加密。
如果从 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
等或其他什么。