【问题标题】: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: 命令略有错误。

    【讨论】:

      【解决方案2】:

      使用普通的 telnet 会话将无法轻松完成。

      如果您需要发送邮件附件,您需要遵循RFC 2045, MIME 和RFC 2046(特别是Mixed subtype section)。您必须根据这些 RFC 格式化电子邮件,并对附件进行编码,通常使用 base64。工作量很大,使用 gool ol' dos 命令会很痛苦。

      您最简单的选择是使用命令行工具,例如BLAT for Windows

      【讨论】:

        猜你喜欢
        • 2015-05-10
        • 2020-06-08
        • 1970-01-01
        • 2018-04-29
        • 2013-10-30
        • 2012-01-10
        • 2013-09-04
        • 2016-05-22
        • 2016-09-23
        相关资源
        最近更新 更多