使用 Node.js 邮寄。主机问题 属性

Mailing with Node.js. Issue with the host property

我知道这里有很多这样的帖子,但我找不到任何可以解决我的问题的信息。所以我尝试同时使用 nodemailer and emailjs.

我有这个代码:

这是用于 nodemailer

var nodemailer = require('nodemailer');

nodemailer.createTestAccount((err, account) => {
    if (err) console.log(err);
    // create reusable transporter object using the default SMTP transport
    var transporter = nodemailer.createTransport({
        host: "smtp.Hotmail.com", // Just Hotmail doesn't work either
        // port: 587,
        auth: {
            user: 'xxx@outlook.com',
            pass: 'xxx'
        }
    });

    // setup email data with unicode symbols
    let mailOptions = {
        from: `${req.body.fullName} ${req.body.email}`, // sender address
        to: 'alexander.ironside@mygeorgian.ca', // list of receivers
        subject: 'Email from SMWDB contact form', // Subject line
        html: `<h4>Name: ${req.body.fullName}</h4>
                <h4>Company: ${req.body.company}</h4>
                <h4>Phone: ${req.body.phone}</h4>
                <p>Message: ${req.body.message}</p>`
    };

    // send mail with defined transport object
    transporter.sendMail(mailOptions, (error, info) => {
        if (error) {
            return console.log(error);
        }
        console.log('Message sent: %s', info.messageId);
        // Preview only available when sending through an Ethereal account
        console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));

        // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
        // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
    });
});

这对于 emailjs

var email = require("emailjs");
var server = email.server.connect({
    user: "xxx@outlook.com",
    password: "xxx",
    host: "smtp-mail.outlook.com",
    tls: {ciphers: "SSLv3"}
});

var message = {
    text: `Test`,
    from: `${req.body.fullName} <${req.body.email}>`,
    to: `Alex <alexander.ironside@mygeorgian.ca>`, // list of receivers
    // cc:      "else <else@your-email.com>",
    subject: 'Email from SMWDB contact form', // Subject line
    attachment:
        [
            {
                data: `
            <h4>Name: ${req.body.fullName}</h4>
            <h4>Company: ${req.body.company}</h4>
            <h4>Phone: ${req.body.phone}</h4>
            <p>Message: ${req.body.message}</p>`
                , alternative: true
            },
        ]
};

// send the message and get a callback with an error or details of the message that was sent
server.send(message, (err, message) => {
    console.log(err || message);
});

我认为问题是 host 两个文档都这样说:smtp.your-email.com,同时所有代码示例都这样说:host: "Hotmail"。正确的做法是什么?

我真的不在乎我使用的是哪个包。

我必须使用 Hotmail/Yahoo 而不能使用 Gmail(一个 phone 号码激活的帐户太多)

现在错误:

Emailjs 抛出这个:

{ Error: bad response on command ' .': 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message.然后是很多数字和一个回调trace。

Nodemailer 抛出这个:

{ Error: getaddrinfo ENOTFOUND smtp.Hotmail.com smtp.Hotmail.com:587
    at errnoException (dns.js:50:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
    code: 'ECONNECTION',
        errno: 'ENOTFOUND',
    syscall: 'getaddrinfo',
    hostname: 'smtp.Hotmail.com',
    host: 'smtp.Hotmail.com',
    port: 587,
    command: 'CONN' }

我曾经在 PHP 中这样做过,不知道为什么 Node 这么复杂,但我想一定是有原因的。

我让一位朋友创建了一个 Gmail 帐户,并且很快就成功了。如果您遇到同样的问题,请不要理会其他任何事情。只需使用 Google。

这是对我有用的传输代码

var transporter = nodemailer.createTransport({
    host: "smtp.gmail.com", // hostname
    auth: {
        user: 'xxx@gmail.com',
        pass: 'xxx'
    }
});