ارسال ایمیل در Node.js
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 4 دقیقه

ارسال ایمیل در Node.js

در این آموزش می خواهیم درمورد ارسال ایمیل در Node.js صحبت کنیم. برای این کار می خواهیم از فریمورک Express.js و پکیج NodeMailer استفاده کنیم. در انجمن ها و بلاگ های مختلف کاربران در مورد ارسال ایمیل با استفاده از Node.js برای انجام کارهایی مثل تایید اکانت, تغییر پسورد و تبلیغات سوال می پرسند. تصمیم گرفتیم یک مقاله درمورد این موضوع داشته باشیم و یک اپلیکیشن Node بسازیم که قابلیت ارسال ایمیل به هر اکانتی رو داشته باشه.

آماده سازی پروژه
فایل package.json رو بسازید و اون رو در فولدر مورد نظرتون قرار بدید. کد زیر رو در اون وارد کنید :

{

  "name": "email-node",

  "version": "1.0.0",

  "dependencies": {

    "nodemailer": "latest",

    "express": "latest"

  }

}

بعد از اینکه این کارو انجام دادید با استفاده از Command وارد اون فولدر شده و دستور npm install رو تایپ کنید تا وابستگی های مورد نیاز پروژه مون رو دانلود کنه. وقتی نصبش کامل شد شما فولدر node_modules رو در مسیر پروژه می بینید.

آماده سازی Server.js

بیاییم با ساخت فایل سرورمون شروع کنیم. کد زیر رو با نام "Server.js" بسازید :

var express=require('express');

var nodemailer = require("nodemailer");

var app=express();

app.listen(3000,function(){

console.log("Express Started on Port 3000");

});

این بلاک پایه ی اپلیکیشن ماست. اگر شما این رو در ترمینال اجرا کنید یک پیام console مشاهده می کنید. حالا می خواهیم چند منطق مسیریابی به اپلیکیشن اضافه کنیم تا مشخص بشه درخواست هایی که از مرورگر میاد به چه شکل پاسخ داده بشه. کد زیر رو بالای خط app.listen وارد نمایید :

app.get('/',function(req,res){

res.sendfile('index.html');

});

حالا وقتی بخواهید از طریق مرورگر به اپلیکیشن دسترسی داشته باشید, اون یک فایل index.html رو به عنوان پاسخ برمی گردونه. در مورد کد پایه ی HTML :

<div id="container">

<div></div>

Node.JS Email application

<div>

<h1>Mailer In Node.JS</h1>

<input id="to" type="text" placeholder="Enter E-mail ID where you want to send" />

<input id="subject" type="text" placeholder="Write Subject" />

<textarea id="content" cols="40" rows="5" placeholder="Write what you want to send"></textarea>

<button id="send_email">Send Email</button>

<span id="message"></span>

</div>

حالا کار بعدی که باید انجام بدیم اینه که وقتی کاربر دکمه ی "Send Email" رو میزنه, سرور خودمون رو از صفحه HTML صدا بزنیم. برای انجام این کار من از JQuery استفاده می کنم. این قطعه کد Jquery داخل صفحه ی HTML هست :

<script>

$(document).ready(function(){

    var from,to,subject,text;

    $("#send_email").click(function(){      

        to=$("#to").val();

        subject=$("#subject").val();

        text=$("#content").val();

        $("#message").text("Sending E-mail...Please wait");

        $.get("http://localhost:3000/send",{to:to,subject:subject,text:text},function(data){

        if(data=="sent")

        {

            $("#message").empty().html("



Email is been sent at "+to+" . Please check inbox!



");

        }



});

    });

});

</script>

نکته : در get$ ما داریم اپلیکیشنمون رو با "send/" به عنوان یک مدیریت کننده صدا میزنیم حالا باید مسیر رو به فایل Server.js بیافزاییم تا به این درخواست پاسخ بده. پس بیاییم چند خط کد برای این کار اضافه کنیم. کد زیر رو پایین ('/')app.get در فایل Server.js اضافه کنید :

app.get('/send',function(req,res){

//code to send e-mail.

//Will be shown soon.

});

افزودن کد NodeMailer

حالا ما باید سیستم ایمیل رو کنترل کنیم. اول از همه باید Mail Transport System یا همون SMTP رو تعریف کنیم تا اینکه از آدرس ایمیل موردنظرمون بتونیم ایمیل ارسال کنیم. برای راحتی کار شما میتونید اکانت Gmail خود و پسوردش رو وارد کنید. این کد رو در فایل Server.js و پایین خط 'var app=()express" وارد کنید :

var smtpTransport = nodemailer.createTransport({

    service: "gmail",

    host: "smtp.gmail.com",

    auth: {

        user: "",

        pass: ""

    }

});

ما از این آبجکت برای ارسال ایمیل استفاده می کنیم. طرح کلی اپلیکیشن اینه که وقتی کاربر روی دکمه ی 'Send email' کلیک کرد, ایمیل موردنظر ارسال بشه و ما این بخش رو در مسیر ('app.get('/send انجام دادی. پس در اون بلاک کد زیر رو اضافه کنید :

var mailOptions={

   to : req.query.to,

   subject : req.query.subject,

   text : req.query.text

}

console.log(mailOptions);

smtpTransport.sendMail(mailOptions, function(error, response){

if(error){

console.log(error);

res.end("error");

}else{

console.log("Message sent: " + response.message);

res.end("sent");

}

});

در کد بالا ما متغیرهای GET که از طریق صفحه HTML فرستاده شده بود رو خوندیم و تابع '()sendMail' رو از طریق آبجکت Transport که در بالا ساخته بودیم, صدا زدیم.

این فایل کامل Server.js هست :


var express=require('express');

var nodemailer = require("nodemailer");

var app=express();

/*

    Here we are configuring our SMTP Server details.

    STMP is mail server which is responsible for sending and recieving email.

*/

var smtpTransport = nodemailer.createTransport({

    service: "gmail",

    host: "smtp.gmail.com",

    auth: {

        user: "",

        pass: ""

    }

});

/*------------------SMTP Over-----------------------------*/



/*------------------Routing Started ------------------------*/



app.get('/',function(req,res){

    res.sendfile('index.html');

});

app.get('/send',function(req,res){

    var mailOptions={

        to : req.query.to,

        subject : req.query.subject,

        text : req.query.text

    }

    console.log(mailOptions);

    smtpTransport.sendMail(mailOptions, function(error, response){

     if(error){

            console.log(error);

        res.end("error");

     }else{

            console.log("Message sent: " + response.message);

        res.end("sent");

         }

});

});



/*--------------------Routing Over----------------------------*/



app.listen(3000,function(){

    console.log("Express Started on Port 3000");

});

و این هم فایل کامل HTML به همراه استایل ها و اسکریپت ها :


<html>

<head>

<title>Node.JS Email application</title>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><script>// <![CDATA[

$(document).ready(function(){

    var from,to,subject,text;

    $("#send_email").click(function(){      

        to=$("#to").val();

        subject=$("#subject").val();

        text=$("#content").val();

        $("#message").text("Sending E-mail...Please wait");

        $.get("http://localhost:3000/send",{to:to,subject:subject,text:text},function(data){

        if(data=="sent")

        {

            $("#message").empty().html("



Email is been sent at "+to+" . Please check inbox!



");

        }



});

    });

});

</script>

</head>

<body>

<div id="container">

<h1>Mailer In Node.JS</h1>

<input id="to" type="text" placeholder="Enter E-mail ID where you want to send" />

<input id="subject" type="text" placeholder="Write Subject" />

<textarea id="content" cols="40" rows="5" placeholder="Write what you want to send"></textarea>

<button id="send_email">Send Email</button>

<span id="message"></span>

</div>

</div>

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید