linux 发送外部邮件
原始链接
http://www.51xpage.com/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86/2015/12/10/dao-ting-tu-shuo-linux-xi-lie-9-fa-song-wai-bu-you-jian
1、问题提出
希望通过脚本发送邮件,起因是zabbix里面有个地方需要发邮件。而它在Web上提供的方式比较简单,smtp服务器和helo啥啥啥的,在现在安全连接的时代,显然是不够的,可配置的项很少。好在它提供了另外一种方式,即采用脚本发送的方式。
2、尝试过程
根据以往Domino的经验,通常是一来就把sendmail干掉了,发送邮件不能随便一个服务器,马上就被当垃圾邮件被拒信了,而且就算弄个MX记录也麻烦,整个黑名单啥的。所以比较靠谱的方式,还是利用现有的服务器来发,注册一个免费邮箱。
2.1、停止 sendmail 和postfix
service sendmail stop
chkconfig sendmail off
service postfix stop
chkconfig postfix off
2.2、使用mail/mailx发送邮件
通过
rpm -qa|grep mailx
命令可以看到系统是否安装了mail。不过发现mail和mailx在centos 7下面是一样的
见识了一下 echo命令,这大概就是Linux系列的强大之处吧,用echo就发邮件了。
echo -e "Email content" | mailx -v -s "Email subject" -S smtp-auth=login -S smtp=smtp.163.com -S from="username@gmail.com(John Doe)" -S smtp-auth-user=test@163.com -S smtp-auth-password=passw0rd recipient@some.com
2.3、使用mail.rc
用上面的命令行确实可行,但是配置有点乱,所以还有个解决方案是把配置放到 mail.rc里面去
# vim /etc/mail.rc
set from=test@163.com set smtp=smtp.163.com set smtp-auth-user=test set smtp-auth-password=password set smtp-auth=login
发送邮件的时候,使用
echo "内容" | mail -s " 标题" sendto@163.com
如果碰到需要多个smtp账号就无法处理了,其实它还有另外一种做法。
accout 163 { set from=test@163.com set smtp=smtp.163.com set smtp-auth-user=test set smtp-auth-password=password set smtp-auth=login }
相应的,发送命令也需要做调整,如下
echo "内容" | mail -A 163 -s " 标题" sendto@163.com
即,这里多了一个 -A 参数
2.4、发送smtps邮件
用上面的方法无法实现发送带安全验证的邮件。找到参考资料的里面的老外的做法。
account exmail {set ssl-verify=ignore set nss-config-dir=~/.cert set from=jenkins@yaomaitong.cn set smtp=smtps://smtp.exmail.qq.com:465 set smtp-auth-user=username@qymail.com set smtp-auth-password=s0m3p@zzW0rD set smtp-auth=login }
类似这样的,但是会报错,
#echo "内容" | mail -A exmail -v -s " 标题" sendto@163.com Resolving host smtp.exmail.qq.com . . . done. Connecting to 163.177.72.143:465 . . . connected. Error initializing NSS: Unknown error -8015. "/root/dead.letter" 11/300 . . . message not sent.
可以理解成是没有证书文件,老外的做法是获取生成证书文件。
- 生成证书
mkdir ~/.certs && certutil -N -d ~/.certs
1 |
这个时候会发现,下面生成了几个key和cert文件 |
- 获取qq邮箱证书
echo -n | openssl s_client -connect smtp.exmail.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/exmail.crt certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/exmail.crt 这里的 GeoTrust SSL CA,是打开 https://exmail.qq.com,然后点开看, exmail.qq.com 上一级证书的名字,实际测试发现,其实根本也没关系
- 发送测试
#echo "内容" | mail -A exmail -v -s " 标题" sendto@163.com Resolving host smtp.exmail.qq.com . . . done. Connecting to 163.177.72.143:465 . . . connected. Error in certificate: Peer's certificate issuer is not recognized. Comparing DNS name: "mx3.qq.com" Comparing DNS name: "mx2.qq.com" Comparing DNS name: "mx1.qq.com" Comparing DNS name: "mxbiz1.qq.com" Comparing DNS name: "mxbiz2.qq.com" Comparing DNS name: "imap.qq.com" Comparing DNS name: "smtp.qq.com" Comparing DNS name: "pop.exmail.qq.com" Comparing DNS name: "imap.exmail.qq.com" Comparing DNS name: "smtp.exmail.qq.com" SSL parameters: cipher=RC4, keysize=128, secretkeysize=128, issuer=CN=GeoTrust SSL CA - G2,O=GeoTrust Inc.,C=US subject=CN=pop.qq.com,OU=R&D,O=Shenzhen Tencent Computer Systems Company Limited,L=Shenzhen,ST=Guangdong,C=CN 220 smtp.qq.com Esmtp QQ Mail Server >>> EHLO iZ23458bi3lZ 250-smtp.qq.com 250-PIPELINING 250-SIZE 73400320 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN 250-MAILCOMPRESS 250 8BITMIME >>> AUTH LOGIN 334 xxxxxxx >>> xxxxxxx 334 xxxxxxx >>> xxxxxxx== 235 Authentication successful >>> MAIL FROM:<51xpages@ymtest.cn> 250 Ok >>> RCPT TO:<51xpages@ymtest.cn> 250 Ok >>> DATA 354 End data with <CR><LF>.<CR><LF> >>> . 250 Ok: queued as >>> QUIT 221 Bye
3、最终方案
其实应该来讲,用上面的方法就可以了。但是当时没有配置成功,所以采用了另外的办法。 找到一个装了 firefox的电脑,把~/.mozilla/firefox/xxxxxxxx.default/ 的 cert.db 与 key.db 拷贝到 ~/.certs文件夹下。效果居然是一样的。
4、几个问题
因为是给zabbix用的,是一个单独的nologin账户,但是测试的时候,是在root用户下做的,通了,但是zabbix无法发邮件,后来发现问题出在 certs路径上,它指向的是当前用户的 .certs文件夹。 然后拷贝过来,发现另外一个问题,权限不对,zabbix没有 r权限,都是root用户的
Error in certificate: Peer’s certificate issuer is not recognized.
不加v参数会有这个问题
Error in certificate: Peer’s certificate issuer is not recognized.
5、参考资料
- 采用sendmail,基本不考虑 http://yyzll.blog.51cto.com/4283444/1541890
- 外国人的 https://coderwall.com/p/ez1x2w/send-mail-like-a-boss
- 发非smtps哟就http://coolnull.com/2614.html
- http://blog.sina.com.cn/s/blog_56ae1d5801019hlr.html
参数说明
-r 指定发件人 -c 指定抄送人 -b 指定密送人 -s 邮件主题 -V 显示版本 -v 发送过程 多个收件人之间用逗号分隔
转载于:https://www.cnblogs.com/yp2017/p/9118521.html
linux 发送外部邮件相关推荐
- SAP 发送外部邮件(增加到邮件队列)
*********************************************************************** * System name : MM ...
- linux通过mail命令发送到外部邮件
* 本章主要讲解利用mail命令发送到外部邮件,不包括接受邮件,如果要收发邮件需要搭建邮件服务器比如安装sendmail软件 1.如果没有安装mail 使用yum -y install mailx 2 ...
- Linux Shell脚本专栏_Linux系统发送告警邮件脚本_02
文章目录 一.Linux系统发送告警邮件脚本 1. 安装mailx工具 2. 编辑mailx配置文件 3. 追加以下内容 4. 发送邮件测试 二.异常汇总 2.1. 异常信息 2.2. 开启授权码 一 ...
- linux如何发邮件到外部邮箱
linux如何发邮件到外部邮箱 使用linux时,有时我们想发邮件给朋友或同事,可不可以通过命令行直接发呢? 想通过linux监控网站或者系统状况并自动报警,如何使用脚本发出邮件给外部邮箱呢? 不需要 ...
- 使用hutool发送QQ邮件在windows正常,linux发送报错。
在使用Hutool工具进行QQ邮件发送的时候,在windows下邮件发送正常,但是在linux下邮件发送失败,经过各种定位分析,最终找到问题的根源,在linux下发送邮件需要开启SSL验证.如果未开启 ...
- linux shell 发送email 邮件
方法一:简单邮件发送 echo 'hello world' | mail -s "Subject" -t yanggang@ithomer.com,yanggang_2050@1 ...
- Linux下通过mail发送qq邮件出现连接超时的情况
Linux下通过mail发送qq邮件出现连接超时的情况 一.一般来说都是smtp的地址配置错误: 之前配置过的地址有: 1) set smtp=smtp.qq.com 2) set smtp=smtp ...
- Linux CentOS7 发送 QQ邮件 问题 解决方案
环境: CentOS 7+ QQ企业邮箱: smtp.exmail.qq.com #POP3/SMTP协议 接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995 发送邮件服务 ...
- Linux中Postfix邮件发送配置(三)
部署DNS服务器 postfix根据域名和地址做一个MX记录,A记录,PTR记录(一般在互联网上邮件服务器都要反解,没有PTR记录会认为是垃圾邮件) $ service iptables stop $ ...
最新文章
- 码农们不得不重视的问题
- js中的Object.create(null) 和 {} 的区别
- Kafka基础系列第1讲:Kafka的诞生背景及应用
- python显示no matching distribution,Python使用pip安装No matching distribution found for PyYaml==5.3.1...
- nginx安装与项目发布
- python中文版软件下载-Python中文版下载_PyCharm官方最新版下载_3DM单机
- python-学生管理系统--9-整体代码
- 【领域建模】UML类图工具推荐
- matlab设置柱状图空白,MATLAB画柱状图时形状填充及颜色改变问题
- 树莓派python识别二维码_树莓派识别二维码
- 理解Kademlia协议原理
- python读取xlsm文件_在保留VBA宏的同时使用熊猫读取和更新XLSM文件中的图纸 - python...
- 少儿编程启蒙课程9:善用变量 拥抱变化
- 【PHP】PHP与Web界面交互
- 关于:复杂是软件的死敌
- 《教妹学数据库系统》(五)逻辑数据库设计(上)
- SQL中的布尔型变量
- Idea中Git和SVN如何切换
- html文件无法访问
- android 摄像头画面竖,OpenCV for Android(5):竖屏摄像头旋转问题
热门文章
- JAVA实现创建Excel表并导出(转发)
- 在Visual Studio 2013里使用 Microsoft SQL Server Compact Edition
- Effective C++ 条款44
- STL之Iterator(迭代器)
- Nginx服务系列——代理
- PYPL 二月榜单发布:最受欢迎的编程语言、IDE 和数据库都是哪些
- 2、python机器学习基础教程——K近邻算法鸢尾花分类
- Faiss优化:针对OMP_NUM_THREADS环境变量设置的测试验证
- 关于PChar(@string)的疑惑
- 《影响力》承诺和一致原理深入剖析,人们对自己的选择是很相信的