1 问题背景
背景:生产环境中电商项目使用mailgun账号发送邮件,邮件退信率很高。临时加班搞了一个邮箱域名黑名单功能,如果mailgun发送邮件失败,那么将下一次发送如果识别出是该收件人,则不发送邮件,本质就是做了一个mailgun收件人黑名单。
解决方案:使用XXL-JOB定时调度拉取mailgun发送失败的收件人名单,维护到数据库里面。发送邮件时先去缓存查一下收件人是否是黑名单里面中的一员,查不到则去数据库查,仍查不到表示该收件人可能是第一次发送导致不存在发送失败的记录或者不是黑名单。查到则缓存到Redis。
效果:退信率是降低了,但效果不明显
第2次解决方案:看了mailgun收件人黑名单的数据库记录(落库时持久化了发送失败的原因,此处可以看出作用了,也可以作为有力的证据去回复上级或业务方的疑问),有很多都是说邮箱域名NOT FOUND。基于此,考虑是否能通过解析收件人的邮箱域名,如果解析失败则表示不存在该邮箱域名,那么就不发送邮件,并且记录一个统一的报错信息表示”邮箱域名不存在“,进而持久化到mailgun收件人黑名单。
需求:因此产生了一个需求,邮箱域名的解析,或者说判断邮箱@
后面的域名是否真实存在
2 前言
本博客阐述的都是电商生产环境上发生的真实场景,不是那种八股文或者自学的小demo
3 域名
在了解a记录,cName记录前,需要了解域名这个东西
目前域名可以在各大厂商购买,比如阿里云。购买完域名后,可以在厂商提供的域名管理控制台进行配置。能配置什么呢?就是配置a记录、cName记录等。
4 A记录
互联网上每一个网络主机都有一个网络标识,那就是IP,但是IP是数字格式,不便于人们记忆,也不便于管理。因此域名出来了。但是我输入一个域名,网络路由是怎么知道该域名是指向哪一个IP的呢?那就是a记录。
A记录本质上是一个映射关系,记录了该域名指向哪一个IP地址。一般都是在购买域名的厂商的域名控制台那里配置a记录。比如我买了一个域名ganzalang.com
,我自己有一个IP为172.28.13.222
的阿里云服务器。我在域名控制台配置了一条a记录,内容是域名ganzalang.com
指向IP172.28.13.222
。这样,我在浏览器输入 ganzalang.com
时,DNS服务器解析的时候,就会找到我的a记录,它就会知道要访问172.28.13.222
。配置a记录的时候还可以设置缓存时间,一般是指缓存在DNS服务器的时间。因此我们在修改a记录后,一般要过了这个缓存时间才会生效。
5 CNAME记录
场景1:如果我广告投放
ganzalang.com
,可能很多人都觉得他不是一个正规的网站,所以基本不会信任该网站上面的任何内容,这就导致了我钱花出去了(投放广告),但是收益却极低。很多人认为带www.
前缀的域名比较官方,那么是否可以将大部分的资金投放到www.ganzalang.com
的域名,此时就需要使用CNAME记录,将子域名www.ganzalang.com
指向ganzalang.com
域名
场景2:京东初期的域名为360buy.com
,后面更换成jd.com
,那么当用户访问360buy.com
的时候就需要将自动为其跳转到jd.com
域名
CNAME记录就是将不同的域名指向同一个域名。例子如上面2个场景所示。与A记录一样,CNAME记录也能设置缓存时间,但CNAME记录的值是一个域名,而不是一个IP。
6 MX记录
场景:给
pengyuyan@pengyy.com
的用户发邮件。此时会通过 DNS服务器查找pengyy.com
的MX记录。再通过该MX记录的值,去查找该值的A记录,最终就找到目标服务器的地址了。
MX记录用于定位邮件服务器的地址。该记录的值是一个域名。
7 总结
- A 记录:设置域名到 IP 的映射
- CNAME 记录:设置域名到域名的映射
- MX 记录:设置邮件服务器的映射