使用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

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.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了两个快速的方法

  1. 使用旧学校的邮件

mail -s "$(echo -e "This is Subject\nContent-Type: text/html")" test@yahoo.com < mytest.html

  1. 使用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脚本

http://www.daniweb.com/forums/thread15280.html

除了通过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