|
linux 发邮件最简单的办法
最近想通过linux监控系统状况并自动报警,一般Linux发送报警邮件通过本地邮箱或外部邮箱服务器,这里用最简单的方法实现linux 使用外部邮箱即可实现发送邮件功能,你只需简单注册个国内的邮件服务商邮箱,如163,也可以使用公司邮箱,需要安装mailx工具,mailx是一个小型的邮件发送程序。
具体步骤如下:
1、安装
[root@001 ~]# yum install mailx
2、编辑配置文件
[root@001 ~]# vim /etc/mail.rc #添加如下内容
set from=18911407172@163.com ---网易邮箱:
set smtp=smtp.163.com
set smtp-auth-user=18911407172@163.com
set smtp-auth-password=xxxx
set smtp-auth=login
---说明
from:对方收到邮件时显示的发件人
smtp:指定第三方发邮件的smtp服务器地址
set smtp-auth-user:第三方发邮件的用户名
set smtp-auth-password:用户名对应的密码,有些邮箱填的是授权码
smtp-auth:SMTP的认证方式,默认是login,也可以改成CRAM-MD5或PLAIN方式
3、测试
[root@001 ~]# echo "测试邮件" | mail -v -s "测试" 18911407172@163.com
以上已经实现了发邮件功能!!!
阿里云服务器关闭了22端口邮件就不能发送成功,修改465端口
2、163 个人邮箱设置 smtps 465
首先,开启 smtp
登录163个人邮箱 ——> 设置 ——> POP3/SMTP/IMAP
服务器地址:
POP3服务器: pop.163.com
SMTP服务器: smtp.163.com
IMAP服务器: imap.163.com
接着,配置 /etc/mail.rc
vim /etc/mail.rc
set from=yanggang@163.com set smtp=smtps://smtp.163.com:465 set ssl-verify=ignore set nss-config-dir=/root/.certs set smtp-auth-user=yanggang@163.com set smtp-auth-password=password-auth-code set smtp-auth=login
创建证书目录
mkdir /root/.certs
163个人邮箱的密码,不是邮箱密码,而是授权码
申请请参见米扑博客:POP3、SMTP、IMAP 的作用和联系 (163 邮箱授权码)
然后,ssl 授权,执行如下命令
完整的执行日志如下:
[root@mimvp-hz ~]# echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = GeoTrust Inc., CN = GeoTrust SSL CA - G3 verify return:1 depth=0 C = CN, ST = ZheJiang, L = HangZhou, O = "NetEase (Hangzhou) Network Co., Ltd", CN = *.163.com verify return:1 DONE [root@mimvp-hz ~]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt [root@mimvp-hz ~]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt [root@mimvp-hz ~]# certutil -L -d /root/.certs
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI
GeoTrust SSL CA C,, GeoTrust Global CA C,,
查看授权目录 /root/.certs/ 里的文件
# ll /root/.certs/ total 84 -rw-r--r-- 1 root root 2285 Jul 31 23:17 163.crt -rw------- 1 root root 65536 Aug 1 15:36 cert8.db -rw------- 1 root root 16384 Aug 1 15:36 key3.db -rw-r--r-- 1 root root 2594 Aug 1 13:43 qq.crt -rw------- 1 root root 16384 Jul 31 23:18 secmod.db
再次,smtps 加密发送邮件
mail -v -s "subject_title" 18911407172@163.com < /etc/passwd
# mail -v -s "subject_title" 18911407172@163.com< /etc/passwd Resolving host smtp.163.com . . . done. Connecting to 220.181.12.12 . . . connected. Error in certificate: Peer's certificate issuer is not recognized. Comparing DNS name: ".163.com" SSL parameters: cipher=AES-128-GCM, keysize=128, secretkeysize=128, issuer=CN=GeoTrust SSL CA - G3,O=GeoTrust Inc.,C=US subject=CN=.163.com,O="NetEase (Hangzhou) Network Co., Ltd",L=HangZhou,ST=ZheJiang,C=CN 220 163.com Anti-spam GT for Coremail System (163com[20141201])
更多邮件修改详细参照 https://www.jianshu.com/p/ccc2b8d7f08d
有一台机器无法发送邮件错误信息如下:
send-mail: warning: inet_protocols: IPv6 support is disabled
解决方式如下:
查看协议信息
/usr/sbin/postconf | grep inet_protocols inet_protocols = all
修改如下:
vim /etc/postfix/main.cf
inet_protocols = all 修改为 inet_protocols = ipv4
然后重启postfix
/etc/init.d/postfix restart
即可
第二种方法
[root@linux115 ~]# service postfix restart 关闭 postfix:[失败] 启动 postfix: [确定] [root@linux115 ~]# service postfix status master 已死,但 pid 文件仍存
问题原因: 在/var/lib/postfix/里面有个 master.lock 的文件,可能也需要改一下拥有者和组、权限的问题
解决方法: [root@linux115 postfix]# ll -rw-------. 1 root postfix 33 3月 18 22:07 master.lock
[root@linux115 postfix]# chown postfix:root /var/lib/postfix/master.lock [root@linux115 postfix]# chmod 660 /var/lib/postfix/master.lock
[root@linux115 sbin]# service postfix start 启动 postfix: [确定] [root@linux115 sbin]# service postfix status master (pid 8716) 正在运行...
1) 无邮件正文
mail -s "主题" 收件地址
% mail -s "测试" 1968089885@foxmail.com
2) 有邮件正文
- mail -s "主题" 收件地址< 文件(邮件正文.txt)
% mail -s "邮件主题" 1968089885@foxmail.com < /data/findyou.txt
- echo "邮件正文" | mail -s 邮件主题 收件地址
% echo "邮件正文内容" | mail -s "邮件主题" 1968089885@foxmail.com
- cat 邮件正文.txt | mail -s 邮件主题 收件地址
% cat /data/findyou.txt | mail -s "邮件主题" 1968089885@foxmail.com
3) 带附件
- mail -s "主题" 收件地址 -a 附件 < 文件(邮件正文.txt)
% mail -s "邮件主题" 1968089885@foxmail.com -a /data/findyou.tar.gz < /data/findyou.txt |