从linux shell脚本发送邮件

时间:2011-03-01 14:36:46

标签: linux email shell sendmail

我想从Linux Shell脚本发送电子邮件。执行此操作的标准命令是什么,是否需要设置任何特殊服务器名称?

11 个答案:

答案 0 :(得分:110)

如果服务器配置良好,例如它有一个正在运行的MTA,你可以使用mail命令。

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

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

man mail了解更多详情。

答案 1 :(得分:83)

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

mail -s "subject here" email@address.com <<< "message"

<<<用于重定向标准输入。很长一段时间它都是bash的一部分。

答案 2 :(得分:24)

如果exim和ssmtp都在运行,你可能会遇到麻烦。因此,如果您只想运行一个简单的MTA,只是为了让一个简单的smtp客户端发送电子邮件通知来保持,那么您应该清除最终预装的MTA,如 exim postfix 首先重新安装ssmtp。

然后它非常简单,仅配置2个文件(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)。

答案 3 :(得分:8)

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命令的绝对路径。

答案 4 :(得分:7)

通常,您希望使用mail命令使用本地MTA发送邮件(将使用SMTP将其发送到目标或将其转发到更强大的SMTP服务器,例如,你的ISP)。如果您没有本地MTA(虽然类UNIX系统省略一个MTA有点不寻常),您可以使用一些简约的MTA,如ssmtp

ssmtp配置非常简单。基本上,您只需要指定提供商的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

另一种选择是使用直接连接到SMTP服务器的myriads脚本之一并尝试在那里发布消息,例如Smtp-Auth-Email-Scriptsmtp-cliSendEmail等。< / p>

答案 5 :(得分:4)

承认你想使用一些smtp服务器,你可以这样做:

export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

somehostsomeportsomeaccount@somedomain更改为您要使用的实际值。 在此示例中,不执行加密和身份验证。

答案 6 :(得分:2)

你甚至不需要MTA。 SMTP协议非常简单,可以直接将其写入SMTP服务器。如果安装了OpenSSL软件包,您甚至可以通过SSL / TLS进行通信。查看此帖子:https://33hops.com/send-email-from-bash-shell.html

上面是一个关于如何发送开箱即用的文本/ html电子邮件的示例。如果你想添加附件,事情可能会变得更复杂,你需要对二进制文件进行base64编码并将它们嵌入边界之间。这是开始调查的好地方:http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP

答案 7 :(得分:2)

在Linux上,邮件实用程序可用于发送带有选项&#34; -a&#34;的附件。阅读手册页以了解该选项。例如,以下代码将发送附件:

mail -s&#34;这是主题&#34; -a attachment.txt name@domain.com&lt;&lt;&lt; &#34;嗨Buddy,请找到失败报告。&#34;

答案 8 :(得分:1)

mail命令执行此操作(谁会猜到;-)。打开shell并输入man mail以获取所有可用选项的mail命令的手册页。

答案 9 :(得分:1)

您可以使用'email'或'emailx'命令。

(1)$ vim /etc/mail.rc#或#vim /etc/nail.rc

set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server 
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login

因为它不是从授权帐户发送的,所以电子邮件将进入垃圾邮件列表。

(2) $ echo“请记住要删除未使用的主题!” |邮件-s“浪费主题” -a a.txt developer@xxx.com#发送给组用户'developer@xxxx.com'

答案 10 :(得分:1)

从LINUX向GMAIL发送邮件

使用POSTFIX

1 安装软件

Debian和Ubuntu:

apt-get update && apt-get install postfix mailutils

OpenSUSE:

zypper update && zypper install postfix mailx cyrus-sasl

Fedora:

dnf update && dnf install postfix mailx

CentOS:

yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain

Arch Linux:

pacman -Sy postfix mailutils

FreeBSD:

portsnap fetch extract update

cd /usr/ports/mail/postfix

make config

在配置中选择SASL支持

make install clean

pkg install mailx

2。配置Gmail

/ etc / postfix。创建或编辑密码文件:

vim /etc/postfix/sasl_passwd

我使用vim可以使用任何文件编辑器,例如nano,cat .....

Ubuntu,Fedora,CentOS,Debian,OpenSUSE,Arch Linux:

添加此

其中用户替换为您的邮件名,密码为您的gmail 密码

[smtp.gmail.com]:587    user@gmail.com:password

保存并关闭文件,并使其只能由根用户访问:因为其敏感内容包含您的密码

chmod 600 /usr/local/etc/postfix/sasl_passwd

> FreeBSD:

目录/ usr / local / etc / postfix。

vim /usr/local/etc/postfix/sasl_passwd

添加行:

[smtp.gmail.com]:587    user@gmail.com:password

保存并使其只能由root用户访问:

chmod 600 /usr/local/etc/postfix/sasl_passwd

3。 Postfix配置

配置文件main.cf

我们必须在Postfix中设置的6个参数

Ubuntu,Arch Linux,Debian:

编辑

 vim /etc/postfix/main.cf

修改以下值:

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

smtp_sasl_security_options (配置中将设置为空),以确保不使用与Gmail不兼容的安全选项

保存并关闭

就像

OpenSUSE:

vim /etc/postfix/main.cf

修改

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem

它还需要配置文件 master.cf

修改:

vim /etc/postfix/master.cf

如取消注释此行(删除#)

#tlsmgr unix - - n 1000? 1 tlsmg

保存并关闭

Fedora,CentOS:

vim /etc/postfix/main.cf

修改

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

FreeBSD:

vim /usr/local/etc/postfix/main.cf

修改:

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem

保存并关闭

4。处理密码文件:

Ubuntu,Fedora,CentOS,OpenSUSE,Arch Linux,Debian:

postmap /etc/postfix/sasl_passwd

用于 freeBSD

postmap /usr/local/etc/postfix/sasl_passwd

4.1)重新启动后缀

Ubuntu,Fedora,CentOS,OpenSUSE,Arch Linux,Debian:

systemctl restart postfix.service

对于 FreeBSD:

service postfix onestart
nano /etc/rc.conf

添加

postfix_enable=YES

保存然后开始运行

service postfix start

5。在Gmail中启用“安全性降低的应用程序” 使用以下链接的帮助

https://support.google.com/accounts/answer/6010255

6。发送测试电子邮件

mail -s "subject" recever@domain.com

按Enter

根据需要添加邮件正文按Enter ,然后按 ctrl + d 进行适当的终止

如果不起作用,请再次检查所有步骤,并检查是否在您的gmail中启用了“ 安全性较低的应用”

如果您在其中修改了任何内容,则重新启动后缀

对于shell脚本,请创建.sh文件,并根据需要添加6步命令

例如仅用于示例

#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80

if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
    mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi

当磁盘使用率超过THRESHOLD变量指定的百分比(此处为80%)时,脚本将发送电子邮件。