كيفية استخدام خادم Gmail SMTP لإرسال البريد الإلكتروني

يصف هذا البرنامج التعليمي خطوة بخطوة كيف يمكنك الاتصال بخادم Gmail SMTP لإرسال رسائل البريد الإلكتروني من أ Node.js
تطبيق الويب الذي يمكن نشره على وظائف Google Cloud أو AWS Lambda أو Cloud Run أو التشغيل على جهازك المحلي.
وعلى عكس معظم البرامج التعليمية SMTP الأخرى التي تستخدم مزيج اسم المستخدم وكلمة المرور ، فإن هذا النهج يستخدم OAUTH ولا يتطلب منك تشغيل وصول التطبيقات الأقل تأمينًا في حساب Google الخاص بك.
إنشاء بيانات اعتماد OAuth Gmail
قم بإنشاء مشروع جديد لـ Google Cloud وقم بتمكين واجهة برمجة تطبيقات Gmail كما هو موضح في برنامج تعليمي سابق.
في قسم واجهات برمجة التطبيقات والخدمات ، انقر فوق بيانات الاعتماد وانقر فوق إنشاء بيانات الاعتماد> معرف عميل Oauth لإنشاء معرف عميل جديد سيتم استخدامه لتحديد تطبيقك إلى خوادم OAUTH من Google.
قم بتعيين نوع التطبيق كـ Web Application
ووضع عنوان URL التالي في Authorized Redirect URI
.
https://developers.google.com/oauthplayground
انقر فوق Create
الزر وسيتم تزويدك بمعرف عميل OAUTH وقيم سرية العميل التي ستحتاجها في الخطوة التالية.
إنشاء رمز تحديث Gmail
بعد ذلك ، سننشئ رمزًا تحديثًا باستخدام ملعب Google Developer Oauth 2.0. تكون رموز الوصول صالحة لمدة ساعة ، لكن رموز التحديث تظل صالحة إلى الأبد (ما لم يتم إلغاؤها يدويًا) ويمكن استخدامها لإنشاء رمز وصول جديد.
انتقل إلى google.com/oauthplayground ، انقر فوق أيقونة الترس وتحقق من الخيار الذي يقول Use your own OAuth credentials
. نسخ معرف العميل وسرية العميل التي أنشأتها في الخطوة السابقة.
داخل Select & Authorize APIs
القسم ، أدخل النطاق https://mail.google.com
وانقر فوق Authorize APIs
زر لإنشاء رمز التفويض.
انقر فوق Exchange authorization code for tokens
لإنشاء رمز التحديث الذي سنطلبه في الخطوة التالية.
قم بإعداد تطبيق Node.js
قم بإنشاء مجلد جديد وتثبيت ملف googleapis
و nodemailer
حزم.
mkdir gmail-smtp-sender
cd gmail-smtp-sender
npm init --y
npm install dotenv googleapis nodemailer --save
touch index.js
إنشاء جديد .env
ملف في المجلد الجذر وأضف بيانات الاعتماد في الملف. أضف الملف إلى .gitignore
لذلك لا تتم إضافته إلى المستودع.
// Replace these with your own credentials
CLIENT_ID = 'r2l82l8.apps.googleusercontent.com'
CLIENT_SECRET = 'GOCSPX-5n00Mqm5Jc45p'
REFRESH_TOKEN = '1//04yt8hEatvIr3uyk-ZJSYIhmYqMk4C4EqfPK24w'
REDIRECT_URL = 'https://developers.google.com/oauthplayground'
افتح index.js
ملف وإضافة الرمز التالي. قد تحتاج إلى استبدال البريد الإلكتروني للمرسل بعنوان البريد الإلكتروني الخاص بحساب Gmail الخاص بك الذي أذن به لإرسال بريد إلكتروني.
اسم خادم Gmail SMTP هو smtp.gmail.com
ومنفذ Gmail SMTP 465
. يمكنك إرسال ما يصل إلى 100 رسالة بريد إلكتروني يوميًا عندما يتم إرسال الرسائل عبر SMTP.
const { google } = require('googleapis');
const nodemailer = require('nodemailer');
require('dotenv').config();
const sendEmail = async () => {
const oauth2Client = new google.auth.OAuth2(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
process.env.REDIRECT_URL
);
oauth2Client.setCredentials({ refresh_token: process.env.REFRESH_TOKEN });
const accessToken = await oauth2Client.getAccessToken();
const myEmail = 'amit@labnol.org';
const smtpTransport = nodemailer.createTransport({
service: 'gmail',
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
type: 'OAuth2',
user: myEmail,
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
refreshToken: process.env.REFRESH_TOKEN,
accessToken
}
});
const mailOptions = {
from: 'Sender Name <amit@labnol.org>',
to: 'Receiver Name <hello@example.com>',
subject: 'Test email 🚀',
text: 'This is a test email from Node.js 🎉',
html: 'This is a <b>test email</b> from Node.js 🎉'
};
try {
const response = await smtpTransport.sendMail(mailOptions);
console.log(`Email sent!`, response);
} catch (f) {
console.error(f.message);
} finally {
smtpTransport.close();
}
};
sendEmail().then(() => console.log('Done!'));
إليك بريدًا إلكترونيًا اختبارًا تم إرساله بواسطة التطبيق. إذا لم يدعم عميل جهاز استقبال البريد الإلكتروني HTML ، فسيتم تقديم إصدار النص العادي.
تصحيح نطاق OAuth Gmail
بينما يمكنك إرسال رسائل بريد إلكتروني من Gmail باستخدام https://www.googleapis.com/auth/gmail.send
النطاق ، ستحتاج إلى استخدام المقيد https://mail.google.com/
نطاق Gmail SMTP. إذا كان عميل Oauth الخاص بك يستخدم نطاقًا مختلفًا عند طلب أذونات للمستخدم ، فسيقوم التطبيق بإرجاع 535-5.7.8 Username and Password not accepted
خطأ.