为了账号安全,请及时绑定邮箱和手机立即绑定

Mailx发送html消息

/ 猿问

Mailx发送html消息

翻翻过去那场雪 2019-12-05 15:59:50

我想用Mailx发送html消息。当我尝试以下命令时


mailx -s "Subject"  user@gmail.com  < email.html 

我得到纯文本形式的email.html的内容。在消息中,标题Content-Type设置为text / plain。-a选项尝试发送文件,因此我不知道如何修改标头。这个答案几乎可以用,它可以将Content-Type设置为text / html,但是不能替代默认的Content-Type text / plain。


mailx -s "$(echo -e "This is the subject\nContent-Type: text/html")" user@gmail.com  < email.html

给出这个结果:


From: send@gmail.com

To: user@gmail.com

Subject: This is the subject

Content-Type: text/html

Message-ID: <538d7b66.Xs0x9HsxnJKUFWuI%maikeul06@gmail.com>

User-Agent: Heirloom mailx 12.4 7/29/08

MIME-Version: 1.0

 boundary="=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK"


This is a multi-part message in MIME format.


--=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK

Content-Type: text/plain; charset=us-ascii

Content-Transfer-Encoding: 7bit

Content-Disposition: inline


<html>

<body>

<p>Helo wolrd</p>

</body>

</html>

PS:我也尝试过使用uuencode。当我尝试在网络邮件中显示消息时,我得到一个空白页...


查看完整描述

3 回答

?
动漫人物

很简单,如果您的mailx命令支持-a(append header)选项:


$ mailx -a 'Content-Type: text/html' -s "my subject" user@gmail.com < email.html

如果不是,请尝试使用sendmail:


# create a header file

$ cat mailheader

To: user@gmail.com

Subject: my subject

Content-Type: text/html


# send

$ cat mailheader email.html | sendmail -t


查看完整回答
反对 2019-12-05
?
一只斗牛犬

周围有许多不同版本的邮件。当您超出邮件-s的范围时,从1 @ address1到2 @ address2


对于某些mailx实现,例如从Ubuntu上的mailutils或Debian的bsd-mailx中实现,这很容易,因为有一个选项。


mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html

使用Heirloom 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,我不知道如何获取标题。


如果您要使用任何邮件或mailx,请记住


即使在给定的Linux发行版中,这也无法移植。例如,Ubuntu和Debian都有mail和mailx的几种替代方案。


撰写邮件时,mail和mailx将以〜开头的行视为命令。如果将文本通过管道发送到邮件,则需要安排该文本不包含以〜开头的行。


如果仍然要安装软件,则最好安装比mail / Mail / mailx更可预测的内容。例如,mutt。使用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


查看完整回答
反对 2019-12-05
?
蝴蝶不菲

几年来,我已经在Arch Linux(该-a标志用于附件)上成功使用了以下命令:


mailx -s "The Subject $( echo -e "\nContent-Type: text/html" user@gmail.com < email.html

这将Content-Type标头附加到主题标头,该标头在最近更新之前一直有效。现在,新行已从-s主题中过滤掉。据推测,这样做是为了提高安全性。


现在,我不再依赖于修改主题行,而是使用bash子外壳程序:


(

    echo -e "Content-Type: text/html\n"

    cat mail.html

 ) | mail -s "The Subject" -t user@gmail.com

而且由于我们实际上仅使用mailx的subject标志,所以似乎没有理由不sendmail按照@dogbane的建议切换到:


(

    echo "To: user@gmail.com"

    echo "Subject: The Subject"

    echo "Content-Type: text/html"

    echo

    cat mail.html

) | sendmail -t

bash子shell的使用避免了创建临时文件的麻烦。


查看完整回答
反对 2019-12-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信