【问题标题】:Adding content of file as mail body while sending mail using telnet使用 telnet 发送邮件时将文件内容添加为邮件正文
【发布时间】:2015-12-19 10:05:22
【问题描述】:
我想使用 telnet 服务在邮件正文中发送日志文件的内容。我一直在命令行上使用以下命令来触发邮件:
telnet mydomain.com 25
helo mydomain.com
mail from:senderdomain.com
rcpt to:recieverdomain.com
data
Hi.. This is for test!
.
quit
如何在此邮件中添加主题和文本文件的内容?请帮忙!
【问题讨论】:
标签:
email
command-line
smtp
telnet
【解决方案1】:
就像@NicolasRiousset 指出的那样,如果没有合适的客户端,这可能太痛苦了,但是如果文本文件包含格式正确的纯文本(仅限 7 位 US-ASCII;没有文本行长于……呃,略少超过 1,000 个字符)您可以执行类似的操作
#!/bin/bash
case $# in 2) ;; *) echo "Usage: $0 <host> <filename.txt>"; exit 0;; esac
( printf $'%\r\n' "helo mydomain.com" \
"mail from:<user@senderdomain.com>" \
"rcpt to:<rcpt@recieverdomain.com>"
"data"
"Subject: $2"
""
sed $'s/^\./../;s/$/\r/' "$2"
printf $'%\r\n' "." "quit"
) |
telnet "$1" 25
可能存在时间问题; nc 可能比普通的旧 telnet 工作得更好。适当的工具会在每个命令后等待 SMTP 服务器的响应,并检查其返回码。
我使用 Bash C 风格的字符串来实现(某种)可移植性,但是(例如)你的 sed 可能仍然不能很好地配合。除了用 CRLF:s 替换换行符之外,该脚本还按照 RFC5321 的要求执行点填充。
另请注意,您的 mail from: 和 rcpt to: 命令略有错误。