如何使用Linux命令行发送HTML电子邮件

我需要发送HTML格式的电子邮件。 我只有Linux命令行和命令“邮件”。

目前已经使用:

echo "To: address@example.com" > /var/www/report.csv echo "Subject: Subject" >> /var/www/report.csv echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv echo "<html>" >> /var/www/report.csv mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv echo "</html>" >> /var/www/report.csv mail -s "Built notification" address@example.com < /var/www/report.csv 

但在我的邮件代理,我只得到普通/文本。

替代文字

这对我工作:

 echo "<b>HTML Message goes here</b>" | mail -s "$(echo -e "This is the subject\nContent-Type: text/html")" foo@example.com 

我的邮件版本没有--append ,对echo -e \n -trick(它只是用空格replace\ n)太聪明了。 但是,它确实有-a

 mail -a "Content-type: text/html" -s "Built notification" address@example.com < /var/www/report.html 

创build一个名为tmp.html的文件,并在其中放入以下行:

 <b>my bold message</b> 

然后将所有这些粘贴到命令行中(括号和全部)。

 ( echo To: youremail@blah.com echo From: el@defiant.com echo "Content-Type: text/html; " echo Subject: a logfile echo cat tmp.html ) | sendmail -t 

邮件将被发送。 消息显示为粗体而不是<b>标记。

资源:
如何用bash命令“sendmail”发送一个html邮件?

问题是,当将文件redirect到像这样的“邮件”时,它仅用于邮件正文。 任何你在文件中embedded的头文件都会进入正文。

尝试:

 mail --append="Content-type: text/html" -s "Built notification" address@example.com < /var/www/report.csv 

–append允许您向邮件添加任意标题,这是您应该指定内容types和内容处置的位置。 不需要在文件中embeddedToSubject标题,或者使用–append指定它们,因为您已经隐式地将它们设置在命令行上(-s是主题,而address@example.com自动成为To )。

在OS X(10.9.4)上, cat起作用了,如果你的电子邮件已经在文件中,

 cat email_template.html | mail -s "$(echo -e "Test\nContent-Type: text/html")" karl@marx.com 

你应该使用“追加”模式redirect>>而不是>

试试:

 echo "To: address@example.com" > /var/www/report.csv echo "Subject: Subject" >> /var/www/report.csv echo "MIME-Version: 1.0" >> /var/www/report.csv echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv echo "Content-Disposition: inline" >> /var/www/report.csv echo "<html>" >> /var/www/report.csv mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv echo "</html>" >> /var/www/report.csv mail -s "Built notification" address@example.com < /var/www/report.csv 

非常古老的问题,但是当我search一个关于这个问题的时候,它的排名很高。

在这里find答案:

使用shell脚本发送HTML邮件

用传家宝邮件,你可以改变sendmail程序到你的钩子脚本,在那里replace头文件,然后使用sendmail。

我使用的脚本( ~/bin/sendmail-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 text/html; charset=utf-8
  • Content-Transfer-Encoding:8bit (不知道这是否真的需要)。

发送HTML邮件:

 mail -Ssendmail='~/bin/sendmail-hook' \ -s "Built notification" address@example.com < /var/www/report.csv 

在我的一个git的post_receive钩子中,我正在用类似的问题(用邮件)挣扎,最后我发现,sendmail实际上对这种事情更好,特别是如果你知道一些电子邮件是如何构build的似乎你知道)。 我知道这个答案来得很晚,但也许这对其他人也有用处。 我使用了heredoc操作符和使用该特性,它扩展了variables,因此它也可以运行内联脚本。 只需检查(bash脚本):

 #!/bin/bash recipients=( 'john@example.com' 'marry@not-so-an.example.com' # 'naah@not.this.one' ); sender='highly-automated-reporter@example.com'; subject='Oh, who really cares, seriously...'; sendmail -t <<-MAIL From: ${sender} `for r in "${recipients[@]}"; do echo "To: ${r}"; done;` Subject: ${subject} Content-Type: text/html; charset=UTF-8 <html><head><meta charset="UTF-8"/></head> <body><p>Ladies and gents, here comes the report!</p> <pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`</pre> </body></html> MAIL 

注意MAIL部分中的反引号来产生一些输出,并记住, <<-操作符只从行首剥离制表符(不是空格),所以在这种情况下,复制粘贴将不起作用(您需要用正确的标签)。 或者使用<<运算符,并且完全不压缩。 希望这会帮助别人。 当然你可以在MAIL部分之外使用反引号,并将输出保存到一些variables中,以便以后在MAIL部分中使用 – 品味和可读性。 而且我知道, #!/bin/bash并不总是适用于每个系统。

我发现一个非常简单的解决scheme:添加到邮件命令修饰符-aContent-Type:text / html。

在你的情况是:

 mail -aContent-Type:text/html -s "Built notification" address@example.com < /var/www/report.csv