当使用telnet或netcat测试传出的SMTP电子邮件时,我无法结束消息“with”。“在一条线上“

时间:2011-01-15 05:09:39

标签: linux bash

当通过telnet或netcat向我的ISP的SMTP服务器发送简单的电子邮件时,我无法使用句点终止该邮件。最终连接超时但邮件未送达。

root@zeus:/tmp# telnet mail.charter.net 25
220 imp09 smtp.charter.net ESMTP server ready 20110115 000442
HELO charter.net
250 imp09 hello [97.94.115.109], pleased to meet you
MAIL FROM: test@gmail.com
250 2.1.0 <test@gmail.com> sender ok
RCPT TO: test@gmail.com
250 2.1.5 <test@gmail.com> recipient ok
DATA
354 enter mail, end with "." on a line by itself
test body

.

.

/n.
/n
.

\n
.

QUIT

这适用于同一网络中的另一台计算机和具有不同版本telnet的ISP。

netcat在两台计算机上挂起相同的方式。

我认为这可能与LINEMODE有关,因为无法发送电子邮件的telnet会话在LINEMODE中,无法切换到CHARMODE。有没有工作?

4 个答案:

答案 0 :(得分:3)

您发送的换行符可能只是一个回车符或只是一个换行符。 SMTP需要回车后跟换行才能结束一行。

http://tools.ietf.org/html/rfc5321#section-2.3.8

http://tools.ietf.org/html/rfc5321#section-4.1.1.4

尝试使用Control-M Control-J结束每一行,使用不同的终端程序,和/或使用除telnet之外的其他内容。

答案 1 :(得分:0)

在黑暗中拍摄,但也许在输入.后尝试按CTRL-J而不是Enter。

答案 2 :(得分:0)

要了解实际情况,您可以使用以下工具之一:

  • strace记录所有系统调用,包括您编写或读取到文件或网络的所有内容。您可以检查该程序的输出,以查看这些行是否被\r\n正确终止。
  • wireshark记录并显示网络流量。使用它来记录流量,过滤tcp.port==25然后关注TCP流,看看哪些字节确实是通过网络发送的。

答案 3 :(得分:0)

如上所述,SMTP 协议需要 CRLF 字符才能正确识别消息的结尾。

如果在 Linux/MacOS 基础上使用 telnet(或在安全连接上使用 openssh),您必须通过使用 -crlf 选项告诉该程序使用正确的行尾样式。

例如telnet -crlf mail.charter.net 25