[javascript] Gmail 및 NodeJS를 사용하는 Nodemailer

NodeJS를 사용하여 연락처 양식을 구현하기 위해 nodemailer를 사용하려고하지만 로컬에서만 작동하며 원격 서버에서는 작동하지 않습니다.

내 오류 메시지 :

[website.fr-11 (out) 2013-11-09T15:40:26] { [AuthError: Invalid login - 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvlX
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 V-dFQLgb7aRCYApxlOBuha5ESrQEbRXK0iVtOgBoYeARpm3cLZuUS_86kK7yPis7in3dGC
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 N1sqhr3D2IYxHAN3m7QLJGukwPSZVGyhz4nHUXv_ldo9QfqRydPhSvFp9lnev3YQryM5TX
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 XL1LZuJL7zCT5dywMVQyWqqg9_TCwbLonJnpezfBLvZwUyersknTP7L-VAAL6rhddMmp_r
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 A_5pRpA> Please log in via your web browser and then try again.
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 Learn more at https://support.google.com/mail/bin/answer.py?answer=787
[website.fr-11 (out) 2013-11-09T15:40:26] 534 5.7.14 54 fr4sm15630311wib.0 - gsmtp]
[website.fr-11 (out) 2013-11-09T15:40:26]   name: 'AuthError',
[website.fr-11 (out) 2013-11-09T15:40:26]   data: '534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvlX\r\n534-5.7.14 V-dFQLgb7aRCYApxlOBuha5ESrQEbRXK0iVtOgBoYeARpm3cLZuUS_86kK7yPis7in3dGC\r\n534-5.7.14 N1sqhr3D2IYxHAN3m7QLJGukwPSZVGyhz4nHUXv_ldo9QfqRydPhSvFp9lnev3YQryM5TX\r\n534-5.7.14 XL1LZuJL7zCT5dywMVQyWqqg9_TCwbLonJnpezfBLvZwUyersknTP7L-VAAL6rhddMmp_r\r\n534-5.7.14 A_5pRpA> Please log in via your web browser and then try again.\r\n534-5.7.14 Learn more at https://support.google.com/mail/bin/answer.py?answer=787\r\n534 5.7.14 54 fr4sm15630311wib.0 - gsmtp',
[website.fr-11 (out) 2013-11-09T15:40:26]   stage: 'auth' }

내 컨트롤러 :

exports.contact = function(req, res){
    var name = req.body.name;
    var from = req.body.from;
    var message = req.body.message;
    var to = '*******@gmail.com';
    var smtpTransport = nodemailer.createTransport("SMTP",{
        service: "Gmail",
        auth: {
            user: "******@gmail.com",
            pass: "*****"
        }
    });
    var mailOptions = {
        from: from,
        to: to,
        subject: name+' | new message !',
        text: message
    }
    smtpTransport.sendMail(mailOptions, function(error, response){
        if(error){
            console.log(error);
        }else{
            res.redirect('/');
        }
    });
}



답변

다음 URL로 이동하여이 문제를 해결했습니다 (메일을 보내려는 계정으로 Google에 연결되어있는 동안).

https://www.google.com/settings/security/lesssecureapps

보안 수준이 낮은 앱을 활성화했습니다.

끝난


답변

Gmail 연결에 대한 nodemailer의 공식 가이드를 참조하세요.

https://community.nodemailer.com/using-gmail/

이것을 한 후에 나를 위해 작동합니다.

  1. 보안 수준이 낮은 앱 사용-https: //www.google.com/settings/security/lesssecureapps
  2. – 사용 안 함 보안 문자 일시적 그래서 당신은 새로운 장치 / 서버에 연결할 수 있습니다 https://accounts.google.com/b/0/displayunlockcaptcha을

답변

쉬운 솔루션 :

var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');

var transporter = nodemailer.createTransport(smtpTransport({
  service: 'gmail',
  host: 'smtp.gmail.com',
  auth: {
    user: 'somerealemail@gmail.com',
    pass: 'realpasswordforaboveaccount'
  }
}));

var mailOptions = {
  from: 'somerealemail@gmail.com',
  to: 'friendsgmailacc@gmail.com',
  subject: 'Sending Email using Node.js[nodemailer]',
  text: 'That was easy!'
};

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

1 단계:

https://myaccount.google.com/lesssecureapps 로 이동 하여 보안 수준이 낮은 앱을 사용하도록 설정 하세요 . 이것이 작동하지 않으면

2 단계

여기 https://accounts.google.com/DisplayUnlockCaptcha 로 이동 하여 활성화 / 계속 한 다음 시도하십시오.

나를 위해 1 단계만으로는 작동하지 않았으므로 2 단계로 이동해야했습니다.

나는 또한 nodemailer-smtp-transport 패키지를 제거하려고 시도했지만 놀랍게도 작동합니다. 하지만 시스템을 다시 시작했을 때 동일한 오류가 발생했기 때문에 보안 수준이 낮은 앱을 켜야했습니다 (작업 후 비활성화했습니다).

그런 다음 재미를 위해 방금 off (보안 수준이 낮은 앱)로 시도했고 vola 다시 작동했습니다!


답변

Gmail에 연결하려면 XOAuth2 토큰 을 사용해야합니다 . 걱정하지 마세요. Nodemailer는 이미 이에 대해 알고 있습니다.

var smtpTransport = nodemailer.createTransport('SMTP', {
    service: 'Gmail',
    auth: {
      XOAuth2: {
        user: smtpConfig.user,
        clientId: smtpConfig.client_id,
        clientSecret: smtpConfig.client_secret,
        refreshToken: smtpConfig.refresh_token,
        accessToken: smtpConfig.access_token,
        timeout: smtpConfig.access_timeout - Date.now()
      }
    }
  };

앱을 등록 하려면 Google Cloud Console 로 이동 해야합니다. 그런 다음 사용하려는 계정에 대한 액세스 토큰을 검색해야합니다. 이를 위해 passportjs 를 사용할 수 있습니다 .

내 코드에서 어떻게 보이는지 다음과 같습니다.

var passport = require('passport'),
    GoogleStrategy = require('./google_oauth2'),
    config = require('../config');

passport.use('google-imap', new GoogleStrategy({
  clientID: config('google.api.client_id'),
  clientSecret: config('google.api.client_secret')
}, function (accessToken, refreshToken, profile, done) {
  console.log(accessToken, refreshToken, profile);
  done(null, {
    access_token: accessToken,
    refresh_token: refreshToken,
    profile: profile
  });
}));

exports.mount = function (app) {
  app.get('/add-imap/:address?', function (req, res, next) {
    passport.authorize('google-imap', {
        scope: [
          'https://mail.google.com/',
          'https://www.googleapis.com/auth/userinfo.email'
        ],
        callbackURL: config('web.vhost') + '/add-imap',
        accessType: 'offline',
        approvalPrompt: 'force',
        loginHint: req.params.address
      })(req, res, function () {
        res.send(req.user);
      });
  });
};


답변

나는 같은 문제가 있었다. 내 Google 보안 설정에서 “보안 수준이 낮은 앱”허용 하여 작동했습니다.


답변

잘 작동했습니다.

1- nodemailer 설치 , 설치 되지 않은 경우 패키지 (cmd 입력) :npm install nodemailer

이동 2 https://myaccount.google.com/lesssecureapps 및 전원을 켜고 보안 수준이 낮은 앱을 허용 .

3- 코드 작성 :

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'trueUsername@gmail.com',
        pass: 'truePassword'
    }
});

const mailOptions = {
    from: 'any@any.com', // sender address
    to: 'true@true.com', // list of receivers
    subject: 'test mail', // Subject line
    html: '<h1>this is a test mail.</h1>'// plain text body
};

transporter.sendMail(mailOptions, function (err, info) {
    if(err)
        console.log(err)
    else
        console.log(info);
})

4- 즐기십시오!


답변

나에게도 같은 문제가 발생했습니다. localhost에서 시스템을 테스트 한 다음 다른 국가에있는 서버에 배포 한 다음 프로덕션 서버에서 시스템을 시도 할 때이 오류가 표시되었습니다. 나는 이것을 고치기 위해 시도했다.

  1. https://www.google.com/settings/security/lesssecureapps 사용 설정했지만 내 솔루션이 아닙니다.
  2. https://g.co/allowaccess 제한된 시간 동안 외부에서 액세스를 허용했는데 이로 인해 문제가 해결되었습니다.