如何实现命令行发送邮件?

Postfix

1 前言

一个问题,一篇文章,一出故事。
笔者生产环境某服务器需要发送警告邮件,于是需要配置一个邮件空客户端来满足此需求。

2 最佳实践

2.1 配置PostFix

2.1.1 安装PostFix软件包

yum install -y postfix

2.1.2 修改配置文件

cp /etc/postfix/main.cf /etc/postfix/main.cf.default
vim /etc/postfix/main.cf

需要在配置文件末尾加入如下配置,

myhostname = ser.cmdschool.org
myorigin = cmdschool.org
relayhost = 10.168.0.168
inet_interfaces = loopback-only
mydestination =
local_transport = error:local mail delivery is disabled

参数的作用如下,
– 参数“myhostname”声明postfix运行的主机名称
– 参数“myorigin”声明发件人的本地域名
– 参数“relayhost”声明smtp邮件中继服务器(范例中smtp根据IP地址验证,没有开启用户名和密码验证)
– 参数“inet_interfaces”声明发送邮件的网卡接口,范例指定回环接口
– 参数“mydestination”声明本机邮件的目标域名(即本地接收邮件域,如“cmdschool.org”),范例为空即不接收
– 参数“local_transport”声明本地邮件分发,范例“error:local mail delivery is disabled”为禁用本地分发

2.1.3 重启服务并配置服务开机启动

systemctl restart postfix
systemctl status postfix
systemctl enable postfix

2.2 配置邮件客户端

2.2.1 安装邮件客户端软件包

yum install -y mailx

2.2.2 测试邮件发送

echo "test" | mail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org

参数的作用如下,
– 参数值“test”声明发送的邮件内容
– 参数“s”声明发送的邮件主题
– 参数“r”声明发件人的邮箱地址
– 参数值“will@cmdschool.org”声明邮件的目标地址
另外,可以配合cat使用,

cat << EOF | mail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org
test body start
test body end
EOF

如果shell的函数环境,你可能需要这样书写,

cat <<-EOF | mail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org
test body start
test body end
EOF

另外,也支持从一个文件导入邮件内容,

echo "test" > message.txt
mail -s "test mail 001" -r seradmin@cmdschool.org will@cmdschool.org < message.txt

如果需要发送附件,请参阅如下范例,

echo "test" | mail -s "test mail 001" -a /etc/redhat-release -r seradmin@cmdschool.org will@cmdschool.org

参阅文档
————–
http://www.postfix.org/BASIC_CONFIGURATION_README.html

没有评论

发表回复

Postfix
如何指定PostFix的默认下一跳地址?

1 前言 一个问题,一篇文章,一出故事。 笔者想要指定邮件的默认下一跳地址,以便邮件可以被送到特定的 …

Postfix
如何实现监视PostFix的延迟邮件警告?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中有一套PostFix集群,最近经历了一次邮件延迟 …

Postfix
如何优化PostFix?

1 前言 一个问题,一篇文章,一出故事。 笔者最近生产服务器遇到队列问题,因此需要通过优化PostF …