تقنية

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

Gmail Access Refresh Token

بعد ذلك ، سننشئ رمزًا تحديثًا باستخدام ملعب 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

بينما يمكنك إرسال رسائل بريد إلكتروني من 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

اترك تعليقاً

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

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