تقنية

كيفية استخدام خادم 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

رمز تحديث الوصول إلى 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 المرسل

تصحيح نطاق 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 خطأ.



Source link

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى