如何验证 Email 地址:SMTP 协议入门教程 ubuntu mail 用 qq 邮箱发邮件
我先尝试在我的mac上发送,先是找到了sendmail相关的介绍,然后找到了mac自带的postfix类似于sendmail,于是研究postfix,将近一天的时间我经历了各种配置与失败。
晚上下班的路上,看了阮一峰的smtp介绍,了解到smtp服务器的身份验证是为了防止垃圾邮件,为了控制垃圾邮件,许多邮件服务器会用自己的方法验证邮件地址,下面就是其中的一些方法。
- example.com 是否有 MX 记录
- example.com 是否可以 Ping 通
- 是否存在 [email protected] 这个邮箱
- 发起连接的 IP 地址是否在黑名单之中
- IP 地址的反向 DNS 解析,是否指向一个邮件服务器
qq邮箱也许用了其中某些方法,使用mac链接smtp的话,135应该都是不能通过的,所以导致了在mac上mail失败。具体什么原因导致的不能成功就不深究了。
由于得知了上面的信息,于是尝试用我的云服务器来实验一下,因为云服务器可以ping,有MX记录。正好还发现了一个ubuntu发邮件的文章。步骤如下:(以下主要是某网友的博文)
先用 which mail
看看有没有 mail
。
如果没有的话,可以安装如下软件:
sudo apt-get install -y heirloom-mailx
有了 mail
后,直接用命令行测试
echo "mail body" | \
mail -v \
-r [email protected] \
-s "subject" \
-S [email protected] \
-S smtp-auth-password=密码或授权码 \
-S [email protected] \
-S smtp-auth=login \
-S smtp-use-starttls \
-S smtp=smtps://smtp.qq.com:465 \
-S ssl-verify=ignore \
[email protected]
在配置文件里面配置账号,首先找到相应的配置文件:
strings `which mail` | grep '\.rc'
sudo vim /etc/s-nail.rc
在文件尾部添加:
|
|
然后测试:
echo "mail body" | mail -s "subject1" [email protected]
至此,我的qq邮箱可以成功接收到邮件。这件事总算有了结果。
发送邮件虽然能成功,但是我的命令行会打印一个警告
mail: /usr/local/openssl/lib/libssl.so.1.0.0: no version information available (required by mail)
经查,及尝试。将警告的2个文件移除即可,也可以改名字:
mv /usr/local/openssl/lib/libssl.so.1.0.0 /usr/local/openssl/lib/libssl.so.1.0.0_bk
之后再发邮件就一切顺利了。
事情有了新的进展:2019年1月7日。
我又想,为什么mac的邮件app可以发送而命令行却不行吗?应该都是用的SMTP方式来发送邮件的。那么可能还是我配置SMTP参数的问题。
经过搜索了解到,mac的命令行mail是一个旧版的,新版的叫heirloom-mailx或者s-nail。
我通过Homebrew安装了s-nail,将上面测试代码的mail换成s-nail是可以发送邮件的,但是同样的写s-nail.rc后,却不能发送邮件。而且看了man s-nail以后还是不会写抄送参数的配置。
上面的这个过程又消耗了我一天的时间,直接使用s-nail的人似乎很少,没有查到一个能运行的例子,这一天就在各种搜索、配置、测试中度过了。后来又想到安装mail的新本的二进制文件来更新mail似乎也是个办法。但是想到还要重新配置还是很麻烦。就放弃了。
今天早晨坐地铁时想到,shell不行,那就试试python吧。到公司后,在stackoverflow上找到了一个例子,修改smtp地址,账号密码,加上抄送字段。整个过程差不多半个多小时,顺利的发出了邮件🥳🤙🕺💃🎉🎊
幸甚至哉,歌以咏志。
真的惊喜,我真是太蠢了,傻了吧唧地折腾了4天的,最后用python半小时就解决了。
最后奉上python发送邮件的代码:
|
|