我想使用telnet服务在邮件正文中发送日志文件的内容。我一直在命令行上使用以下命令来触发邮件:
telnet mydomain.com 25
helo mydomain.com
mail from:senderdomain.com
rcpt to:recieverdomain.com
data
Hi.. This is for test!
.
quit
如何在此邮件中添加主题和文本文件的内容?请帮忙!
答案 0 :(得分:0)
您将无法使用普通的telnet会话轻松完成此操作。
如果您需要发送邮件附件,则需要遵循RFC 2045, MIME和RFC 2046(特别是Mixed subtype section)。您必须根据这些RFC格式化电子邮件,并对附件进行编码,通常使用base64。这是很多工作,与gool ol'dos命令有关。
最简单的选择是使用命令行工具,例如BLAT for Windows。
答案 1 :(得分:0)
就像@NicolasRiousset指出的那样,如果没有合适的客户端,它可能会非常痛苦,但如果文本文件包含格式正确的纯文本(仅限7位US-ASCII;没有比...更长的文本行)呃,略少于1000个字符)你可以做类似
的事情#!/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:
命令稍有不正确。