Mailx发送html消息

时间:2014-06-03 08:16:05

标签: html linux email mailx

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

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

我以纯文本格式获取email.html的内容。在消息中,标题Content-Type设置为text / plain。 -a选项尝试发送文件,因此我没有找到如何修改标头。这个answer几乎可以工作,它将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。当我尝试在网络邮件中显示消息时,我得到一个空白页面......

6 个答案:

答案 0 :(得分:19)

如果您的mailx命令支持-a(追加标头)选项,那就很容易了:

$ 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

答案 1 :(得分:9)

有许多不同版本的邮件。当你超越mail -s的主题是1 @ address1到2 @ address2

  • 使用一些mailx实现,例如来自Ubuntu上的mailutils或 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,我不知道如何获取标题。

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

  • 即使在给定的Linux发行版中,这也不可移植。例如,Ubuntu和Debian都有几种邮件和邮件的替代品。

  • 撰写邮件时,mail和mailx会将以〜开头的行视为命令。如果将文本管道传输到邮件中,则需要安排此文本不要包含以〜开头的行。

如果你打算安装软件,你也可以安装比mail / Mail / mailx更可预测的东西。例如,mutt。使用Mutt,您可以使用-H选项提供输入中的大多数标头,但不能通过mutt选项设置Content-Type。

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 :(得分:5)

我已成功在Arch Linux上使用以下内容(其中-a标志用于附件)多年:

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

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

我现在使用bash子shell:

而不是依赖于攻击主题行
(
    echo -e "Content-Type: text/html\n"
    cat mail.html
 ) | mail -s "The Subject" -t user@gmail.com

由于我们实际上只使用mailx的主题标记,因此似乎没有理由不按照@dogbane的建议切换到sendmail

(
    echo "To: user@gmail.com"
    echo "Subject: The Subject"
    echo "Content-Type: text/html"
    echo
    cat mail.html
) | sendmail -t

使用bash子shell可以避免必须创建临时文件。

答案 3 :(得分:-1)

EMAILCC=" -c user1@dominio.cl,user2@dominio.cl"
TURNO_EMAIL="user@dominio.cl"

mailx $EMAILCC -s "$(echo "Status: Control Aplicactivo \nContent-Type: text/html")" $TURNO_EMAIL < tmp.tmp

答案 4 :(得分:-1)

好吧,Centos7中的“-a”邮件和mailx是“附加文件”而不是“附加标题”。我从这里到Centos7解决方案的最短途径: stackexchange.com

基本上:

yum install mutt
mutt -e 'set content_type=text/html' -s 'My subject' me@my.com < msg.html

答案 5 :(得分:-2)

如果你使用AIX试试这个 这将附加一个文本文件并包含一个HTML正文 如果这不起作用,请捕获/ var / spool / mqueue

中的输出
#!/usr/bin/kWh
if (( $# < 1 ))
 then
  echo "\n\tSyntax: $(basename) MAILTO SUBJECT BODY.html ATTACH.txt "
  echo "\tmailzatt"
  exit
fi
export MAILTO=${1-noreply@visweb.co.za}
MAILFROM=$(whoami)
SUBJECT=${2-"mailzatt"}
export BODY=${3-/apps/bin/attch.txt}
export ATTACH=${4-/apps/bin/attch.txt}
export HST=$(hostname)
#export BODY="/wrk/stocksum/report.html"
#export ATTACH="/wrk/stocksum/Report.txt"
#export MAILPART=`uuidgen` ## Generates Unique ID
#export MAILPART_BODY=`uuidgen` ## Generates Unique ID
export MAILPART="==".$(date +%d%S)."===" ## Generates Unique ID
export MAILPART_BODY="==".$(date +%d%Sbody)."===" ## Generates Unique ID
(
echo "To: $MAILTO"
 echo "From: mailmate@$HST "
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
 echo ""
 echo "--$MAILPART"
 echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
 echo ""
 echo ""
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/html"
 echo "Content-Disposition: inline"
 cat $BODY
 echo ""
 echo "--$MAILPART_BODY--"
 echo ""
 echo "--$MAILPART"
 echo "Content-Type: text/plain"
 echo "Content-Disposition: attachment; filename=\"$(basename $ATTACH)\""
 echo ""
 cat $ATTACH
 echo ""
 echo "--${MAILPART}--"
  ) | /usr/sbin/sendmail -t