mail -s "subject" [email protected] <test.html
有效,但仅适用于纯文本电子邮件。
使用 Linux 命令发送 HTML 电子邮件的正确方法是什么mail
?
答案1
周围有很多不同的版本mail
。当你超越mail -s subject to1@address1 to2@address2 <body
(发送,仅此而已)POSIX保证 - 甚至-s
不存在过去),他们往往有不同的命令行选项。添加额外的标头并不总是那么容易。
通过一些
mailx
实现,例如来自mailutils
Ubuntu或者Debian 的bsd-mailx
,这很容易,因为有一个选项。mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
随着传家宝
mailx
,没有方便的方法。插入任意标头的一种可能性是设置editheaders=1
和使用外部编辑器(可以是脚本)。## Prepare a temporary script that will serve as an editor. ## This script will be passed to ed. temp_script=$(mktemp) cat <<'EOF' >>"$temp_script" 1a Content-Type: text/html . $r test.html w q EOF ## Call mailx, and tell it to invoke the editor script EDITOR="ed -s $temp_script" heirloom-mailx -S editheaders=1 -s "Subject" to@address <<EOF ~e . EOF rm -f "$temp_script"
与一般POSIX
mailx
,我不知道如何获取标题。
如果您要使用任何mail
或mailx
,请记住
- 即使在给定的 Linux 发行版中,这也是不可移植的。例如,Ubuntu 和 Debian 都有多种
mail
和 的替代方案mailx
。 - 撰写消息时,
mail
将以mailx
和 开头的行视为~
命令。如果将文本通过管道输入mail
,则需要安排该文本不包含以 开头的行~
。
如果您无论如何都要安装软件,您不妨安装比mail
/ Mail
/更可预测的东西mailx
。例如,杂种狗。使用 Mutt,您可以使用以下选项在输入中提供大多数标头-H
:但不是Content-Type
,需要通过 mutt 选项设置。
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
或者你可以调用sendmail
直接地。有几个版本sendmail
,但它们都支持sendmail -t
以最简单的方式发送邮件,从邮件中读取收件人列表。 (我认为它们并不都支持Bcc:
。)在大多数系统上,sendmail
不是通常的$PATH
,而是/usr/sbin
或/usr/lib
。
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html
EOF
答案2
#!/bin/sh
(
echo "To: [email protected]"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t
答案3
有了Heirloom mailx,方便的方法是
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" [email protected] < /tmp/htmlmail.txt
谢谢,伙计
在 Fedora 17 上测试并运行
答案4
使用 heirloom-mailx,您可以将 sendmail 程序更改为您的钩子脚本,替换其中的标头,然后使用 sendmail。
我使用的脚本(~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
此脚本更改邮件标头中的值,如下所示:
Content-Type:
到text/html; charset=utf-8
Content-Transfer-Encoding:
(不确定8bit
这是否真的需要)。
要发送 HTML 电子邮件:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" [email protected] < test.html
此方法比 @Gilles 提出的方法更有效,因为它不会创建临时文件,而只是即时修复流。