如何使用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和内容处置的位置。 不需要在文件中embeddedTo
和Subject
标题,或者使用–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