首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过nodemailer发送邮件

如何通过nodemailer发送邮件
EN

Stack Overflow用户
提问于 2019-09-09 00:03:15
回答 2查看 431关注 0票数 1

我正在尝试通过我的网站发送一封简单的邮件到我自己的其他帐户。但它不起作用。我正在使用node mailer,并严格按照文档进行操作。

我尝试过检查任何类型的语法错误或外部因素。

代码语言:javascript
运行
复制
//Send Mail
router.post('/volunteer', ensureAuthenticated, async(req, res) => {

    // const { name, email, city } = req.body;
    //Create the transporter
    require('dotenv').config();
    const nodemailer = require('nodemailer');

    let transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: process.env.EMAIL,
            pass: process.env.PASSWORD
        }
    });

    //set up mailOptions
    let mailOptions = {
        from: 'readsocially001@gmail.com',
        to: 'vaibhav.ag.001@gmail.com',
        subject: 'Volunteer',
        text: 'HEY'
    };

    transporter.sendMail(mailOptions, function (err, data) {
        if (err) {
            console.log("some error");
        } else {
            console.log("SENT");
        }

    });
    res.redirect('/volunteer');
});

它只是进入if(err)语句并输出一些错误。实际的错误是:

代码语言:javascript
运行
复制
Error: Missing credentials for "PLAIN"
    at SMTPConnection._formatError (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-connection/index.js:781:19)
    at SMTPConnection.login (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-connection/index.js:452:38)
    at connection.connect (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-transport/index.js:271:32)
    at SMTPConnection.once (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-connection/index.js:209:17)
    at Object.onceWrapper (events.js:286:20)
    at SMTPConnection.emit (events.js:198:13)
    at SMTPConnection._actionEHLO (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-connection/index.js:1309:14)
    at SMTPConnection._processResponse (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-connection/index.js:940:20)
    at SMTPConnection._onData (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-connection/index.js:746:14)
    at TLSSocket.SMTPConnection._onSocketData (/Users/vaibhav2001/Documents/test/ReadSocially/node_modules/nodemailer/lib/smtp-connection/index.js:189:46)
    at TLSSocket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:288:12)
    at readableAddChunk (_stream_readable.js:269:11)
    at TLSSocket.Readable.push (_stream_readable.js:224:10)
    at TLSWrap.onStreamRead [as onread] (internal/stream_base_commons.js:94:17) code: 'EAUTH', command: 'API' }
EN

回答 2

Stack Overflow用户

发布于 2019-09-09 02:11:48

根据官方文档,你不能使用普通的凭证:https://nodemailer.com/usage/using-gmail/在Gmail中使用nodemailer,你需要创建一个应用程序,并像这样使用oauth:

代码语言:javascript
运行
复制
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        type: 'OAuth2',
        user: 'user@example.com',
        accessToken: 'ya29.Xx_XX0xxxxx-xX0X0XxXXxXxXXXxX0x'
    }
});

更多示例:https://nodemailer.com/smtp/oauth2/#examples

希望能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2019-09-14 14:44:53

你可以试试这个。

代码语言:javascript
运行
复制
var nodemailer = require('nodemailer');
var xoauth2 = require('xoauth2');

// listen for token updates (if refreshToken is set)
// you probably want to store these to a db
generator.on('token', function(token){
    console.log('New token for %s: %s', token.user, token.accessToken);
});

// login
var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        xoauth2: xoauth2.createXOAuth2Generator({
            user: '{username}',
            clientId: '{Client ID}',
            clientSecret: '{Client Secret}',
            refreshToken: '{refresh-token}',
            accessToken: '{cached access token}'
        })
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57843542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档