照片:Brett JordanonUnsplash
作为一个后端开发者,我们都会遇到需要从服务器向客户端发送邮件的情况。在这篇文章中,我将向你展示如何在Node.js中使用nodemailer来实现。
一旦你掌握了这些知识,将你学到的东西应用到你的Express服务器上应该是小菜一碟。(剧透:只要把代码放在Express路线中的一个地方)
什么是nodemailer?
nodemailer是一个节点包,它使在Node中发送电子邮件变得更加容易。
首先,我们来谈谈协议
就像Web服务器遵循HTTP来通信信息一样,电子邮件通信也有协议。
- SMTP,简单邮件传输协议,是一个在互联网上发送 电子邮件的准则集合。它是我们在本文中要使用的协议。
- IMAP,互联网信息访问协议,是一套用于从服务器接收 电子邮件的准则。日期、发件人和主题最初从服务器下载,而内容只在用户打开邮件时下载。
- POP3,邮局协议,是一套用于从服务器接收电子邮件的准则。3代表版本三,是这个标准中使用最广泛的版本。POP3以其对互联网连接的低依赖性而闻名。它将电子邮件从服务器传输到客户端,因此,即使我们没有连接到互联网,我们也可以阅读电子邮件。
如果你对更详细的比较感兴趣,请查看 IMAP vs POP3 vs SMTP - 最终比较.
实施
我发现nodemailer的实现是非常简单的。所以就直接看一下代码吧。
这并不可怕,对吗?
值得你注意的事情
Gmail提供了免费的SMTP服务,但也有不足之处
如果你有一个Gmail账户,你可以直接用这个账户来使用nodemailer。然而,这样做有几个缺点。
首先,外发邮件是有限制的。每天500封,每个收件人算作1封外发邮件。
第二,Gmail有一个更安全的认证。当你把你的代码推向生产时,生产服务器很可能不在你现在所在的地方。它可能在一百英里之外,或者在不同的国家。谷歌会检测到这种位置差异并阻止这种调用。因此,不建议在生产中使用Gmail。(反正我们可以用它来学习)。
在生产中,我们经常求助于提供邮件发送服务的公司,比如SendInBlue和MailChimp。
最后,你可能需要从google账户中心配置App Code,作为nodemailer的认证密码。否则,你很可能会看到错误信息。不接受用户名和密码。
端口25、467、587、2525可以作为通信端点使用
然而,467端口已经过时了,25端口经常被云服务提供商和ISP封锁。
这给我们留下了端口587和2525。前者使用最广泛,而后者通常在587端口不可用时作为替代。