一、问题情况
忽然发现以前同事写的监控邮件不报警了,结果是修改了对应的QQ密码造成了邮箱授权码过期,所以就简单看了一下关于邮件发送服务的测试。
QQ邮箱授权码说明:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
二、解决办法
POP3/SMTP服务授权码:POP3是离线邮件服务,等于可以通过这个把邮件全部下载到本地,本地的已读操作只会显示在本地,线上邮箱里状态不变。
IMAP/SMTP服务授权码:IMAP是互动邮件服务,相当于线上线下操作会互相同步,本地的已读会同步改变线上的邮件状态,而且可以只在本地邮件打开时才下载邮件。
这2种授权码对于SMTP邮件发送服务来说没区别,都是一样使用的。
看了下SMTP邮件发送服务是明文服务,使用起来比较简单。最省事的就是telnet,windows在控制面板/程序和功能/启用或关闭Windows功能Telent客户端选中安装即可
centos就直接:
1 |
yum install telnet |
安装完成以后
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#telnet后跟smtp服务地址,再跟端口 telnet smtp.qq.com 25 #出现220欢迎状态和提示语 #220 smtp.qq.com XMail Esmtp QQ Mail Server. #然后输入helo name表名身份,成功返回250.这个name有人说写使用邮箱的域名比如qq.com,有的说写自己的邮箱名,我测试下来,qq的smtp写什么都行,也许其他smtp可以用这个识别你用了哪个邮件服务,比如163.com和126.com的邮箱? #输入错误只能换行重新输入,无法退格键删除 helo qq.com #250-smtp.qq.com-9.46.31.207-96075871 #250-SIZE 73400320 #250 OK #再输入auth login表示验证登录,成功返回334,然后依次输入邮箱用户名和密码的base64加密字符串登录,qq的用户名可以是@qq.com前面的username内容base64,也可以是username@qq.com完整的内容base64 #base64网上有现成的工具,但是为了密码安全,可以直接本地生成,系统都自带了base64,没有就yum install coreutils下,然后echo -n '加密字符串' | base64 输出的结果就可以使用了,一定要带-n否则加密字符串结尾的==会变成o=造成登录失败 #验证成功返回235 auth login #334 xxxxxxxxxxxx username的base64字符串 #334 xxxxxxxxxxxx authorizationcode的base64字符串 #235 Authentication successful #下来就可以发送邮件测试了 mail from: <username@qq.com> --发件箱地址(收件人和发件人冒号后要加空格) #250 OK rcpt to: <targetname@qq.com> --收件箱地址 可多次添加 #250 OK DATA --开始添加邮件数据 #354 End data with<CR><LF>.<CR><LF> from:<username@qq.com> -- 发件人:可以随便写,邮件里看到的发件人名称,但是qq好像会检验如果不是你的邮箱或者邮箱别名,会提示发件人不一致中止发送 to:<targetname@qq.com> -- 收件人:可以随便写,收件人名称,这里的都是邮件的头部信息,而不是发送目标. subject:hello -- 主题:可以随便写,就是邮件标题 --空一行填写(回车过去,这行不空正文为空) hellosmtp --邮件正文 --空一行填写(回车过去,这行不空也可以) . --最后一行以.回车结束(这个点是结束的意思) #250 OK: queued as. --发送成功 quit #221 Bye. |
由于部分国内服务器封禁了25的出口,所以还可以试试使用587端口是一样的方式,465由于多使用smtps服务也就是ssl加密通讯,所以telnet不好操作,下来介绍一下swaks的使用,号称smtp的瑞士军刀
1 2 3 4 5 6 7 8 9 10 11 12 |
#安装swaks yum install swaks #直接使用命令发送测试邮件,交互模式输入用户名和密码(不用base64加密) swaks --to targetname@qq.com --from username@qq.com --server smtp.qq.com:25 --auth login #还可以直接写明用户名和密码(不用base64加密) swaks --to targetname@qq.com --from username@qq.com --server smtp.qq.com:25 --auth-user username@qq.com --auth-password authorizationcode #25端口不通还可以测试587端口smtp.qq.com:25改成smtp.qq.com:587,执行成功swaks会自动发送一份测试邮件出去 #如果25和587都不通,可以试试465端口,但是465端口一般都是smtps服务也就是ssl加密通讯,有的软件是要写协议头然后指定信任证书目录,swaks很方便,加个--tls-on-connect参数就可以 swaks --to targetname@qq.com --from username@qq.com --server smtp.qq.com:465 --tls-on-connect --auth-user username@qq.com --auth-password authorizationcode |
至此简单的SMTP测试完毕,swaks还有很多功能,需要的可以自己研究:https://raysnotebook.info/computing/email-smtp.html