Nodemailer กับ Gmail และ NodeJS


110

ฉันพยายามใช้ nodemailer เพื่อใช้แบบฟอร์มการติดต่อโดยใช้ NodeJS แต่ใช้งานได้เฉพาะในพื้นที่เท่านั้นไม่ทำงานบนเซิร์ฟเวอร์ระยะไกล ...

ข้อความแสดงข้อผิดพลาดของฉัน:

[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('/');
        }
    });
}

14
google.com/accounts/DisplayUnlockCaptcha (สำหรับการเปิดเผยโพสต์โดยผู้แสดงความคิดเห็นที่ดีด้านล่าง) เพียงแค่อนุญาตการเข้าถึงเพียงครั้งเดียวและปล่อยให้ nodemailer เข้าสู่ระบบโดยอัตโนมัติก็จะทำได้
laggingreflex

3
หลังจากพยายามทุกอย่างเพื่อส่งเมลผ่าน gmail โดยใช้ nodemailer การตั้งค่าต่อไปนี้ใช้ได้ผลสำหรับฉัน ..
faizanjehangir

คำตอบ:


138

ฉันแก้ไขสิ่งนี้โดยไปที่ url ต่อไปนี้ (ในขณะที่เชื่อมต่อกับ google ด้วยบัญชีที่ฉันต้องการส่งอีเมล):

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

ที่นั่นฉันเปิดใช้งานแอปที่มีความปลอดภัยน้อย

เสร็จแล้ว


1
ทำได้ดี! มันใช้งานได้แม้ว่าฉันจะไม่คิดว่าเป็นความคิดที่ดีที่สุด ... ฉันได้รับอีเมลฉบับแรกของฉัน .. Thx
ackuser

หากไม่เปิดใช้งานสิ่งนี้จะไม่สามารถใช้งานได้ในสภาพแวดล้อมท้องถิ่น เขาพูดอย่างชัดเจนว่ามันทำงานในสภาพแวดล้อมท้องถิ่นและไม่ทำงานบนเซิร์ฟเวอร์ระยะไกล วิธีแก้ปัญหาสำหรับท่าคืออะไร?
Adithya Sai

สิ่งนี้ไม่สามารถช่วยคุณได้หากคุณมี 2FA auth ในบัญชี gmail ของคุณ
sasha romanov

การรักษาความปลอดภัยต่ำเป็นเพียงชั่วคราวและฉันไม่สามารถใช้งานได้ในการผลิต แต่ฉันพบบทความที่ทำให้การใช้ OAuth ตรวจสอบสิทธิ์ Gmail ง่ายขึ้น [ที่นี่] [1] ด้วยรหัสตัวอย่างและใช้งานได้ดี ในลิงก์นี้
sahli bessam

65

ดูคู่มืออย่างเป็นทางการของ nodemailer ในการเชื่อมต่อ Gmail:

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

-

มันได้ผลสำหรับฉันหลังจากทำสิ่งนี้:

  1. เปิดใช้งานแอปที่มีความปลอดภัยน้อย - https://www.google.com/settings/security/lesssecureapps
  2. ปิดการใช้งาน Captcha ชั่วคราวเพื่อให้คุณสามารถเชื่อมต่ออุปกรณ์ / เซิร์ฟเวอร์ใหม่ - https://accounts.google.com/b/0/displayunlockcaptcha

19
หมายเลข 2 แก้ไขปัญหาของฉัน ฉันไม่พบลิงก์นั้นในการตั้งค่าบัญชีของ Google ขอบคุณ!
programstinator

1
เหมือนกันที่นี่ ก่อนหน้านี้ฉันทำ # 1 และได้รับอีเมลที่ทำงานบน localhost ย้ายไปที่การผลิตและไม่มีอะไรทำงาน # 2 แก้ไขปัญหาการผลิตของฉัน ขอบคุณ
John

51

วิธีแก้ปัญหาง่ายๆ:

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 และด้วยความประหลาดใจของฉันมันใช้งานได้ แต่แล้วเมื่อฉันรีสตาร์ทระบบมันทำให้ฉันมีข้อผิดพลาดเดียวกันดังนั้นฉันจึงต้องไปและเปิดแอพที่มีความปลอดภัยน้อยกว่า (ฉันปิดการใช้งานหลังจากทำงานเสร็จ)

เพื่อความสนุกฉันเพิ่งลองโดยปิด (แอปที่ปลอดภัยน้อยกว่า) และใช้งานได้อีกครั้ง!


1
ขั้นตอนที่ 1 และ 2 มีประโยชน์มาก ขอบคุณ! ฉันลอง step1 ก่อนที่ฉันจะเห็นโซลูชันของคุณและไม่ได้ผล แต่ด้วย step2 มันวิเศษมาก!
MissStack

"smptTransport ไม่ใช่ฟังก์ชัน"
JWiley

ฉันลองใช้ทั้งสองวิธีที่คุณแชร์กับเรา แต่ฉันได้รับข้อผิดพลาดเดียวกันซ้ำแล้วซ้ำเล่า {Error: connect ETIMEDOUT 74.125.68.108:465 ที่ TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1097: 14) errno: ' ETIMEDOUT ', code:' ECONNECTION ', syscall:' connect ', ที่อยู่: '74 .125.68.108', พอร์ต: 465, คำสั่ง: 'CONN'}
Anwar Hussain

@AnwarHussain: ฉันได้รับข้อผิดพลาดเดียวกันอีกครั้ง
Pappa S

44

คุณควรใช้โทเค็น XOAuth2เพื่อเชื่อมต่อกับ Gmail ไม่ต้องกังวล 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);
      });
  });
};

9
มีวิธีที่ง่ายกว่าในการส่งอีเมลใน NodeJS ด้วยบัญชี GMail หรือไม่?
tonymx227


คุณช่วยอธิบายได้ไหมว่า passport.authorize ทำอะไรได้บ้างและทำไมคุณถึงต้องการขอบเขต callbackurl และอื่น ๆ ทำไมคุณไม่สามารถทำได้ด้วย clientId & secret?
Ismail

passport.authorizeคล้ายกับpassport.authenticateยกเว้นว่าจะไม่พยายามอัปเดตเซสชันปัจจุบัน คุณต้องผ่านcallbackURLเพราะหลังจากการจับมือ OAuth Google จำเป็นต้องทราบว่าจะเปลี่ยนเส้นทางผู้ใช้ไปที่ใดเพื่อให้การจับมือเสร็จสมบูรณ์
Laurent Perrin


15

ทำงานได้ดี:

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- สนุก!


11

ปัญหาเดียวกันก็เกิดขึ้นกับฉันเช่นกัน ฉันทดสอบระบบของฉันบน localhost จากนั้นนำไปใช้กับเซิร์ฟเวอร์ (ซึ่งตั้งอยู่ในประเทศอื่น) จากนั้นเมื่อฉันลองระบบบนเซิร์ฟเวอร์ที่ใช้งานจริงฉันพบข้อผิดพลาดนี้ ฉันลองสิ่งเหล่านี้เพื่อแก้ไข:

  1. https://www.google.com/settings/security/lesssecureappsเปิดใช้งาน แต่ไม่ใช่วิธีแก้ปัญหาของฉัน
  2. https://g.co/allowaccessฉันอนุญาตให้เข้าถึงจากภายนอกในระยะเวลา จำกัด และวิธีนี้ช่วยแก้ปัญหาของฉันได้

2
g.co/allowaccessการเชื่อมโยงคือสิ่งที่คงที่ให้กับฉัน (มี lesssecureapps เปิดใช้งานแล้ว) - ขอบคุณ!

10

สำหรับฉันกำลังทำงานในลักษณะนี้โดยใช้พอร์ตและความปลอดภัย (ฉันมีปัญหาในการส่งอีเมลจาก gmail โดยใช้ PHP โดยไม่มีการตั้งค่าความปลอดภัย)

ฉันหวังว่าจะช่วยใครสักคน

var sendEmail = function(somedata){
  var smtpConfig = {
    host: 'smtp.gmail.com',
    port: 465,
    secure: true, // use SSL, 
                  // you can try with TLS, but port is then 587
    auth: {
      user: '***@gmail.com', // Your email id
      pass: '****' // Your password
    }
  };

  var transporter = nodemailer.createTransport(smtpConfig);
  // replace hardcoded options with data passed (somedata)
  var mailOptions = {
    from: 'xxxx@gmail.com', // sender address
    to: 'yyyy@gmail.com', // list of receivers
    subject: 'Test email', // Subject line
    text: 'this is some text', //, // plaintext body
    html: '<b>Hello world ✔</b>' // You can choose to send an HTML body instead
  }

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

exports.contact = function(req, res){
   // call sendEmail function and do something with it
   sendEmail(somedata);
}

การกำหนดค่าทั้งหมดแสดงอยู่ที่นี่ (รวมถึงตัวอย่าง)


10

วิธีแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน ฉันใช้รหัสที่มีอยู่ในเอกสารของ NodeMailer ดูเหมือนว่า:

let transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        type: 'OAuth2',
        user: 'user@example.com',
        serviceClient: '113600000000000000000',
        privateKey: '-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBg...',
        accessToken: 'ya29.Xx_XX0xxxxx-xX0X0XxXXxXxXXXxX0x',
        expires: 1484314697598
    }
}); 

ขอบคุณเพื่อน ! :) thissss ---> host: 'smtp.gmail.com', port: 465, secure: true, Worked for Me
Praveen Vishnu

@PraveenVishnu ไม่มีปัญหาถ้าคุณโหวตคำตอบนี้จะมีคนเห็นมากขึ้น มันอาจช่วยพวกเขาได้เช่นกัน
ฮามิด

สวัสดีฉันรู้ว่านี่เป็นเรื่องเก่าแล้ว แต่คุณคิดว่าคุณได้รับ serviceClient, privateKey และ accessToken จากที่ไหน ขอบคุณ.
Aljohn Yamaro

@AljohnYamaro บริการทางไปรษณีย์จะจัดให้ ในกรณีของฉันมันคือ Gmail สามารถอ่านเพิ่มเติมได้ที่นี่: stackoverflow.com/questions/36214968/…
Hamid


9

ฉันพบวิธีที่ง่ายที่สุดที่อธิบายไว้ในบทความนี้ที่กล่าวถึงในคำตอบของ Greg Tคือการสร้างรหัสผ่านสำหรับแอปซึ่งสามารถใช้ได้หลังจากเปิด 2FA สำหรับบัญชี

myaccount.google.com> การลงชื่อเข้าใช้และความปลอดภัย> การลงชื่อเข้าใช้ Google> รหัสผ่านสำหรับแอป

สิ่งนี้ให้รหัสผ่านอื่นสำหรับบัญชีจากนั้นคุณเพียงกำหนดค่า nodemailer เป็นบริการ SMTP ปกติ

var smtpTransport = nodemailer.createTransport({
    host: "smtp.gmail.com",
    port: 587,
    auth: {
        user: "username@gmail.com",
        pass: "app password"
    }
});

แม้ว่า Google จะแนะนำ Oauth2 เป็นตัวเลือกที่ดีที่สุด แต่วิธีนี้ก็ง่ายและยังไม่ได้รับการกล่าวถึงในคำถามนี้

เคล็ดลับเพิ่มเติม: ฉันพบว่าคุณสามารถเพิ่มชื่อแอปของคุณไปยังที่อยู่ "จาก" ได้และ GMail ไม่ได้แทนที่ด้วยอีเมลของบัญชีเช่นเดียวกับที่คุณพยายามใช้ที่อยู่อื่น กล่าวคือ.

from: 'My Pro App Name <username@gmail.com>'

ใช้สิ่งนี้เสมอ 1. คุณต้องตั้งค่าการตรวจสอบสิทธิ์ 2 โรงงานเพื่อตั้งรหัสผ่านแอป ตรงข้ามกับความปลอดภัยน้อย
gdfgdfg

8

ได้รับการแก้ไขโดยใช้nodemailer-smtp-transportโมดูลภายใน createTransport

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

var transport = nodemailer.createTransport(smtpTransport({
    service: 'gmail',
    auth: {
        user: '*******@gmail.com',
        pass: '*****password'
    }
}));

4

หากคุณใช้ Express จะexpress-mailerห่อหุ้มnodemailerอย่างดีและใช้งานง่ายมาก:

//# config/mailer.js    
module.exports = function(app) {
  if (!app.mailer) {
    var mailer = require('express-mailer');
    console.log('[MAIL] Mailer using user ' + app.config.mail.auth.user);
    return mailer.extend(app, {
      from: app.config.mail.auth.user,
      host: 'smtp.gmail.com',
      secureConnection: true,
      port: 465,
      transportMethod: 'SMTP',
      auth: {
        user: app.config.mail.auth.user,
        pass: app.config.mail.auth.pass
      }
    });
  }
};

//# some.js
require('./config/mailer.js)(app);
app.mailer.send("path/to/express/views/some_view", {
  to: ctx.email,
  subject: ctx.subject,
  context: ctx
}, function(err) {
  if (err) {
    console.error("[MAIL] Email failed", err);
    return;
  }
  console.log("[MAIL] Email sent");
});

//#some_view.ejs
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title><%= subject %></title>
  </head>
  <body>
  ... 
  </body>
</html>

4

รหัสทั้งหมดของคุณใช้ได้เฉพาะสิ่งที่เหลือเพียงไปที่ลิงค์https://myaccount.google.com/security

และเลื่อนลงไปเรื่อย ๆ คุณจะพบว่าอนุญาตแอปที่มีความปลอดภัยน้อย: เปิดและเปิดต่อไปคุณจะไม่พบข้อผิดพลาด



4

ด้วยเหตุผลบางประการการอนุญาตให้กำหนดค่าแอปที่มีความปลอดภัยน้อยกว่าไม่ได้ผลสำหรับฉันแม้แต่แคปต์ชา ฉันต้องทำขั้นตอนอื่นซึ่งเป็นการเปิดใช้งานการกำหนดค่า IMAP:

จากหน้าความช่วยเหลือของ Google: https://support.google.com/mail/answer/7126229?p=WebLoginRequired&visit_id=1-636691283281086184-1917832285&rd=3#cantsignin

  • คลิกการตั้งค่าการตั้งค่าที่ด้านขวาบน
  • คลิกการตั้งค่า
  • คลิกแท็บการส่งต่อและ POP / IMAP
  • ในส่วน "การเข้าถึง IMAP" ให้เลือกเปิดใช้งาน IMAP
  • คลิกบันทึกการเปลี่ยนแปลง

3
exports.mailSend = (res, fileName, object1, object2, to, subject,   callback)=> {
var smtpTransport = nodemailer.createTransport('SMTP',{ //smtpTransport
host: 'hostname,
port: 1234,
secureConnection: false,
//   tls: {
//     ciphers:'SSLv3'
// },
auth: {
  user: 'username',
  pass: 'password'
}

});
res.render(fileName, {
info1: object1,
info2: object2
}, function (err, HTML) {

smtpTransport.sendMail({
  from: "mail@from.com",
  to: to,
  subject: subject,
  html: HTML
}
  , function (err, responseStatus) {
      if(responseStatus)
    console.log("checking dta", responseStatus.message);
    callback(err, responseStatus)
  });
});
}

คุณต้องเพิ่มประเภท secureConnection ในโค้ดของคุณ


2

ฉันใช้ nodemailer เวอร์ชันเก่า 0.4.1 และมีปัญหานี้ ฉันอัปเดตเป็น 0.5.15 และทุกอย่างทำงานได้ดีในขณะนี้

แก้ไข package.json เพื่อแสดงการเปลี่ยนแปลงแล้ว

npm install

3
การอัปเดต npmสำหรับกรณีนั้นจะดีกว่า หากคุณต้องการทราบข้อมูลเพิ่มเติมว่าการอัปเดต npmและการติดตั้ง npmแตกต่างกันอย่างไรโปรดดูคำตอบนี้ - stackoverflow.com/questions/12478679/…
Anthony Akentiev

2

เพียงเข้าร่วมสิ่งเหล่านี้: 1- การรับรองความถูกต้องของ Gmail สำหรับอนุญาตให้อีเมลระดับต่ำไม่ยอมรับก่อนที่คุณจะรีสตาร์ทเบราว์เซอร์ไคลเอนต์ของคุณ 2- หากคุณต้องการส่งอีเมลด้วย nodemailer และคุณไม่ต้องการใช้โปรโตคอล xouath2 ที่นั่นคุณควรเขียนว่า secureconnection: false ดังด้านล่าง

const routes = require('express').Router();
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');



routes.get('/test', (req, res) => {
  res.status(200).json({ message: 'test!' });
});

routes.post('/Email', (req, res) =>{

    var smtpTransport = nodemailer.createTransport({
        host: "smtp.gmail.com",
        secureConnection: false,
        port: 587,
        requiresAuth: true,
        domains: ["gmail.com", "googlemail.com"],
        auth: {
            user: "your gmail account", 
            pass: "your password*"
        }
});  

  var mailOptions = {
      from: 'from@gmail.com',
      to:'to@gmail.com',
      subject: req.body.subject,
      //text: req.body.content,
      html: '<p>'+req.body.content+' </p>'
  };

  smtpTransport.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log('Error while sending mail: ' + error);
    } else {
        console.log('Message sent: %s', info.messageId);
    }
    smtpTransport.close();
});  

})

module.exports = routes;

smtpTransport ใช้สองครั้งอันไหนคืออะไร?
Biranchi

Realy มันชัดเจนมากอย่างแรกคือการสร้างการตั้งค่า smtpTransport และวินาทีสำหรับการส่งอีเมลโดยใช้การตั้งค่านี้ซึ่งทำงานได้อย่างสมบูรณ์ใน firebase nowdays
Hamit YILDIRIM

2

ติดตั้ง nodemailer ก่อน

npm install nodemailer  --save

นำเข้าไฟล์ js

const nodemailer = require("nodemailer");

const smtpTransport = nodemailer.createTransport({
    service: "Gmail",
    auth: {
        user: "example@gmail.com",
        pass: "password"
    },
    tls: {
        rejectUnauthorized: false
    }
});






 const mailOptions = {
        from: "example@gmail.com",
        to: sending@gmail.com,
        subject: "Welcome to ",
        text: 'hai send from me'.
    };


    smtpTransport.sendMail(mailOptions, function (error, response) {
        if (error) {
            console.log(error);
        }
        else {
            console.log("mail sent");
        }
    });

ทำงานในแอปพลิเคชันของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.