【问题标题】:Sending emails with nodemailer使用 nodemailer 发送电子邮件
【发布时间】:2015-05-19 21:51:16
【问题描述】:

我正在尝试使用 nodemailer 从我的应用程序发送电子邮件。

我的设置如下所示:

var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var transporter = nodemailer.createTransport(smtpTransport ({
  host: 'smtp.companyname.dk',
  secureConnection: true,
  port: 587,
  auth: {
        user: 'support@companyname.dk',
        pass: '****'
  }
}));

var mailOptions = {
    from: 'Olaf <ob@companyname.dk>',
    to: 'john@test.dk',
    subject: 'This is a test ',
        text: 'Hello world ',
        html: '<b>Hello world </b>'
    };

transporter.sendMail(mailOptions, function(error, info){
    if(error){
       console.log(error);
    }else{
    console.log('Message sent: ' + info.response);
    }
});

运行后,它给了我以下错误:

{ [Error: Hostname/IP doesn't match certificate's altnames: "Host: smtp.companyname.dk. is not in the cert's altnames: DNS:*.mailcloud.dk, DNS:mailcloud.dk"]
  reason: 'Host: smtp.companyname.dk. is not in the cert\'s altnames: DNS:*.mailcloud.dk, DNS:mailcloud.dk',
  host: 'smtp.companyname.dk.',
  cert: 
   { subject: { OU: 'Domain Control Validated', CN: '*.mailcloud.dk' },
     issuer: { O: 'AlphaSSL', CN: 'AlphaSSL CA - G2' },
     subjectaltname: 'DNS:*.mailcloud.dk, DNS:mailcloud.dk',
     infoAccess: { 'CA Issuers - URI': [Object], 'OCSP - URI': [Object] },
     modulus: 'AFFDE405E26382FC1F9A126B51C763A21DCB90228DF9B9BFF466B00DA17BCBDA48E0315E0A6E4E8E0C65B3E5A9BF9A98448DF8006869B913C8D644B78B2176C240AA703DF7C5109F7FC9EDBAE0A69E35E00A81D753990A7DF531CC1F47A778A1CC18271298DBB71E341E846139951D9B119C237BDD9AA6F7D16A62FC5D4D6BEA0288DAC700E5C87E472B75365C522B0342185F16854659EE48637B6124269C4E18CC040344928D115350805EF66738922230349DEC97E2D68D0B4175EA6B63BC161B841C150B7009AAC0E8A06CD34D3912926D98CEBF83F6C187AD08A5045F9868512EFDD478FAA81FA0402F5C44B3FD70F82BA4F102352A01B02B77F0FA096D',
     exponent: '10001',
     valid_from: 'Oct  3 08:22:02 2014 GMT',
     valid_to: 'Dec 21 11:07:29 2017 GMT',
     fingerprint: '35:3A:87:5C:91:8C:B2:7C:4E:87:D1:E3:26:84:57:E5:A1:73:62:F3',
     ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ],
     serialNumber: '****',
     raw: <Buffer 30 82 04 a7 30 82 03 8f a0 03 02 01 02 02 12 11 21 75 e4 f8 11 73 a4 c5 05 36 5f fe 9b b3 0b 4f 86 30 0d 06 09 2a 86 48 86 f7 0d 01 01 05 05 00 30 2e ... > } }

我已经被这个问题困扰了好几天了,到处找,所以我希望有人可以帮助我解决这个问题(或者至少指出正确的方向)。

【问题讨论】:

    标签: javascript node.js email nodemailer


    【解决方案1】:

    尝试添加:

        tls: {
            rejectUnauthorized: false
        },
    

    到您的 nodemailer 选项对象。

    【讨论】:

    • 刚试过,它给了我这个错误{ [Error: Message failed] code: 'EMESSAGE', response: '550 5.7.1 Client does not have permissions to send as this sender', responseCode: 550 }我不知道它是否有什么要说的,但现在我正试图从我的本地机器发送电子邮件!?
    • 请记住,此选项会使您容易受到MITM attacks on SSL 的攻击。
    • 这个选项对我有用。但这是一种安全的方式吗?我的端口是 587。将此选项设置为 false 有什么影响?
    【解决方案2】:

    在添加了@Richard Macarthy 的建议并查看了我返回的新错误后,我发现我的mailOptions 中的from 电子邮件必须与我用来发送来自的电子邮件 - 现在实际上非常有意义。

    在这种情况下:

    var mailOptions = {
        from: 'Olaf <support@companyname.dk>',
        to: 'john@test.dk',
        ...
    

    【讨论】:

    • 很高兴看到你把它整理好了!
    【解决方案3】:
    var transporter = nodemailer.createTransport({<br>
    host: 'hostSTMP',
    secure: false, //disable SSL    
    requireTLS: true, //Force TLS
        tls: {
            rejectUnauthorized: false
        },
        port: port, //Port of STMP service
        auth: {
          user: 'user@user.com',
          pass: 'password'
       }
    });
    

    rejectUnauthorized:如果为 true,则根据提供的 CA 列表验证服务器证书。如果验证失败,则发出错误事件;默认值:true。

    rejectUnauthorized:如果为 false,则表示“我不在乎我是否无法验证服务器的身份。”

    【讨论】:

    • 你能解释一下你的答案吗?
    • 完成了,如果您有任何问题,请给我写信;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2018-07-14
    • 2018-07-11
    相关资源
    最近更新 更多