使用 netcat 发送电子邮件

Pro*_*sor 2 email esxi netcat

我尝试从我的 ESXI 服务器发送电子邮件,但由于某种原因我不知道我收到错误。

这是我用来发送电子邮件的命令:

nc -Cv smtp.relay.us 25 < /vmfs/volumes/Vcloud-Datatstore/Tools/mail.txt
Run Code Online (Sandbox Code Playgroud)

这是文件mail.txt:

HELO smtp.relay.us
MAIL FROM:<maillog@gkmonitor.fr>
RCPT TO:<systemsupport@gkit.fr>
DATA
From: [Log Server] <maillog@gkmonitor>
To: <systemsupport@gkit.fr>
Date: Mon, 29 May 2017 20:25:38 +0000
Subject: Resultat de la restauration de GED
blabla
blabla

.
Run Code Online (Sandbox Code Playgroud)

我得到这些输出:

220-*****************************
220 *****************************
250 smtp.relay.us
250 2.1.0 Ok
250 2.1.5 Ok
503 5.5.0 <DATA>: Data command rejected: Improper use of SMTP command pipelining
502 5.5.2 Error: command not recognized
...
...
Run Code Online (Sandbox Code Playgroud)

我不明白我做错了什么。非常感谢提前。

Pro*_*sor 6

终于让它工作了。

我不知道为什么,但是一旦到达邮件的 DATA 部分,nc 就会一次发送很多信息。即使使用 -i 选项在每行之间引入间隔也无济于事。

所以这就是我让它工作的方式(大量受到 GhettoVCB 脚本的启发):

 cat "mail.txt" |while read L; do sleep "1"; echo "$L"; done | "nc" -C -v "smtp.relay.us" "25"
Run Code Online (Sandbox Code Playgroud)

mail.txt 中没有任何变化

再见


Bru*_*sky 6

需要睡眠的原因是 SMTP 是“会话式的”。服务器收到一条线路后,它会回复一些东西。客户端回复,服务器回复。但是,TCP 并不关心内容。(这里特别重要的是换行符。) TCP 获取数据流和目的地。它切断协商的(低于您的应用程序的级别,因此这是您无法控制的)数据八位字节数并发送它们。并重复直到完成。

问题是,当服务器收到一个带有换行符的 TCP 段时,很有可能(negotiated_octet_count 为 1)将包含一定数量的下一行。此时服务器说,“你不让我说话,所以这不是对话,我们不会继续。”

所以,这就是你第一次尝试失败的原因。您第二次尝试成功的原因是 netcat 不需要每个 TCP 段都已满。它适用于流,而不是文件。所以 netcat 在 EOF 之前不起作用。它会一直工作到 stdin 关闭(或者如果您指定一个超时,则达到超时)。当标准输入“延迟”时,它会发送它所拥有的。这可确保您的服务器获得以换行符结尾的 TCP 段。您可能会发现您的服务器可以处理的睡眠时间远小于 1 秒。我是 0.05,但您可能想使用 .1 来给它一些安全性。

我在这里举了一个例子,但我要重复一遍,因为你的引用对我来说非常不规则。

$ cat email_msg.txt
HELO localhost
MAIL FROM:<system@example.com>
RCPT TO:<bbronosky@example.com>
DATA
From: [IES] <system@example.com>
To: <bbronosky@example.com>
Date: Fri, 27 Oct 2017 06:14:11 +0000
Subject: Test Message

Hi there! This is supposed to be a real email...

Have a good day!
-- System


.
QUIT

$ function slowcat(){ cat "$1" | while read; do sleep .05; echo "$REPLY"; done; }

$ slowcat email_msg.txt | nc localhost 25
220 et3 ESMTP Exim 4.89 Fri, 27 Oct 2017 06:18:14 +0000
250 et3 Hello localhost [::1]
250 OK
250 Accepted
354 Enter message, ending with "." on a line by itself
250 OK id=1e7xyA-0000m6-VR
221 et3 closing connection
Run Code Online (Sandbox Code Playgroud)