如何为 Node js 应用程序设置 SMTP 服务器来发送接收邮件?

nir*_*tel 2 email smtp node.js

我正在创建一个 Node js 应用程序,我需要在其中发送和接收电子邮件。我想为这个网络应用程序的每个用户创建一个自定义电子邮件,例如 myname@mycompany.com。如何使用 SMTP 服务器以编程方式创建它?

还想通过 SMTP 服务器发送和接收电子邮件。对于 SMTP 服务器提供商以编程方式实现此目的有什么建议吗?

907*_*997 10

总览

如果您希望您的应用程序是独立的,则它需要充当 SMTP 客户端来直接向收件人发送电子邮件,并充当 SMTP 服务器来接收电子邮件。如果您想使用提供商,Amazon SES是一个可靠的产品。

您可能对 SMTP 有误解

在 SMTP 中,客户端(发起连接的客户端)始终是电子邮件发件人,而服务器始终是收件人。SMTP 在两种情况下使用,但从根本上来说,发生的事情是相同的,只是需要和不需要身份验证。

  • 第一个是用户向其电子邮件提供商发送电子邮件时。例如:我,Alice,使用 Gmail。我想发送电子邮件至 bob@yahoo.com。我首先通过 SMTP 将电子邮件发送到 Gmail。Gmail 的 SMTP 服务器是smtp.gmail.comsmtp.gmail.com需要身份验证。我使用 Gmail 用户名和密码进行身份验证。经过身份验证后,我可以从 alice@gmail.com 向任何人发送电子邮件。

  • 第二种是当一台服务器想要向另一台服务器发送电子邮件时。例如:我是 Gmail。我的一位用户 Alice 刚刚向 bob@yahoo.com 提交了一封电子邮件。我需要将该消息发送到负责 yahoo.com 域的邮件服务器,因此我查看MXyahoo.com 的记录。我看到 yahoo.com 列出了 3 个邮件服务器:mta5.am0.yahoodns.netmta6.am0.yahoodns.netmta7.am0.yahoodns.net。我应该priority先尝试值最低的那个,但是所有 3 个priority的 a 都是 1,所以我只是随机选择一个。我打开 SMTP 连接到mta7.am0.yahoodns.net. 该服务器不需要身份验证。我可以将任何人的电子邮件发送至anyone@yahoo.com。

SMTP 没有创建帐户的命令。事实上,SMTP 可以在没有帐户的情况下运行,就像 HTTP 可以在没有文件目录的情况下运行一样。

就 SMTP 而言,接收邮件的唯一方法是让 SMTP 服务器在端口 25 上侦听MXmycompany.com 记录中列出的地址。无法连接到另一个 SMTP 服务器并询问“给我 myname@mycompany.com 的所有电子邮件”。这就是 POP 和 IMAP 的用途。

如何做你想做的事

你有两个不同的问题。您需要能够发送邮件并且需要能够接收邮件。

  • 发送
    • 每当您需要向 foo@bar.com 发送电子邮件时,您都可以查找MXbar.com 的记录,打开到该服务器的 SMTP 连接,然后直接发送邮件。这样做的主要问题是尽量不要进入人们的垃圾邮件文件夹。这有几个技巧,但这是它自己的一个完整主题。
    • 您可以使用中间 SMTP 服务器,付费让其他人操作该服务器。SendGrid 和 MailGun 是此处的两个示例。就像Alice 连接到 时一样smtp.gmail.com,您可以连接到SendGrid 的SMTP 服务器。您可以向他们进行身份验证,但与 Alice 不同,Alice 只能从 alice@gmail.com 向任何人发送电子邮件,您可以从anyone@mycompany.com 向任何人发送电子邮件。SendGrid 将负责确保您的电子邮件不会成为人们的垃圾邮件。
    • 您可以使用其他一些非 SMTP API 来发送电子邮件。例如亚马逊 SES 。
  • 接收
    • 您可以操作 SMTP 服务器。如果您愿意,它甚至可以内置到您的节点应用程序中。您只需要确保您的服务器正在侦听端口 25,并且MXmycompany.com 的第一个记录(优先级最低的记录)指向该服务器。这可以让您在收到电子邮件后立即做出反应。这样做可能会收到很多垃圾邮件,因此请做好准备。
    • 您可以付费请某人为您操作 SMTP 服务器,并让他们将收到的电子邮件转储到可通过 POP 或 IMAP 访问的邮箱中。您将为MXmycompany.com 添加一条记录,指向该公司的 SMTP 服务器。您可以使用他们的 API 添加帐户。您可以通过 POP 或 IMAP 轮询新电子邮件(IMAP 支持通知,但它是一个更复杂的协议)。
    • Amazon SES 还支持接收电子邮件。

  • 我确实误解了 SMTP,但感谢您的澄清。但是,我希望我的应用程序像一个邮件服务器系统(一个类似 Gmail 的小型应用程序)。一旦有人在我的应用程序门户上注册,我就应该能够为他创建一封邮件,例如 name@mycompany.com。该用户可以通过该应用程序发送/接收/回复并将电子邮件转发给任何人。所以据我所知,我需要一个邮件服务器(可能像 Zimbra 或 iRedMail),它可以通过 REST API 使用。另一件事是邮件域名,我将根据该域名为注册用户创建新电子邮件。对于这样的邮件服务器有什么建议吗? (2认同)