gpt4 book ai didi

javascript - 如何构建本地 node.js 邮件服务器

转载 作者:行者123 更新时间:2023-12-03 06:55:06 25 4
gpt4 key购买 nike

我花了几天时间使用 node.js 实现我自己的邮件服务器。我使用“smtp-server”之类的模块来创建 smtp 服务器,还使用“smtp-connection”来连接并向其发送邮件。但是我很困惑,因为我不知道如何将邮件从我的 smtp 服务器发送到像 google 或 yahoo 这样的提供商 smtp 服务器。

谁能帮我?

这是我的代码以获取更多信息:

我的 index.js 文件:

var SMTPServer = require('smtp-server').SMTPServer;
var port = 9025;


var serverOptions = {
name: "smtp-interceptor",
onConnect: onConnect,
onAuth: onAuth,
onData: onData
};

var server = new SMTPServer(serverOptions);

server.listen(port, 'localhost', function () {
console.log('SMTP server is listening on port ' + port);
});

function onConnect(session, callback) {
console.log('Connected');
return callback(); // Accept the connection
}

function onData(stream, session, callback) {
stream.pipe(process.stdout); // print message to console
console.log('Session \n', session.envelope);
stream.on('end', callback);
}

function onAuth(auth, session, callback){
if(auth.username !== 'Mahan' || auth.password !== 'Tafreshi') {
return callback(new Error('Invalid username or password'));
}
callback(null, {user: 123}); // where 123 is the user id or similar property
}

还有我的 connection.js 文件:
var SMTPConnection = require('smtp-connection');

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

var connection = new SMTPConnection({
host: 'localhost',
port: 9025,
secure: false
});

connection.connect(function (){
console.log('Connceted to SMTP server');
var auth = {
user: 'Mahan',
pass: 'Tafreshi'
};

connection.login(auth, function (err) {
if(err)
return console.log('Login Failed \n', err);
console.log('Login Successful');

var envelope = {
from: "testapp@testapplocal.com",
to: "mahantp19@gmail.com"
};

var message = 'Test message1';

connection.send(envelope, message, function (err, info) {
if(err)
return console.log('Error : ' + err);
console.log('Message sent');
console.log('Accepted : ' + info.accepted);
console.log('Rejected : ' + info.rejected);
console.log(info.response);

connection.quit();
console.log('Quit connection');
connection.close();
});
});
});

最佳答案

一封电子邮件必须通过许多检查才能被大多数邮件提供商接受。这些检查尝试验证发送消息的服务器是否有权代表发送者发送。
即:我的服务器可以发送一封电子邮件说它来自“someone-special@somewhere-important.com”......这并不意味着我在任何地方都很重要。
虽然您过去可能使用 PHP 或 Exchange Server 等其他技术成功地从 SMTP 服务器发送邮件,但规则已经发生了显着变化。 Gmail 今年刚刚开始全面实现。
我认为您当前的问题与大型提供商最近的更改一样与 Node 无关。
一些需要的检查包括:

  • DKIM Keys (DNS 记录)
  • SPF Record (DNS 记录)
  • DMARK已设置。
  • 需要服务器的专用 IP 地址。
  • 您的服务器 IP 未被列入黑名单。
  • 您的电子邮件内容通过了他们的过滤器。
  • 尝试让从您的服务器发送的电子邮件看起来像是来自访客或客户。
  • 在许多其他人中。

  • 您想要“充当发件人”的任何域都必须具备这些,以便大多数主要提供商接受您的消息。

    谷歌有一套很棒的工具和演练获取 IP/域设置。
    访问 Google MX Record Checker并输入您要用作发件人的域/子域,它会告诉您所有失败和通过的事情。

    替代解决方案
  • 我用 sendgrid.com .他们有一个 Node 库,使发送邮件变得非常容易。它们还使我能够通过 SMTP 代理消息。这意味着您可以使用标准方法来传递消息。您只需使用他们提供的主机名更改“localhost”。但是,如果这是针对新设置,请使用 API。
  • 托管您的电子邮件的任何人都应该为您提供通过 SMTP 或 API
  • 发送消息的能力
  • 其他 vendor 的供应源源不断,其中大多数都允许低容量发件人免费发送。

  • 警告语
    我尝试了几年来跟上所有的变化,并且不可避免地,我继续遇到阻止消息的障碍,直到有人没有收到电子邮件才知道。如果您的发送量较低,您应该能够使用第三方而无需支付费用。如果您发送大量邮件,那么与您将遇到的无穷无尽的问题相比,他们的服务成本很便宜,即使您最初开始滚动也是如此。
    PS。我与任何电子邮件提供商或发件人没有任何关系。我也付钱给他们。

    关于javascript - 如何构建本地 node.js 邮件服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39602519/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com