Mailx发送html消息

我想用Mailx发送一个html消息。 当我尝试下面的命令

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

我以纯文本的forms获取email.html的内容。 在消息中,头Content-Type被设置为text / plain。 -a选项试图发送一个文件,所以我没有find如何修改标题。 这个答案几乎奏效,它将Content-Type设置为text / html,但不会替代text / plain的默认Content-Type。

 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试过。 当我尝试在webmail中显示消息时,我得到一个空白页面…

Solutions Collecting From Web of "Mailx发送html消息"

这很简单,如果你的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 

有许多不同版本的邮件。 当你超越邮件时,会受到1 @地址1到2 @地址2的限制

  • 有了一些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以最简单的方式发送邮件,从邮件中读取收件人列表。 (我认为他们并不都支持密件抄送:)在大多数系统上,sendmail不在通常的$ PATH中,它在/ usr / sbin或/ usr / lib中。

 cat <<'EOF' - test.html | /usr/sbin/sendmail -t To: to@address Subject: hello Content-Type: text/html EOF 

我已经成功地在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子壳的使用避免了必须创建一个临时文件。

 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 

那么,Centos7中的“-a”邮件和mailx就是“附件”而不是“追加标题”。 从这里我可以找到Centos7解决方案的最短路径:stackexchange.com

基本上:

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

如果你使用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