从linux shell脚本发送邮件

我想从Linux Shell脚本发送电子邮件。 什么是标准的命令来做到这一点,我需要设置任何特殊的服务器名称?

如果服务器configuration合理,例如它有一个正在运行的MTA,则可以使用mail命令。

例如,要发送文件的内容,可以这样做:

$ cat /path/to/file | mail -s "your subject" your@email.com 

man mail了解更多详情。

如果你想在bash中使用干净而简单的方法,并且不想使用catecho等,最简单的方法是:

 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" 

somehostsomeportsomeaccount@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