电子邮件NodeJS无法发送

时间:2017-12-13 13:10:54

标签: node.js email

我想从NodeJs发送电子邮件。我在npmjs.org上快速搜索并找到了2个有前途的库:

Nodemailer

EmailJs

首先,我按照说明安装并运行NodeMailer,但它不起作用。我想从Gmail发送电子邮件,因此,我按照"less secured"的文档中的说明启用了enabled captcha个应用以及Nodemailer。然而,即使我这样做,我也无法使其发挥作用。

另外,我试图切换到我大学的电子邮件,所以我找到了它的SMTP服务器和端口并配置了设置。错误仍然存​​在,主要是:

(node:825) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 1): Error: connect EAGAIN 134.91.56.35:587 - Local (0.0.0.0:58442)
(node:825) [DEP0018] DeprecationWarning: Unhandled promise rejections are 
deprecated. In the future, promise rejections that are not handled will 
terminate the Node.js process with a non-zero exit code.

我不确定如何解决它,所以我尝试了下一个客户端,EmailJs。错误有:

{ Error: connection encountered an error (connect EAGAIN 134.91.56.35:587 ...
code: 5,
previous: ...
... smtp: undefied}

我可以清楚地看到写的是smtp未定义,但我已经证实它是相同的。

为了澄清,我在Windows上运行Node上的Bash,但是因为我知道它存在一些问题,所以我也在Raspberry PI 3上运行代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

我设法配置它。

根据建议我使用了Gmail-node。要做到这一点,你必须遵循一些步骤:

  • 首先,使用npm install gmail-node
  • 进行安装
  • 打开链接https://console.developers.google.com/flows/enableapi?apiid=gmail
  • 使用此向导在Google Developers中创建或选择项目 控制台并自动打开API。
  • 点击继续,然后转到 凭证。
  • 在页面顶部,选择OAuth许可屏幕 标签。选择电子邮件地址,如果尚未输入产品名称 设置,然后单击“保存”按钮。
  • 选择“凭据”选项卡,然后单击 创建凭据按钮并选择OAuth客户端ID。
  • 选择应用程序类型其他,输入任意名称" gmail-node-app",和 单击“创建”按钮。
  • 单击“确定”关闭生成的对话框。
  • 点击右侧的file_download(下载JSON)按钮 客户ID。
  • 将此文件移至您的工作目录并与之一起使用 任何名称,如client_secret.json。

现在您的程序看起来像这样,您必须根据刚刚下载的文件更改信息:

var gmailNode = require('gmail-node');
var clientSecret = {
    installed: {
        client_id: "k677725446467-6li25pcqgkcllsoh6f6dijcvse64n9pf.apps.googleusercontent.com",
        project_id: "clean-node-129606",
        auth_uri: "https://accounts.google.com/o/oauth2/auth",
        token_uri: "https://accounts.google.com/o/oauth2/token",
        auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs",
        client_secret: "kF7DvoA_ZrNfa65GnU2zQBgw7",
        redirect_uris: [
            "urn:ietf:wg:oauth:2.0:oob",
            "http://localhost"
        ]
    }
};
gmailNode.init(clientSecret, './token.json', function(err,data){ ... });

但是,从网站上获取此信息后,我仍有一个未知问题,即Error: No access or refresh token is set.

为了解决这个问题,您需要使用" TokenURL"生成网址。通过记录此代码:

console.log(gmailNode.generateUrl(clientSecret));

按照生成的网址复制" TokenURL"那里。

最后,发送一封电子邮件:

gmailNode.generateToken(clientSecret, tokenURL, (err, data) => {
        gmailNode.sendWithToken(emailMessage, clientSecret, data, function(err,data) {
                console.log(err, data)
        })
})

你完成了!

  

请注意,我们不再需要init