Email 使用telnet发送邮件时将文件内容添加为邮件正文

Email 使用telnet发送邮件时将文件内容添加为邮件正文,email,command-line,smtp,telnet,Email,Command Line,Smtp,Telnet,我想使用telnet服务发送邮件正文中日志文件的内容。我一直在命令行上使用以下命令来触发邮件: telnet mydomain.com 25 helo mydomain.com mail from:senderdomain.com rcpt to:recieverdomain.com data Hi.. This is for test! . quit 如何在此邮件中添加主题和文本文件的内容?请帮忙 使用普通的telnet会话无法轻松完成此任务 如果您需要发送邮件附件,则需要遵循RFC 204

我想使用telnet服务发送邮件正文中日志文件的内容。我一直在命令行上使用以下命令来触发邮件:

telnet mydomain.com 25
helo mydomain.com
mail from:senderdomain.com
rcpt to:recieverdomain.com
data
Hi.. This is for test!
.
quit

如何在此邮件中添加主题和文本文件的内容?请帮忙

使用普通的telnet会话无法轻松完成此任务

如果您需要发送邮件附件,则需要遵循RFC 2046,特别是。您必须根据这些RFC格式化电子邮件,并对附件进行编码,通常使用base64。这是一个很大的工作,一个痛苦与谷歌的dos命令做


您最简单的选择是使用命令行工具,如。

like@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服务器的响应,并检查其返回代码

我使用bashc风格的字符串来实现某种可移植性,但例如,您的sed可能仍然不能很好地运行。除了用CRLF:s替换换行符外,脚本还按照RFC5321的要求执行点填充

还请注意,您的mail from:和rcpt to:命令稍有错误