我尝试从我的ESXI服务器发送电子邮件,但由于某种原因我不知道我收到了错误。
这是我用来发送电子邮件的命令:
nc -Cv smtp.relay.us 25 < /vmfs/volumes/Vcloud-Datatstore/Tools/mail.txt
这是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
.
我得到了这些输出:
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
...
...
我不明白我做错了什么。非常感谢提前。
答案 0 :(得分:2)
最后让它发挥作用。
我不知道为什么,但是一旦到达DATA部分邮件,nc一次发送大量信息。即使用-i选项引入每一行之间的间隔也没有帮助。
所以这就是我的工作原理(受GhettoVCB剧本的启发):
cat "mail.txt" |while read L; do sleep "1"; echo "$L"; done | "nc" -C -v "smtp.relay.us" "25"
mail.txt中没有任何变化
再见
答案 1 :(得分:1)
需要睡眠的原因是SMTP是&#34;会话&#34;。服务器收到一行后,会回复一些内容。客户端回复,服务器回复。但是,TCP并不关心内容。 (这里特别重要的是换行符。)TCP获取数据流和目的地。它会删除协商的(在比您的应用程序更低的级别,因此这超出您的控制)数据的八位字节数并发送它们。并重复直到完成。
问题是当服务器收到具有换行符的TCP段时,赔率(negotiated_octet_count为1)将包含下一行的某些数量。服务器在这一点上说,&#34;你不是让我说话,所以这不是一个对话,我们不会继续。&#34;
所以,这就是你的第一次尝试失败的原因。第二次尝试成功的原因是netcat并不要求每个TCP段都满。它适用于流,而不是文件。所以netcat没有工作到EOF。它一直有效,直到stdin关闭(如果指定了一个,则达到超时)。当stdin&#34;延迟&#34;时,它会发送它所拥有的内容。这可确保您的服务器获得以换行符结束的TCP段。您可能会发现您的服务器可以处理小于1秒的睡眠时间。我是.05,但你可能想用.1给它一些安全感。
I gave an example here但是我要重复一遍,因为你的报价对我来说非常不合理。
$ 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