从linux shell脚本发送邮件
我想从Linux Shell脚本发送电子邮件。 什么是标准的命令来做到这一点,我需要设置任何特殊的服务器名称?
如果服务器configuration合理,例如它有一个正在运行的MTA,则可以使用mail命令。
例如,要发送文件的内容,可以这样做:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
了解更多详情。
如果你想在bash中使用干净而简单的方法,并且不想使用cat
, echo
等,最简单的方法是:
mail -s "subject here" email@address.com <<< "message"
<<<
用于redirect标准input。 这是很长一段时间的bash的一部分。
如果exim和ssmtp都在运行,您可能会遇到麻烦。 所以如果你只是想运行一个简单的MTA,只是为了让一个简单的smtp客户端发送电子邮件通知来维护,你应该先清除最终预装的MTA,比如exim或者postfix,然后重新安装ssmtp。
然后它非常简单,只configuration2个文件(revaliases和ssmtp.conf) – 请参阅ssmtp doc – ,在bash或bourne脚本中的用法如下所示:
#!/bin/sh SUBJECT=$1 RECEIVER=$2 TEXT=$3 SERVER_NAME=$HOSTNAME SENDER=$(whoami) USER="noreply" [[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME" [[ -z $2 ]] && RECEIVER="another_configured_email_address" [[ -z $3 ]] && TEXT="no text content" MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT" echo -e $MAIL_TXT | sendmail -t exit $?
显然不要忘记打开你的防火墙输出到SMTP端口(25)。
一般来说,你想使用mail
命令来发送你的邮件使用本地MTA(这将使用SMTP到目的地或只是转发到一个更强大的SMTP服务器,例如,在您的ISP)。 如果您没有本地MTA(尽pipe类似UNIX的系统略去不同),您可以使用一些简单的MTA,如ssmtp 。
ssmtp
很容易configuration。 基本上,你只需要指定你的提供者的SMTP服务器在哪里:
# The place where the mail goes. The actual machine name is required # no MX records are consulted. Commonly mailhosts are named mail.domain.com # The example will fit if you are in domain.com and you mailhub is so named. mailhub=mail
另一个select是使用无数的脚本,直接连接到SMTP服务器,并尝试发送消息,如Smtp-Auth-Email-Script , smtp-cli , SendEmail等
在bash脚本中的另一个选项:
mailbody="Testmail via bash script" echo "From: info@myserver.test" >> /tmp/mailtest echo "To: john@mywebsite.test" >> /tmp/mailtest echo "Subject: Mailtest subject" >> /tmp/mailtest echo "" >> /tmp/mailtest echo $mailbody >> /tmp/mailtest cat /tmp/mailtest | /usr/sbin/sendmail -t
- 每次使用此脚本时,文件
/tmp/mailtest
被覆盖。 - sendmail的位置可能因系统而异。
- 在cron脚本中使用时,必须使用sendmail命令的绝对path。
承认你想使用一些smtp服务器,你可以这样做:
export SUBJECT=some_subject export smtp=somehost:someport export EMAIL=someaccount@somedomain echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
将somehost
, someport
和someaccount@somedomain
更改为您将使用的实际值。 在这个例子中没有encryption和没有authentication。
mail
命令这样做(谁会猜到;-)。 打开你的shell并inputman mail
来获取所有可用选项的mail
命令的手册页。
你甚至不需要MTA。 SMTP协议足够简单,可以直接将其写入SMTP服务器。 如果您安装了OpenSSL软件包,您甚至可以通过SSL / TLS进行通信。 检查这个post: https : //33hops.com/send-email-from-bash-shell.html
以上是关于如何发送文本/ HTML电子邮件的例子。 如果你想添加附件,事情会变得更复杂一些,你将需要base64对二进制文件进行编码并将其embedded到边界之间。 这是一个开始调查的好地方: http ://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP