Exim:如何从命令行发送电子邮件(带有标题)?

Exim:如何从命令行发送电子邮件(带有标题)?

我可以用

echo "My Mail content" | exim [email protected]

发送电子邮件,但邮件中不包含主题

我如何发送电子邮件主题,”“ 和 ”回复“来自 exim 命令行的标题?

答案1

Exim 期望收到完整的 RFC 5322 / 2822 / 822 电子邮件消息作为输入。因此,您需要以以下形式提供标题...标头。

$(echo“收件人:foo@bar”;
   echo“回复:[电子邮件保护]
   echo "主题:你好!";
   回声“”;
   echo "我的邮件内容") | sendmail foo@bar
$发送邮件 foo@bar <<'EOF'
来自:“The Great Quux”<baz@quux>
收件人:“Fred Foobar”<foo@bar>
回复:dev@null
主题:你好!
内容类型:text/plain;字符集=utf-8

我的邮件内容
末梢血

(不确定是否需要引用 From/To 中的名称。RFC 5322 似乎说应该这样做)

答案2

exim -i -t <<< 'From: My Self <[email protected]>
To: Recip One <[email protected]>, Recip Two <[email protected]>
Subject: Test message

content line 1
content line 2'

这适用于任何兼容 sendmail 的 MTA,而不仅仅是 exim。如果您有 sendmail,您可以运行相同的命令,但以“sendmail -i -t...”开头。

当然,您也可以从文本文件加载输入。

exim -i -t < file/path.txt

角括号前的电子邮件地址标签部分不需要加引号。

-i 开关可防止以点结尾的行。如果您只运行“exim -t”并以交互方式粘贴或输入内容,则跳过 -i 开关,您可以以仅包含点的行和一个空白行结束(不知道为什么需要额外的空白行 - 以前不需要)。

-t 根据您提供的内容而不是通过命令行参数指定来获取收件人。电子邮件代理希望设置收件人:字段并遵守标签,因此您通常应该发送它。如果您确实发送了收件人:,请使用 -t 开关,因为在这种情况下,在命令行上指定收件人将是多余的,并且可能成为冲突的根源。

另一种策略是使用 s-nail 的 mailx 程序。安装 s-nail 后,只需将“set mta=/usr/bin/exim”(或 /usr/sbin/exim 或它所在的任何位置)添加到 /etc/mail.rc 或您个人的 ~/.mailrc,然后像这样使用 mailx:

mailx -s 'subject line' 'Recip One <[email protected]>' 'Recip Two <[email protected]>' <<< 'content line 1
content line 2'

或者

mailx -s 'subject line' 'Recip One <[email protected]>' 'Recip Two <[email protected]>' < file/path.txt

Mailx 有一个不错的 -a 开关,可用于添加文件附件。如果您运行的是旧版 s-nail,则没有“mta”设置,您需要将 /usr/sbin/sendmail 或 /usr/bin/sendmail(或类似文件)替换为指向 exim 二进制文件的符号链接。

相关内容