从 linux shell 脚本发送邮件

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

468170 次浏览

mail命令可以做到这一点(谁能想到呢; ——)。打开 shell 并输入 man mail以获取所有可用选项的 mail命令的手册页。

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

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

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

man mail了解更多细节。

通常,您希望使用 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 服务器的脚本之一,并尝试在那里发布消息,如 Smtp-Auth-Email-ScriptSMTP-cli发邮件等。

如果进出口和 ssmtp 都在运行,您可能会遇到麻烦。因此,如果您只是想运行一个简单的 MTA,只是为了有一个简单的 smtp 客户机来发送电子邮件通知,您应该首先清除最终预安装的 MTA,如 进出口后缀,然后重新安装 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)。

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

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

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

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

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

<<<用于重定向标准输入,长期以来一直是 bash 的一部分。

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

你根本不需要交通管理局。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

在 linux 上,可以使用 邮件实用程序发送带有选项“-a”的附件。浏览手册页以了解该选项。例如,以下代码将发送一个附件:

Mail-s“ THIS IS SUBJECT”-a attachment.txt name@domain.com < < < < “ Hi Buddy,Please find fault reports。”

您可以使用’em ail’或’em ailx’命令。

(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 #because if it is not sent from an authorized account, email will get to junk mail list.

(2)

$ echo "Pls remember to remove unused ons topics!" | mail -s "waste topics" -a a.txt developer@xxx.com #send to group user 'developer@xxxx.com'

从 LINUX 发送邮件到 GMAIL

使用后缀

1: < strong > 安装软件

Debian 和 Ubuntu:

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

OpenSUSE:

zypper update && zypper install postfix mailx cyrus-sasl

软呢帽:

dnf update && dnf install postfix mailx

森托斯:

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 你可以使用任何文件编辑器,如纳米,猫..。

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

加上这个

其中用户替换与您的 邮箱名和密码是您的 gmail 密码

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

保存并关闭 文件,只允许 root 用户访问该文件: < em > ,因为它是一个包含您的密码的敏感内容

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. 后缀配置

配置文件 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

它还需要配置文件 师父,师父

修改:

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

按回车键

按照您的意愿添加邮件正文 按回车键然后按 Ctrl + d适当终止

如果它不工作的 检查所有步骤再次和 检查完毕如果您启用“ 不太安全的应用程序”在您的 gmail

然后重新启动后缀,如果你修改了其中的任何内容

For shell script 创建. 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%)时,脚本会发送一封电子邮件。