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

يصف هذا البرنامج التعليمي خطوة بخطوة كيفية الاتصال بخادم Gmail SMTP لإرسال رسائل البريد الإلكتروني من جهاز Node.js
تطبيق ويب يمكن نشره على Google Cloud Functions أو AWS Lambda أو Cloud Run أو تشغيله على جهازك المحلي.
وعلى عكس معظم البرامج التعليمية الأخرى لـ Node SMTP التي تستخدم مجموعة اسم المستخدم وكلمة المرور، يستخدم هذا الأسلوب OAuth ولا يتطلب منك تشغيل الوصول إلى التطبيقات الأقل أمانًا في حساب Google الخاص بك.
إنشاء بيانات اعتماد Gmail OAuth
قم بإنشاء مشروع Google Cloud جديد وقم بتمكين Gmail API كما هو موضح في البرنامج التعليمي السابق.
في قسم واجهات برمجة التطبيقات والخدمات، انقر على بيانات الاعتماد وانقر على إنشاء بيانات الاعتماد > معرف عميل 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، فسيتم عرض إصدار النص العادي.
تصحيح نطاق Gmail OAuth
بينما يمكنك إرسال رسائل البريد الإلكتروني من Gmail باستخدام https://www.googleapis.com/auth/gmail.send
النطاق، سوف تحتاج إلى استخدام المقيد https://mail.google.com/
نطاق Gmail SMTP. إذا كان عميل OAuth يستخدم نطاقًا مختلفًا عند طلب أذونات لمستخدم ما، فسيقوم التطبيق بإرجاع الملف 535-5.7.8 Username and Password not accepted
خطأ.