【问题标题】:How to set up SMTP server in NATIVE nodeJS -- no dependencies whatsoever如何在 NATIVE nodeJS 中设置 SMTP 服务器——没有任何依赖关系
【发布时间】:2020-08-15 10:32:33
【问题描述】:

我看过很多关于设置 nodejs 以使用预先存在的 smtp 服务器的博客和堆栈溢出问题,尤其是通过 nodemailer 等模块。我已经看到了一些:

https://www.zeolearn.com/magazine/sending-and-receiving-emails-using-nodejs

Use smtp client to send email without providing password

How can I create a custom smtp server to send out notification emails in Nodejs?

Sending emails in Node.js?(不知道为什么关闭)

Use smtp client to send email without providing password

Nodemailer with Gmail and NodeJS

Nodemailer send email without smtp transport -- 这是一个小点更接近我想要的

How can I create a custom smtp server to send out notification emails in Nodejs? -- 这个很接近但没有答案

Sending email via Node.js using nodemailer is not working

SmtpJs API not working! is there any way to send emails using SMTP server with JavaScript or JQuery

Email NodeJS cannot send

Any suggestion for smtp mail server in nodejs? -- 这可能是唯一一个甚至试图回答它的人,尽管从docs 那里提到的服务(smtp-server),我看不出它的实际成分在哪里SMTP 服务器是从头开始的,即我没有看到显示如何使用 nodeJS 制作自己的 myemail@mydomain.com 的部分(假设 NodeJS 服务器配置在某种 linux VM 上,如 google 竞争引擎)。

所有这些答案和博客仅涉及发送电子邮件通过其他一些电子邮件客户端。

我对任何其他电子邮件服务器不感兴趣。

我不相信 gmail 或任何其他第三方电子邮件提供商。

我想举办自己的。

来自我自己的计算机。

不要质疑我的意图。

这是一个完全有效的编程问题:

我如何从头开始创建(即使用 nodeJS 中的“net”内置库,完全没有外部依赖项)创建 SMTP邮件服务器(假设我在某处的 HTTPS 虚拟机上注册了自己的域),它能够在 myemail@mydomain.com 接收邮件,并从 myemail@mydomain.com 发送电子邮件,无需任何 3rd 方服务器 完全没有

我怎样才能至少开始这样做?任何可能涉及 SMTP 套接字协议的参考资料或教程都是一个很好的开始。

【问题讨论】:

    标签: node.js .net email server smtp


    【解决方案1】:

    一些友好的建议 - 如果您只想在本地计算机上接收邮件,您可能希望使用现成的 MTA,例如 postfix、exim4 或 sendmail。

    我之所以这么说是因为我在我的职业生涯中确实花了很多时间来实施 MTA,我觉得我应该警告您,这是一个已解决的问题,可以让您完全控制您的邮件流量,并且存在一些非常棘手的问题解决编写一个可大规模处理大量邮件的 MTA。

    也就是说,SMTP(注意拼写)是一个非常简单的协议,如果您对这些东西感兴趣,它也是一个很好的“第一个协议”。用 NodeJS 写一个很容易。

    您可能感兴趣的第一版是在 1982 年左右发布的,它是 RFC-821,也就是 IETF STD-10。多年来,它被更新为 RFC-2821 和一系列相关规范,但基本的 RFC-821 支持将为您提供与当今 Internet 上 99% 的主机通信所需的内容。 (由于您需要对 TLS 的 ESMTP 支持,该数字会下降 - 但这并没有太大的困难也没有太大的不同)。

    您的守护进程需要监听端口 25,并且需要处理如下命令:

    YOU:  220 my.computer.com SMTP Service Ready
    THEM: EHLO blah blah
    YOU:  500 Syntax Error. Try again using SMTP.
    THEM: HELO blah blah
    YOU:  250 G'day mate
    THEM: MAIL FROM: <billg@microsoft.com>
    YOU:  250 Sender Okay
    THEM: RCPT TO: <steve@apple.com>
    YOU:  250 OK
    THEM: DATA
    YOU:  354 Enter mail, end with "." on a line by itself...
    THEM: <BUNCH OF STUFF>
          .
    YOU:  250 Mail accepted
    THEM: QUIT
    YOU:  221 Goodbye
    

    显然这里还有更多关于错误处理等的内容——阅读规范——但这是它的要点。这些数字是响应代码并具有特定含义。这些行由 \r\n 分隔,并且应该小于 1024 字节宽。

    是一封电子邮件,不会有一行只是一个点。如果电子邮件有这样的点,另一端将发送一个额外的点。这在规范中。

    最后,将 写入您的 $MAIL 文件(可能是 /var/mail/username 或 /var/spool/mail/username)并将您的 MUA 指向它。 Pine、Alpine、Elm 或 mutt 将是一个很好的 MUA 来整理这些东西。

    需要以 From(无冒号)开头并以 \n 结尾。这是伯克利 mbox 文件格式。它应该反映 SMTP 事务中的 MAIL FROM 标头。

    这种文件格式很常见,大多数 POP3 和 IMAP4 服务器都支持。您可能也可以使用 Mozilla Thunderbird 阅读它。我知道 Netscape Mail 过去就支持它。

    【讨论】:

    • 谢谢,很高兴在这里找到问题的实际答案,而不仅仅是“不要那样做......”这真的很好,所以基本上只需实现@987654321 @?你还知道如何处理多个用户,即 guyone@mydomain.com、guytwo@mydomain.com(或者它在规范中的某个地方)?
    • 没问题 - 是的,实现该规范将使您能够发送和接收 Internet 电子邮件。请注意,规范涵盖了传输,而不是电子邮件的格式,它在 RFC-2822 / STD-11 和许多其他文档中。至少 10 个相关的。多个用户只是信封中的多个 RCPT-TO: 行。小菜一碟!另外,请重新阅读我的信息;我忘了逃避一些<实体>当我写它的时候。祝你好运,玩得开心!
    猜你喜欢
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2022-08-20
    • 1970-01-01
    • 2015-07-11
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多