使用shell脚本发送HTML邮件
我如何使用shell脚本发送HTML电子邮件?
首先你需要编写消息。 最低限度是由这两个标题组成的:
MIME-Version: 1.0 Content-Type: text/html
…和适当的消息体:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><title></title> </head> <body> <p>Hello, world!</p> </body> </html>
一旦你有了它,你可以传递适当的信息到邮件命令:
body = '...' echo $body | mail \ -a "From: me@example.com" \ -a "MIME-Version: 1.0" \ -a "Content-Type: text/html" \ -s "This is the subject" \ you@example.com
这是一个过于简单的例子,因为你还需要照顾的字符集,编码,最大线长…但这基本上是这个想法。
或者,您可以使用Perl或PHP而不是纯shell编写您的脚本。
更新
一个shell脚本基本上是一个带有Unix行结尾的文本文件,它以一行叫做shebang的行开始,告诉shell它必须把文件传给它的解释器,遵循解释器理解的语言中的一些命令并且具有执行权限(在Unix中是一个文件属性)。 举个例子,假设你把以下内容保存为hello-world
:
#!/bin/sh echo Hello, world!
然后你分配执行权限:
chmod +x hello-world
最后你可以运行它:
./hello-world
无论如何,这与原来的问题无关。 在进行高级任务之前,您应该熟悉基本的shell脚本。 在这里,你是一个关于bash ,一个stream行的shell的几个链接:
http://www.gnu.org/software/bash/manual/html_node/index.html
标签包含'sendmail',所以这里有一个解决scheme:
( echo "From: me@xyz.com " echo "To: them@xyz.com " echo "MIME-Version: 1.0" echo "Content-Type: multipart/alternative; " echo ' boundary="some.unique.value.ABC123/server.xyz.com"' echo "Subject: Test HTML e-mail." echo "" echo "This is a MIME-encapsulated message" echo "" echo "--some.unique.value.ABC123/server.xyz.com" echo "Content-Type: text/html" echo "" echo "<html> <head> <title>HTML E-mail</title> </head> <body> <a href='http://www.google.com'>Click Here</a> </body> </html>" echo "------some.unique.value.ABC123/server.xyz.com--" ) | sendmail -t
sendmail的包装可以使这个工作更容易,例如, mutt :
mutt -e 'set content_type="text/html"' me@mydomain.com -s "subject" < message.html
到目前为止,我已经在cmd linux中find了两个快速的方法
- 使用旧学校的邮件
mail -s "$(echo -e "This is Subject\nContent-Type: text/html")" test@yahoo.com < mytest.html
- 使用mutt
mutt -e "my_hdr Content-Type: text/html" test@yahoo.com -s "subject" < mytest.html
另一个select是sendEmail脚本http://caspian.dotconf.net/menu/Software/SendEmail/ ,它也允许你将消息types设置为html,并且包含一个文件作为消息体。 详情请参阅链接。
另一种select是使用msmtp。
你需要的是设置你的.msmtprc这样的东西(例如使用Gmail):
account default host smtp.gmail.com port 587 from example@gmail.com tls on tls_starttls on tls_trust_file ~/.certs/equifax.pem auth on user example@gmail.com password <password> logfile ~/.msmtp.log
然后,只需拨打:
(echo "Subject: <subject>"; echo; echo "<message>") | msmtp <email@domain.tld>
在你的脚本
更新:对于HTML邮件你也必须把标题,所以你可能想要这样的文件:
From: sender@domain.tld To: email@domain.tld Subject: Important message Mime-Version: 1.0 Content-Type: text/html <h1>Mail body will be here</h1> The mail body <b>should</b> start after one blank line from the header.
邮件就像
cat email-template | msmtp email@domain.tld
同样可以通过命令行完成,但使用文件可能会更容易。
shell发送html邮件 – UNIX和Linux论坛
http://www.unix.com/shell-programming-scripting/80973-shell-send-html-email.html
从shell脚本发送电子邮件 – Shell脚本
除了通过mdma正确回答之外,还可以使用mail命令,如下所示:
mail person@email.com -s“Subject Here”-a“Content-Type:text / html; charset = \”us-ascii \“”
你会得到你要的东西。 不要忘了在电子邮件中join“”和“”。 以下是我用来通过HTML格式发送每日报告的快速脚本:
#!/ bin / sh的
(cat /path/to/tomorrow.txt
mysql -h mysqlserver -u用户-pPassword数据库-H -e“select语句”
回声“”)| mail email@email.com -s“明天的订单到现在为止”-a“Content-Type:text / html; charset = \”us-ascii \“”
cat > mail.txt <<EOL To: <email> Subject: <subject> Content-Type: text/html <html> $(cat <report-table-*.html>) This report in <a href="<url>">SVN</a> <html> EOL sendmail -t < mail.txt
MIME头和从,地址也可以包含在它自己的HTML文件。
命令
cat cpu_alert.html | /usr/lib/sendmail -t
cpu_alert.html文件示例。
From: donotreply@example.com To: admin@example.com Subject: CPU utilization heigh Mime-Version: 1.0 Content-Type: text/html <h1>Mail body will be here</h1> The mail body should start after one blank line from the header.
示例代码可在这里: http : //sugunan.net/git/slides/shell/cpu.php