如何使用邮件服务器和 nodejs 从我的服务器发送电子邮件

Posted

技术标签:

【中文标题】如何使用邮件服务器和 nodejs 从我的服务器发送电子邮件【英文标题】:How to send emails from my server with a mail server and nodejs 【发布时间】:2013-06-16 09:11:42 【问题描述】:

我家有一个静态 IP 的服务器,我用一个域为自己的网页提供服务,一切正常。

在我的网页中,您可以通过电子邮件和密码进行注册。当您注册一个名为 nodemailer 的节点模块,从 google 帐户发送电子邮件时,问题是 google 帐户对发送的电子邮件有限制。

所以我需要将 nodemailer 模块连接到我自己家中的服务器。

我在谷歌上搜索,但没有类似的答案。

如何在 nodejs 中使用 postfix??

http://www.postfix.org/

或者如何在 nodemailer 中使用 haraka 模块

https://github.com/baudehlo/Haraka

所以我重复我的问题,我需要从我的服务器发送一封电子邮件给在我的网站上注册的任何电子邮件用户。

例如...

用户 jose@gmail.com 在我的网站上注册

nodemailer 配置是...

exports.newRegistration=function(parametros,callback)

    var mailOptions = 
    
        from: "<myemailingoogle@gmail.com>",//my email
        to: parametros.useremail,//user email
        subject: 'Welcome '+parametros.useremail+'.',
        html:   '<br><b>Hello</b><br>'+ // html 

    ;
    var smtpTransport = nodemailer.createTransport("SMTP",
    
        service: "Gmail",
        secureConnection: true,
        auth:
        
            user: "myemailingoogle@gmail.com",
            pass: "7ftera359c28a",
        ,
    );
    smtpTransport.sendMail(mailOptions, function(err, response)
    
        if(err)
        
            smtpTransport.close();
            console.warn(err);
            return callback(err,null);
        else
            smtpTransport.close();
            return callback(null,response);
        
    );

电子邮件发送正常,但每天有限制。

所以我需要使用电子邮件服务器无限制地发送我的电子邮件.... tnx

编辑 2

我用 apt-get 安装 mailutils

现在我试试

mail mymailin@gmail.com
Cc: // press enter
Subject: Welcome

Hello Mail.

// Ctrl+D

这会将电子邮件发送到我的邮箱,我会在垃圾邮件中收到一封从 root@mail.mydomain.com 发送的电子邮件

所以,postfix 正在工作,但我仍然无法使用 emailjs 或 nodemailer 发送电子邮件...

当我尝试使用电子邮件或 nodemailer 发送电子邮件时,我得到了这个

smtp: '535 5.7.8 Error: authentication failed: generic failure\n'

我在 google 中搜索该错误和 is 和 auth login 错误,我无法登录系统。 所以我尝试使用 telnet

telnet localhost 25
ehlo localhost
250-mydomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail to: myuserin@gmail.com
501 5.5.4 Syntax: MAIL FROM:<address>
mail from: info@mydomain.com
250 2.1.0 Ok
rcpt to: myuserin@gmail.com
451 4.3.0 <myuserin@gmail.com>: Temporary lookup failure
data
554 5.5.1 Error: no valid recipients
AUTH LOGIN
503 5.5.1 Error: MAIL transaction in progress

我再试一次

220 mydomain.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-mydomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH LOGIN
334 VXNlcm5hbWU6
UbuntuUser
535 5.7.8 Error: authentication failed: another step is needed in authentication

再次使用 root

220 mydomain.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-mydomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login
334 VXNlcm5hbWU6
root
334 UGFzc3dvcmQ6
rootPassword
535 5.7.8 Error: authentication failed: another step is needed in authentication

这是日志文件

Jun 20 15:50:16 myname postfix/smtpd[12528]: warning: localhost[127.0.0.1]:             SASL login authentication failed: another step is needed in authentication

就是这样……这哪里有问题???

【问题讨论】:

【参考方案1】:

我也必须这样做,但我在 Azure 虚拟 Ubuntu Linux 服务器上运行我的节点服务器。我想如果你运行的是 Ubuntu,同样的步骤也可以在你的家庭服务器上运行。这是我发现的工作:

我使用本指南安装了 postfix 电子邮件服务器:

https://help.ubuntu.com/community/Postfix

一开始看起来工作量很大,但对我来说很容易。

我发现从 node.js 发送外发电子邮件的最简单方法是使用 emailjs:

http://github.com/eleith/emailjs.git

我发现发送的电子邮件通常最终会被标记为垃圾邮件。为帮助避免这种情况,您可以前往管理域名的任何地方(我使用 enom),然后配置 SPF 记录以帮助您发送的电子邮件看起来合法。

这是我使用 emailjs 发送电子邮件的 node.js 模块:

    var email   = require("emailjs");

    postfixSend = function postfixSend(emailInfo, callback) 

        var server  = email.server.connect(
            user:    "yourEmailAccountUser", 
            password: "yourPassword", 
            host:    "localhost", 
            ssl:     false
        );

        server.send(
            text:    emailInfo.msg, 
            from:    emailInfo.from, 
            to:      emailInfo.to,
            subject: emailInfo.subject
            , function(err, message) 
                callback(err);
        );

    

    exports.postfixSend = postfixSend;

【讨论】:

我有一个错误: [错误:authorization.failed] 代码:3,上一个: [错误:对命令 'N2Z0ZXJhMzU5YzI4YQ=='的错误响应] 代码:2,smtp:'535 5.7 .8 错误:身份验证失败:一般失败\n' ,smtp:未定义 【参考方案2】:

我解决了这个问题...

article using postfix

我在 sasldb2 中添加了一些用户,并且 emailjs 运行良好。

首先使用Svbaker tutorial 安装后缀,但是,

编辑 /etc/postfix/sasl/smtpd.conf 添加以下行:

pwcheck_method: auxprop
auxprop_plugin: sasldb 
mech_list: PLAIN LOGIN

感谢您的所有帮助,特别是 @Svbaker 并为您提供解决此问题的方法。

【讨论】:

以上是关于如何使用邮件服务器和 nodejs 从我的服务器发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 REST/JSON/GET/POST 从我的节点服务器访问我的 couchdb?

如何从我的 React Web 应用程序发送电子邮件

如何设置我的 Ubuntu VPS 以发送外发邮件? [关闭]

有没有办法从我的 Node.js 服务器使用 Firebase Admin SDK 发送验证电子邮件?

发啥我手机发送电子邮件发不出去呢?他老是提示“网络服务器错误”,请高手指点。手机该怎样设置?

使用 nodemailer 通过 Node.js 发送电子邮件不起作用