域名邮件收发,低成本网站用户登陆和通知方案

广告位招租
扫码页面底部二维码联系

大家好呀,最近接触的东西比较多,也比较杂,很难把所有东西都写出来。今天就主要聊一聊邮件收发这件事。

对于早期我刚开始玩互联网的时候,只知道邮件是用来沟通的,但随着接触的东西越来越多,开始认识到smtp能力,因为在wordpress后台,如果想要正常发邮件,往往会装一个wp-smtp插件来解决。再到后来,发现国外很多产品,通过邮件来进行营销。这里面有很多值得玩味的东西。技术层面,我们要理解一些重要的点,然后我们再来找低成本方案。

有哪些技术点?

首先,我们要知道,邮件其实是可以通过自己架设邮件服务器来实现邮箱服务的。而要架设自己的邮件服务也很容易,因为github上有很多开源的邮件服务项目,只需要在服务器上拉代码,装依赖,启动即可。这也就意味着,我们可以完全对网易邮箱、qq邮箱等去魅了,这些在国内经营多年的邮箱,也不过如此。

接收邮件则主要靠DNS解析。当我们从自己的邮箱发送一封邮件到另外一个邮箱时,邮件服务通过DNS找到目标邮箱的地址。而有些高级的邮箱服务,还会有“已送达”的回执,则是通过DNS与对方服务器建立了链接,就跟建立TCP连接一样。要让一个域名作为收邮件的地址,需要在DNS解析处增加MX记录类型。而添加DNS的MX记录,并不代表可以收到邮件,还需要邮箱服务器承接。这就是“域名邮箱”的由来。早些年,QQ邮箱是接受域名邮箱的,只需要在qq邮箱设置中登记,并按照提示设置MX解析,即可将域名直接与自己的QQ邮箱绑定。但通过这种绑定,只能让域名下的一个地址与邮箱挂钩,但是通常,我们需要一批不同名称的地址来执行不同的邮件功能,因此,这里就会衍生出一个生意:企业邮箱。

包括阿里云、网易都推出了企业邮箱。我们通过将域名的@的MX解析到企业邮箱服务,那么企业邮箱就托管了你的所有域名下的邮箱地址。同时,企业邮箱还承接了接受邮件的职责,你可以在企业邮箱看到接收的邮件。同时,企业邮箱从企业的角度设置子账号,划分各种权限,等等,这些都是应用层面的操作,和邮箱服务本身没有关系。

而发邮件则是另外一套逻辑。

邮件从一个邮箱发送到另外一个邮箱,第二个邮箱的接收如上所述,但是对于我们自己的邮箱服务,发是怎样的一个过程呢?简单来讲,就是DNS寻址,以及邮件协议的执行过程。作为一个发送邮件的服务,你需要能够通过DNS找到目标邮箱地址的投送网络地址。

邮件发送从成本上看要比接收要高很多。

发送不仅要寻址,还要提供前端的各种操作,还要能够准确的投递和反馈。最令人头疼的是,还要避免投递的邮件被丢入垃圾邮箱。这里面包括了协议、加密DKIM、DMARC、SPF等等知识。总之,发邮件的难度似乎比收要高很多。当然,企业邮箱作为一个整体,是包括了收和发的。

国外对邮件发送的需求非常大,特别是营销推送这个点上,国外公司特别喜欢用邮件。这就形成了一个专门做邮件推送的产业链,从邮件地址的收集、邮箱用户的精准匹配,到专门的邮件营销推送服务,技术层面,催生了专门提供发送(营销)邮件的服务商。我们下文也会专门提到这类服务商。这门生意,在国外可是一门大生意,对于做海外市场的国内企业,也应该会接触到这个行业。因此,发邮件在国外(包括国内,但是国内这样的服务商少)价格反而非常高。这对我们几十年来一直使用免费邮箱服务的普通用户而言,是无法理解的,怎么发个邮件还要每个月几十刀呢?其中的根源就在于,国外的企业和用户之间,通过邮件来联系得更加紧密。而由于这种关系的存在,发邮件的需求大,定制化程度也更高,比如只有国外才把邮件分为推广、社交之类的分类,gmail常年在邮件列表顶部挂着广告,因此才让服务商们把发邮件的定价搞的这么贵。

域名邮箱代收和代发

我们拥有自己的域名之后,希望用自己的域名来作为邮箱后缀。然而转了一圈发现,国内的各家邮箱都抠抠搜搜的,阿里云和网易都有非常有限的免费企业邮箱,腾讯以前有现在直接搞付费,而且各家的付费企业邮箱都非常高。我想这和国内环境的变化有关,以前大家用邮箱用的还挺多的时候,大家还没有意识到邮件营销,而现在大家都用微信了,各家服务商反而意识到邮箱的重要性。

因此,我们需要找其他的解决方案来实现我们用自己的域名作为邮箱后缀的目的。

邮件路由

邮件路由简单讲就是代收。有很多服务商可提供,包括outlook本身也是。接下来我会以cloudflare的邮件路由功能为例子,让你理解代收的实现原理,以后你就可以选择自己心仪的类似服务。

邮件代收的前提是,首先你要有一个自己的邮件阅读面板,你需要有一个承接邮件的地方。通常,我们会用outlook或者直接上qq邮箱。就以我们qq邮箱为例,我们希望有人往我们自己的域名邮箱mail@example.com发邮件时,我们会在自己的qq邮箱123@qq.com收到这封邮件。这就是邮件代收。

那么我们要怎么配置我们的域名,才能做到这一点呢?

如果是早期,qq邮箱还支持域名邮箱的时候,我们只需要在qq邮箱设置中先登记,然后将域名的MX记录解析到腾讯的DNS地址上,即可立即完成。然而现在qq邮箱已经去掉了该功能。现在,我们只能通过第三方来实现。

首先,我们需要先到cloudflare管理面板中登记自己的域名。登记好域名之后,在域名管理下有一个“电子邮件>电子邮件路由”的功能,在这里开启这个功能,即可在完成邮件代发的登记步骤。当然cloudflare希望你把域名的DNS服务托管到它这里来,这样,你的各种DNS的操作,它可以帮你自动完成,这样方便很多。是否托管,凭你喜欢。

接下来,增加域名的MX记录到cloudflare的DNS地址上。如果托管了DNS,则它会自动帮你生成,你只需点一个按钮即可。如果你自己解析,则需要认真填写它所提供的MX和TXT记录。这里的TXT记录有另外的用,下文解释。

完成DNS解析之后,再到它的路由规则里面配置,这个时候就可以配置当mail@example.com收到邮件时,实际要让邮件发给123@qq.com。

如果一切顺利,你完成配置后,往上述域名邮箱发邮件,就可以在qq邮箱看到邮件内容。

上述整个过程,实际上cloudflare完成了代收和转发的过程。MX记录让它可以代收邮件,同时,它背后又有另外一套系统,当收到邮件之后,立即按照路由规则里面配置的,把邮件转发到配置的目标邮件地址,这样,它可以在不保存邮件的同时,完成用户收邮件的过程。

邮件代发

当我们使用outlook桌面客户端登陆163或qq邮箱后,outlook就可以帮我们代发邮件。它依赖POP、IMAP、SMTP三种协议中的一种完成代发,这三种协议需要用户原来邮箱服务支持。用户使用outlook客户端,实际上是把邮箱服务商提供的协议密码提交给了outlook。

还有一种代发是不需要用户原来的邮箱服务同意,直接“冒名”顶替了原来的邮箱地址,进行邮件发送。我们可以在outlook网页端实现这种代发。也就是说,如果我们技术上能力足够,可以伪造任何邮箱地址进行邮件投送。那岂不是很多假邮件会出现?黑客不是可以用来伪装成官方,发送一些带病毒的邮件了?是的。事实上也是如此,全球每年有很多类似的入侵事件,经济损失达到上百万美元。

为了解决这种问题,各家邮件服务商在收邮件的环节尽可能的避免收到冒名顶替的邮箱地址发来的邮件。怎么做呢?就是在域名的DNS配置中,新增TXT记录,提供DKIM、DMARC、SPF信息,当邮件服务器收到邮件寄来时,还会验证发送该邮件的地址DNS配置中的信息,并通过加密解密算法进行验证。由于冒名顶替的邮箱无法拿到原主人邮箱的加密密钥,所以无法提供对应的验证信息,也就无法提供与DNS中TXT记录内匹配的信息,接收邮箱就会拒绝或将邮件丢到垃圾、风险中。

因此,我们可以看到,在cloudflare的DNS配置处,我们提供了三条TXT记录,这是因为,cloudflare在接收到邮件之后,要立即做一个转发动作,而转发实际上又是向目标地址投递邮件,因此,在cloudflare和qq邮箱之间,需要做这个加密验证,这样qq邮箱就可以确认,邮件是由正主发过来的,不是冒名邮箱。

在理解这一点之后,我们也就理解了,其实对于发邮件而言,我们本质上不需要做任何DNS的处理。如果没有安全性的考虑,我们只需要架设一台邮件服务器,然后就可以用任何域名邮箱向任何邮箱发邮件。而邮件代发,就是在这个基础上,做了安全性的应用,能够让我们发出的邮件是合法的安全的可被其他邮箱接收的。

发邮服务

outlook代发好歹还要提供给用户一个发邮件的界面,而更多的服务商,连个界面都不需要。这类服务商的主要目的,就是给客户提供发邮件的服务,而这个服务是被集成到客户的系统中的,因此,不需要提供发邮件界面。当然,作为发邮服务,他们也心安理得的不提供接收邮件的功能和界面。也就是说,用这些服务,只能(无界面)发邮件,不能收邮件。

而更扯淡的是,这类服务收费还是最贵的,同时,不比企业邮箱要提供那么多功能,这类服务的收费可以按量收费,套路还更多。

不过,它们也真的是刚需。对于企业而言,没有它们还真不行,因为对于企业邮箱而言,在起步阶段它们还是相对来说价格低些。

通常,发邮服务提供如下功能:

  • SMTP代发服务,开发者通过连接到它们的smtp服务器来发邮件
  • API/graphql代发服务,开发者通过auth认证向它们的接口提交要发的邮件信息,由它们的服务将邮件发出
  • webhook服务,开发者可以通过它们的webhook了解邮件的发送情况,比如是否已经得到了发送成功的回执

其中,SMTP比较常用,可以被集成到非常多系统中。API方式则更符合现代编程习惯,把发邮真正理解为一项服务。

域名收发闭环

我们想把域名邮箱集成到系统中,作为系统通知用户和沟通的手段,那么就要完成收发闭环。在发阶段,我们通过发邮服务将信息发送到用户的邮箱,我们可以选择SMTP,也可以选择API,只要能把邮件顺利送到用户邮箱即可。在收阶段,我们通过邮件代收,让用户向我们发邮件时,可以被接收到。一般,我们只会设立2-3个可接收的地址,但是发的地址,可能根据系统模块不同而不一样。而且,收和发的邮箱地址,是可以重复也可以重复的,两者本质上没有必然联系。比如,我们通过no-reply@example.com和service@example.com这两个邮箱地址发出邮件,但是,no-reply并没有配置代收,因此,用户只能往service发邮件,而无法向no-reply发邮件。

低成本网站用户邮件登陆和通知

我们开发的网站需要有一个用户系统,其中如何确认用户的身份呢?国内大部分网站都是基于SMS(短信)验证码来做,因为普遍意识里SMS是实名制的。但是国外的网站很多都是基于邮箱来完成,因为SMS成本相对较高,隐私性差,而邮件在国外更通用,技术成熟,隐私安全更高。而我做的网站都有全球视野,因此考虑成本更低但通用性不错的邮件登录方案。

  • 在接收用户邮件方面,我用cloudflare将邮件转发到qq邮箱,这样,即使我有多个域名,最终也只有一个接收到用户发来邮件的地方。
  • 当我要回复用户邮件时,我则使用outlook网页版的代发功能,通过outlook来实现有界面的发邮件。
  • 在系统发送邮件时,我使用了smtp2go的免费版,通过smtp协议发送。

之所以选smtp2go,是因为我在一篇博客中看到它的稳定性评分最高,而且它的免费版有1000封/月,超出后$1/1k封,感觉还是可以接受的,等到我的用户量超过这个限额之后,我想我也应该不屑于这1刀了。

除了smtp2go,还有postmark, mailersend, mailjet, sendgrid, brevo(sendinblue)这几家的评分都还可以,不过它们的价格各有特色,没有哪个最好。另外,我在社区还看到几个人推荐了resend,不过我看价格不怎么样呀,总之还是作为备选。

结语

这篇文章用轻松的语言,向你解释了邮件服务,在此之前,其实我自己也未能理清楚其中的逻辑,直到我自己需要用到这些服务来解决自己的网站问题时,才有了深入的理解。如果你也和我一样,正在用邮件将系统连接用户,可以考虑我所提到的方案。如果你有什么问题,也可以在下面留言区与我交流。我们下一篇再见啦~

2025-03-18 102 , ,

为价值买单,打赏一杯咖啡

本文价值1.02RMB