通过代理的 Nodemailer

Nodemailer through a proxy

Nodemailer 可以通过代理发送邮件吗?

当我在没有代理的情况下发送邮件时,它工作得很好,但是当我通过代理发送邮件时出现这个错误:

{ [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' }
{ [Error: socket hang up] code: 'ECONNRESET', sslError: undefined }
{ [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' }

我找到了解决方案,我使用 mailgun 通过代理发送邮件

'use strict';
var express = require('express');
var router = express.Router();
var mongojs = require('mongojs');
var api_key = 'key-xxxxxxxxxxxxxxxxxxxxxxxxxxx';
var domain = 'xxxxxxxxxxxxxxxxxx.mailgun.org';
var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain});

var nodemailer = require('nodemailer');
var data = {
    from: 'Excited User <me@samples.mailgun.org>',
    to: 'xxxx@xxxxx.com',
    subject: 'Hello',
    text: 'Testing some Mailgun awesomness!'
};
...
 router.get('/api/postEmail', function (req, res) {
    mailgun.messages().send(data, function (error, body) {
        console.log(body);
    });
...

是的,Nodemailer可以在没有第三方的情况下使用代理。 在transporter方法中,需要添加'proxy' 属性.

    let transporter = nodemailer.createTransport({
    host: 'smtp.example.com',
    port: 465,
    secure: true,
    proxy: 'http://proxy-host:1234'
});

这应该可以。您可以在以下位置阅读更多相关信息:Nodemailer Proxy Support

如果需要,您可以通过为浏览器设置代理来绕过代理。 例如:如果 Google Chrome,

  1. 转到设置
  2. 点击"Open proxy settings"
  3. 一个对话框打开,点击局域网设置按钮。
  4. 给出你的代理值