【问题标题】:receive mail with nodemailer without setting "Allow less secure apps to access"使用 nodemailer 接收邮件而不设置“允许不太安全的应用程序访问”
【发布时间】:2021-07-19 05:24:06
【问题描述】:

我想问一些关于nodemailer的问题,我做的代码是这样的

Var client = nodemailer.createTransport ({ 
Service: 'gmail',
Auth: {
User: 'example@gmail.com', // Your email address
Pass: '123' // Your password},
Tls: {rejectUnauthorized: false}
});

这可行,但是在成功交付后,当我必须接收已发送的电子邮件时,我需要启用诸如“允许不太安全的应用程序访问”之类的 gmail 设置。我不想设置它。

那么我如何从 example@gmail.com 向 example1@gmail.com 发送电子邮件,而不设置“允许不太安全的应用程序访问”并直接在邮箱中接受消息!!???或者任何其他应该添加的插件??

谢谢;)

【问题讨论】:

    标签: node.js nodemailer


    【解决方案1】:

    从 Google OAuth2.0 Playground 获取 accessToken 和 refreshToken, 来自 Google 开发者控制台的 clientId 和 clientSecret

    const nodemailer = require('nodemailer');
    const xoauth2 = require('xoauth2');
    var express = require('express');
    var router = express.Router();
    
    
    var smtpTransport = nodemailer.createTransport('SMTP',{
      service:"Gmail",
      auth:{
        XOAuth2: {
          user:'sender@emailaddress.com',
          clientId: 'your-client-id',
          clientSecret: 'your-cliet-secret',
          accessToken:'your-access-token',
          refreshToken: 'your-refresh-token'
    
      }
      }
    });
    
    router.get('/emaildemo', function(req, res, next) {
    
      var mailOptions = {
      from: 'sender@emailaddress.com', 
      to: 'xxx@email.com', 
      subject: 'TEST SUBJECTT', 
      text: 'TEST MAIL', 
    }; 
    smtpTransport.sendMail(mailOptions, function(error, info){
      if(error){
     console.log('Error Occured', error);
      return res.send(error);
      }
      return res.send("mail send successfully");
    }); 
    
    });
    module.exports = router;
    

    【讨论】:

    • 嘿,谢谢 Vikas Thakur,在我使用 XOAuth2 之后,为什么在刷新部分中令牌有一个只有 2000 秒的活动期,如果超过了那个时间,我必须刷新令牌重置,并且刷新令牌变了怎么处理?
    【解决方案2】:

    你需要获取访问令牌,你不能静态地给它。 googleapis 可以是 gmail 的用户。 例如:

            const { google } = require('googleapis');
            const { OAuth2 } = google.auth;
    
            const {
                MAILING_SERVICE_CLIENT_ID,
                MAILING_SERVICE_CLIENT_SECRET,
                MAILING_SERVICE_REFRESH_TOKEN,
                SENDER_EMAIL_ADDRESS,
                OAUTH_PLAYGROUND //https://developers.google.com/oauthplayground
            } = process.env;
    
            const oauth2Client = new OAuth2(
                MAILING_SERVICE_CLIENT_ID,
                MAILING_SERVICE_CLIENT_SECRET,
                OAUTH_PLAYGROUND
            );
    
            oauth2Client.setCredentials({
                refresh_token: MAILING_SERVICE_REFRESH_TOKEN,
            });
            //>>> get the accessToken
            const accessToken = oauth2Client.getAccessToken();
    
            
            let transporter = nodemailer.createTransport({
                service: 'gmail',
                auth: {
                    type: 'OAuth2',
                    user: SENDER_EMAIL_ADDRESS,
                    clientId: MAILING_SERVICE_CLIENT_ID,
                    clientSecret: MAILING_SERVICE_CLIENT_SECRET,
                    refreshToken: MAILING_SERVICE_REFRESH_TOKEN,
                    accessToken,
                },
            });
    
            let mailOptions = {
                from: 'no-reply@blah.com',
                to: 'to_blah@blah.com',
                subject: 'test',
                text: 'test'
            };
            let result = await transporter.sendMail(mailOptions);
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2020-08-18
      • 2021-06-24
      • 2020-05-30
      • 1970-01-01
      • 2016-06-03
      • 2018-10-08
      • 2018-06-13
      相关资源
      最近更新 更多