1.安装 (需要sendmail或postfix服务)
sendmail:CentOS 5.x默认
# yum install sendmail
# systemctl start sendmail.service
# systemctl status sendmail.service
postfix :CentOS 6.x默认
# yum install postfix
# systemctl start postfix.service
# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since 二 2017-09-19 14:08:03 CST; 1s ago
Process: 72063 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 72060 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 72057 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 72136 (master)
CGroup: /system.slice/postfix.service
├─72136 /usr/libexec/postfix/master -w
├─72137 pickup -l -t unix -u
└─72138 qmgr -l -t unix -u
9月 19 14:08:03 CentOS73 systemd[1]: Starting Postfix Mail Transport Agent...
9月 19 14:08:03 CentOS73 postfix/master[72136]: daemon started -- version 2.10.1, configuration /etc/postfix
9月 19 14:08:03 CentOS73 systemd[1]: Started Postfix Mail Transport Agent.
附件软件包:uuencode
yum install sharutils
安装邮件发送工具mailx
yum install mailx
检查:
netstat -tunlp |grep 25
2.配置
# vim /etc/mail.rc
文件尾增加以下内容 :qq邮箱
set from=1825164562@qq.com smtp="smtp.qq.com:25"
set smtp-auth-user="1825164562@qq.com" smtp-auth-password="<password>"
set smtp-auth=login
或:163企业邮箱
echo -e "\n# mail\nset from=<mail> smtp=smtp.qiye.163.com\nset smtp-auth-user=<mail> smtp-auth-password=<password> smtp-auth=login" >> /etc/mail.rc
说明:
from: 对方收到邮件时显示的发件人
smtp: 指定第三方发送邮件的smtp服务器地址
smtp-auth: SMTP的认证方式。默认是LOGIN,也可改为CRAM-MD5或PLAIN方式
smtp-auth-user: 第三方发邮件的用户名
smtp-auth-password: 用户名对应密码
重启:(安装哪个重启哪个)
systemctl restart sendmail.service
systemctl restart postfix.service
3.Mail命令
smtp:simple mail transmission protocol :简单邮件传输协议,发邮件;
pop3:Post Office Procotol:邮局协议
imap4:Internet Mail Access Procotol:互联网邮件访问协议
mail –s “邮件主题” –c”抄送地址” –b “密送地址” -- -f 发送人邮件地址 –F 发件人姓名 < 要发送的邮件内容
选项:
-b<地址>:指定密件副本的收信人地址;
-c<地址>:指定副本的收信人地址;
-f<邮件文件>:读取指定邮件文件中的邮件;
-i:不显示终端发出的信息;
-I:使用互动模式;
-n:程序使用时,不使用mail.rc文件中的设置;
-N:阅读邮件时,不显示邮件的标题;
-s<邮件主题>:指定邮件的主题;
-u<用户帐号>:读取指定用户的邮件;
-v:执行时,显示详细的信息。
1) 无邮件正文
mail -s "主题" 收件地址
mail -s "测试" 898009427@qq.com
2) 有邮件正文
mail -s "主题" 收件地址< 文件(邮件正文.txt)
mail -s "邮件主题" 898009427@qq.com < /data/findyou.txt
echo "邮件正文" | mail -s 邮件主题 收件地址
echo "邮件正文内容" | mail -s "邮件主题" 898009427@qq.com
cat 邮件正文.txt | mail -s 邮件主题 收件地址
cat /data/findyou.txt | mail -s "邮件主题" 898009427@qq.com
3) 带附件
mail -s "主题" 收件地址 -a 附件 < 文件(邮件正文.txt)
mail -s "邮件主题" 898009427@qq.com -a /data/findyou.txt< /data/findyou.txt
mail -s "邮件主题" -a 文件(附件) 898009427@qq.com < 文件(邮件正文.txt)
uuencode /data/findyou.txt | mail -s "邮件主题" 898009427@qq.com
邮件正文的生成:
(1) 交互式输入;
点号(.)单独成行可以表示正文结束;Ctrl+d提交亦可;
发邮件
[root@NUC-1 ~]# mail -s 'hello hdfs' hdfs
How are you these days?
. # 英文点号结尾表示结束;然后回车
EOT
[root@NUC-1 ~]#
收邮件
mail
# # 输入数字查看对应第几封邮件
q # q退出
(2) 通过输入重定向;
mail -s 'hello hdfs' hdfs < file.txt(正文内容)
(3) 通过管道;
cat file.txt | mail -s 'hello hdfs' hdfs
4.脚本
# vim sendmail.sh
#!/bin/bash
#author:findyou
help(){
echo "eg: $0 [Subject] [address] [content_file] [file]"
echo ""
exit 1
}
if [ ! -n "$1" ] ; then
help
fi
cDate=`date +%Y%m%d`
if [ ! -n "$2" ] ; then
help
else
mail_to=$2
echo " Send Mail to ${mail_to}"
fi
if [ ! -n "$4" ] ; then
mail -s $1 ${mail_to}<$3
else
mail -s $1 -a $4 ${mail_to}<$3
fi
使用
# ./sendmail.sh test 898009427@qq.com abc.txt
Send Mail to 898009427@qq.com
说明:建议直接使用命令 ,有脚本只是为了在打印显示相关信息,多此一举。
5.问题
启动postfix出错,查看centos中的postfix日志
# more /var/log/maillog
postfix: fatal: parameter inet_interfaces: no local interface found for ::1
# vim /etc/postfix/main.cf
发现配置为:
inet_interfaces = localhost
inet_protocols = all
改成:
inet_interfaces = all
inet_protocols = all
重新启动
# systemctl restart postfix.service
发送邮件:
# echo '这是邮件标题' | mail -s "这是邮件内容" 9379963xx@qq.com
出现异常:
# send-mail: fatal: parameter inet_interfaces: no local interface found for ::1
查看centos中的postfix日志
# more /var/log/maillog
postfix: fatal: parameter inet_interfaces: no local interface found for ::1
# vi /etc/postfix/main.cf
inet_interfaces = localhost
inet_protocols = all
改成:
inet_interfaces = all
inet_protocols = all
重启:(安装哪个重启哪个)
# systemctl restart sendmail.service
# systemctl restart postfix.service