昨天做了定时从线上数据库导出订单的脚本,并且发送附件通知,也遇到了一些问题:
Linux服务器mail程序本身就是调用sendmail来进行邮件发送的,sendmail服务器提供对外的邮件发送功能。CentOS默认不能发送邮件,所以要安装sendmail
yum -y install sendmail
安装后service sendmail start启动
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-cc 表示抄送发给谁
-bcc 表示暗抄送给谁
-o message-content-type=html 邮件内容的格式,html表示它是html格式
-o message-charset=utf8 邮件内容编码
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 邮件的内容
-a 要发送的附件
发送方式:
1:通过命令:
mail -s "test" liuhuidang@sf-express.com 回车输入邮件内容,ctrl+d确定发送,测试能否发送,但是发送失败了,查看/var/log/maillog
Dec 18 10:56:37 centos72 sendmail[76800]: vBI2ubXW076800: to=liuhuidang@sf-express.com, ctladdr=work (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30218, relay=[127.0.0.1] [127.0.0.1], dsn=4.0.0, stat=Deferred: Connection refused by [127.0.0.1]
据此可以得出问题所在:连接被本地[127.0.0.1]拒绝,这就应该是本地的localhost出了问题,查看/etc/hosts,看到有这么一行:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
删除它,然后重起sendmail:
service sendmail restart
再试一次,成功发送。
2:还可以通过管道写入邮件内容:
echo '邮件正文内容' | mail -s "邮件主题" liuhuidang@sf-express.com
3:使用文件进行邮件发送
mail -s "test" liuhuidang@sf-express.com < /etc/test.txt
发送附件示例:
echo '邮件正文内容' | mail -s "邮件主题" -a /home/work/odp_dlh/app/task/script/shops.csv liuhuidang@sf-express.com
使用sendmail -bp 或者 mailq 可以查看到邮件发送队列,里边会列出有几个邮件等待发送
友情提示:垃圾评论一律封号...