چگونه توسط Node js ایمیل ارسال کنیم

چگونه توسط Node js ایمیل ارسال کنیم

چگونه توسط Node js ایمیل ارسال کنیم

Send Mail from Node Js

توسط : admin
در این مقاله قصد داریم نحوه ارسال ایمیل در نود جی اس توسط ماژول Node Mailer که یکی از قوی ترین ماژولهای ارسال ایمیل در Nodejs هست رو با هم آموزش ببینیم . و همچنین با برنامه Postman جهت ارسال درخواست به سرور آشنا میشیم .

با سلام خدمت همراهان عزیز.

ارسال ایمیل بخش جدایی ناپذیر در هر وب سایتی هست . امروز با هم  ارسال ایمیل توسط ماژول Node Mailer در نود جی اس ، با استفاده از یک قالب  ایمیل بهمراه  پیوست یک فایل  را پیاده سازی میکنیم . 

 

Node Mailer :

Nodemailer یک ماژول برای برنامه های Node.js است که امکان ارسال ایمیل را آسان می کند. این پروژه در سال 2010 شروع شد که امروزه یکی از بهترین ابزارهایی است که اکثر کاربران Node.js بطور پیش فرض به آن روی آورده اند.

 

ماژول هایی که در این پروژه استفاده میکنیم به ترتیب نصب کنید :

  1. express
  2. nodemailer
  3. nodemailer-express-handlebars

 

که غیر از express که برای ایجاد سرور هست دو ماژول بعدی جهت ارسال ایمیل و همچنین دسترسی به یک قالب ایمیل هست که بدنه این قالب ثابت هست و ما مقادیر مورد نیازمون رو به صورت پارامتر به اون ارسال میکنیم . 

قالب رو براتون در فایل پروژه قرار دادم و در اینجا فقط به بررسی کدها میپردازیم .

 

const express = require("express");
const http = require("http");
const nodemailer = require("nodemailer");
const hbs = require("nodemailer-express-handlebars");
const path = require("path");
const app = express();

app.get("/sendmail", (req, res) => {
  const mailServer = "smtp.gmail.com";
  const mailPort = 465;
  const outboxEmailAddress = "yourmail@gmail.com";
  const emailPassword = "password";

  var transporter = nodemailer.createTransport({
    host: mailServer,
    port: mailPort,
    secure: true, // true for 465, false for other ports
    auth: {
      user: outboxEmailAddress,
      pass: emailPassword
    },
    tls: {
      // do not fail on invalid certs
      rejectUnauthorized: false
    }
  });

  var handlebarsOptions = {
    viewEngine: {
      extName: ".handlebars",
      partialsDir: path.resolve(__dirname, "./templates"),
      layoutsDir: path.resolve(__dirname, "./templates"),
      defaultLayout: "publicEmail.handlebars"
    },
    //viewEngine: 'handlebars',
    viewPath: path.resolve(__dirname, "./templates"),
    extName: ".handlebars"
  };

  transporter.use("compile", hbs(handlebarsOptions));

  const logo = `https://api.nilootech.com/public/publicEmail_files/logo.png`;

  var mailOptions = {
    from: outboxEmailAddress,
    to: "info@nilootech.com",
    bcc: "batis63@yahoo.com",
    template: "publicEmail",
    subject: "تائید ثبت نام",
    context: {
      url: `yoursitename.com/verfiysignup?token=abcdef`,
      title: "کاربر عزیز !",
      logo,
      description: "به سایت ما خوش آمدید"
    },
    attachments: [
      {
        filename: "image.png",
        path: path.resolve(__dirname, "./templates/image.png")
      }
    ]
  };

  transporter.sendMail(mailOptions, function(error, info) {
    if (error) return console.log(error);
    res.status(200).send("mail is sent");
    console.log("Email sent: " + info.response);
  });
});

const server = http.createServer(app);
server.listen(4000, () => console.log(`Listening on port 4000`));

);

 

 

ثابت mailServer جهت معرفی آدرس میل سرور هست که در اینجا ما از جی میل استفاده کردیم .

ثابت mailPort  جهت مشخص شدن پورت میل سرور هست که در صورتیکه میل سرور شما از ssl پشتیبانی میکنه از پورت 465 و در غیر اینصورت از پورت 587 استفاده میشه .

دو ثابت بعدی هم که به ترتیب آدرس ایمیل و رمز ایمیل هست که قراره ایمیل ها از اون ارسال بشن .

حالا ثباتهایی رو که ایجاد کردیم رو به متد ایجاد کننده transporter میدیم .

خوب حالا با تنظیم  آدرس فیزیکی فایل و همینطور اسم فایل ، در متغیر  handlebarsOptions ، تنظیمات قالب ایمیل هم انجام میشه و کافیه این تنظیمات رو به transporter با دستور Use معرفی کنیم .

در متغیر mailOptions  تنظیمات ایمیل ارسالی انجام میشه  :

  • ایمیل ارسال کننده و دریافت کننده
  • انتخاب نام قالب که در این مثال publicEmail هست
  • ارامترهایی که قراره به صورت داینامیک در فایل قالب دریافت کنیم با نامهای دلخواه . در این مثال url , title , logo , description هستند . شما میتونید هر اسمی دوست داشتید با هر مقداری رو به قالب ارسال کنید .
  • فایل  یا فایلهای پیوست که به صورت آرایه ای از آبجکتها که شامل نام و مسیر فایل هست

 

نحوه استفاده از متغیرهای ارسال شده به قالب به صورت {{نام متغیر}} هست .

دیگه کاری نداریم حالا ایمیل رو ارسال میکنیم و در callback تابع پس از ارسال  ، یا ایمیل ارسال شده و یا خطایی رخ میده که ما هر دو مورد رو در لاگ کنسول میتونیم دریافت کنیم .

یادتون باشه برای ارسال ایمیل از طریق سرویس جی میل باید تنظیماتی رو در اکانت خودتون انجام بدید . در غیر اینصورت گوگل اجازه ارسال ایمیل از سرویس های غیر امن رو نمیده و اگر مدت زیادی هست که این تنظیم رو انجام دادید گوگل به خاطر موارد امنیتی مجددا اون رو غیر فعال میکنه و شما باید طبق تصویر زیر با مراجعه به اکانت جی میل این سرویس رو فعال کنید .

منوی تنظیمات اکانت جی میل
مشاهده لینک اکانت جی میل

 

تنظیم سرویس دسترسی به ابزارهای غیر ایمن :

منوی تنظیم دسترسی غیر امن به اکانت جی میل

 

 

حالا میتونید بعد اجرای وب سرویس با دستور node app.js از طریق نرم افزار Postman طبق تصویر زیر دستور ارسال ایمیل رو به webapi خودتون ارسال کنید .

 

ارسال دستور ارسال ایمیل در postman

 

و خروجی ما باید متن mail is sent باشه .

در تصاویر زیر هم میتونید ایمیل دریافت شده به همراه فایل پیوست رو مشاهده کنید .

 

ایمیل دریافت شده از طریق سرویس node js

 

بچه ها فراموش نکنید بعد از دریافت فایل ،  دستور npm i رو جهت نصب ماژولهای برنامه حتما اجرا کنید . خوب امیدوارم این آموزش به شما کمک کرده باشه .

دوستان گلم میتونید فایل فشرده پروژه ارسال ایمیل از طریق nodejs رو از اینجا دانلود کنید . رمز فایل nilootech.com هست .

نظرات :

در عرض چند دقیقه برای ایجاد حساب

کاربری خود اقدام کنید


اکنون حساب کاربری خود را ایجاد کنید!


ایجاد حساب کاربری

با ثبت نام در نیلوتک از آخرین بروز رسانی های آموزش ها و مقالات سایت مطلع شوید