تعداد بازدید: 2562

ارسال و دریافت ایمیل در php

قوانین حکم فرما بر دنیای وب را پروتکل می نامیم. پروتکل http که در سرور ها برای ایجاد پاسخ به درخواست ها در برخی تکنولوژی ها نظیر REST استفاده می شود و پروتکل SMTP که برای ارسال ایمیل استفاده می شود و پروتکل FTP که برای کار با فایل استفاده می شود.

هر تکنولوژی بر بستر یک پروتکل قابل استفاده است. به طور مثال برای استفاده از سرور ارسال ایمیل باید درخواستی بر بستر پروتکل SMTP ارسال گردد. هر درخواست بر بستر پروتکل از قسمت های زیر تشکیل شده است :

  • protocol : نام پروتکل که می تواند smtp , imap , http , ftp … باشد.
  • host : آدرس هاست که معمولا دامنه اصلی سرور می باشد مثلا gnutec.net , gmail.com , …
  • port : هر پورت رمزنگاری های خاص خود را می تواند داشته باشد. گاها استفاده از پورت خاص نشانگر ویژگی های خاص درخواست می باشد.
  • authentication : هر درخواست در صورت نیاز باید احراز هویت شود که در پروتکل های مختلف به اشکال مختلف قابل پیاده سازی است.
  • header : اطلاعات و جزئیات مربوط به درخواست را ما در header های درخواست قرار می دهیم که سرور از آن ها استفاده می کند.

پروتکل ارسال ایمیل SMTP

پروتکل ارسال ایمیل یا SMTP (Simple Mail Transfer Protocol) که هر کس بخواهد ایمیلی ارسال کند باید قوانین آن را رعایت کند (مثلا بر مبنای این قوانین header بگذارد).

  • پورت 25 : پورت پیش فرض و بدون رمزنگاری ( معمولا در سرورها بسته است)
  • پورت 465 : که به صورت رمز نگاری شده و برای ارسال پیام های امن SMTP استفاده می شود.
  • پورت 2525 (یا 587) : زمانی که پورت 25 بسته شده باشد با استفاده از این پورت می توان به صورت رمزنگاری نشده با SMTP ایمیل ارسال کنید.

برای ارسال ایمیل یا از SMTP خود سروری که کد روی آن قرار دارد استفاده می کنیم (که باید آن سرور به پروتکل SMTP مجهز باشد) یا به یک سرور SMTP دیگر متصل می شویم.

یک ایمیل تشکیل شده از یک بدنه و یک سری اطلاعات از جزئیات فرستنده و گیرنده که همگی در header ها ذخیره می شوند. زمانی که یک ایمیل از طریق php ارسال می کنیم می توانیم header را با توجه به ساختار تعیین شده در پروتکل SMTP تعیین کنیم.

$to = "a.sabagh72@gmail.com";
$subject = "courseExample";
$body = "hello world";
$header = "From: info@asabagh.ir";
$result = mail($to,$subject,$body,$header);

برخی هدر های مهم در پروتکل SMTP :

From : این هدر مشخص می کند که این پیام از طرف چه کسی آمده است. معتبر بودن مقدار From در spam تشخیص داده نشدن ایمیل تاثیر دارد.

From: Abolfazl Sabagh <info@asabagh.ir>

Subject : موضوع ایمیل.

Subject: article: How to Trace a Email

To : فرد گیرنده.

To: user@example.com

Return-Path : ایمیل برای پاسخ که معادل همان Reply-to می باشد.

Return-Path: <info@asabagh.ir>

Content-Type : فرمت بدنه ایمیل که می تواند از ساختار text/html با یونیکد UTF-8 استفاده کند.

Content-type: text/html;charset=UTF-8

Cc : مخفف Carbon Copy می باشد و یعنی این که یک کپی از این ایمیل به فردی ارسال گردد.

Cc: info@asabagh.ir

Bcc : مخفف Blind carbon copy می باشد که همانند Cc است با این تفاوت که به در اطلاعات ایمیل مشخص نمی شود که به این فرد هم ایمیل ارسال شده است.

ساختار یک درخواست SMTP به شکل زیر است که هدر ها نوشته می شوند بعد : بعد فاصله و مقدار هدر و در انتهای آن هم خط بعد (\r\n) .

From: Abolfazl Sabagh <info@asabagh.ir>
Subject: article: How to Trace a Email
Date: January 25, 2011 3:30:58 PM PDT
To: user@example.com
Message Body: This is a KnowledgeBase article that provides information on how to find email headers and use the data to trace a email.

با استفاده از php می توان این هدر ها را به شکل زیر set کرد:

$to = "a.sabagh72@gmail.com";
$subject = "HTMLcourseExample";
$body = "<b>hello</b> world<hr>send mail with mail function";
$headers = "From: Abolfazl Sabagh <info@asabagh.ir>" . "\r\n"
        . "MIME-Version: 1.0" . "\r\n"
        . "Content-type: text/html;charset=UTF-8" . "\r\n";
$result = mail($to,$subject,$body,$headers);

PHP Mailer

یک کتابخانه برای ارسال ایمیل در PHP وجود دارد که فارغ از set کردن smtp header می توان ایمیل ارسال کرد.(این کتابخانه در درون خود header را ست می کند و در نهایت برای شما متدی ارائه می دهد)

composer require phpmailer/phpmailer

در بسیاری از پروژه های مبتنی بر زبان php نظیر WordPress و Laravel این کتابخانه به صورت پیش فرض نصب است و توابع این پروژه ها بر اساس این کلاس عمل می کند.

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->Subject = 'phpmailer-courseExample';
$mail->Body = "First <b>Email</b> with smtp class";
$mail->setFrom('a.sabagh72@gmail.com', 'Abolfazl Sabagh');
$mail->addReplyTo("info@asabagh.ir");
$mail->addAddress("a.sabagh72@gmail.com");
$mail->isHTML(TRUE);
try{
   $result = $mail->send();
}catch(Exception $e){
   $e->getMessage();
}

با استفاده از کتابخانه PHPMailer می توان به یک سرور خارجی متصل شد و از smtp آن برای ارسال ایمیل استفاده کرد. برای این کار باید از متد isSMTP استفاده کرد.

$mail->SMTPDebug = 2;                                       // Enable verbose debug output
$mail->isSMTP();                                            // Set mailer to use SMTP
$mail->Host       = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth   = true;                                   // Enable SMTP authentication
$mail->Username   = 'user@example.com';                     // SMTP username
$mail->Password   = 'secret';                               // SMTP password
$mail->SMTPSecure = 'tls';                                  // Enable TLS encryption, `ssl` also accepted
$mail->Port       = 587;

پروتکل دریافت ایمیل IMAP , POP3

ما دو پروتکل برای دریافت ایمیل داریم که تفاوت هایی با هم دارند. POP3 و IMAP دو پروتکل مهم دریافت ایمیل هستند.

ویژگی های پروتکل POP3 :

  • پس از خواندن ایمیل را از سرور پاک می کند.
  • کل ایمیل را می خواند و امکان خواندن اجزای ایمیل به صورت مجزا نیست.
  • پورت 110 که به صورت پیش فرض است و رمزنگاری نشده می باشد.
  • پورت 995 که به صورت رمزنگاری شده و برای برقراری ارتباطات امن POP3 مورد استفاده می باشد.

ویژگی های پروتکل IMAP :

  • پس از خواندن ایمیل روی سرور باقی می ماند.
  • می توان اجزای خاص از ایمیل را برگرداند.(headerinfo , structure , body)
  • پورت 143 که به صورت پیش فرض و رمزنگاری نشده است.
  • پورت 993 که به صورت رمزنگاری شده و برای برقراری ارتباطات امن IMAP مورد استفاده قرار می گیرد.

در کل می توان گفت که پروتکل IMAP محبوب تر است برای دریافت ایمیل ، همچنین یک افزونه PHP هم در این رابطه برای پروتکل IMAP داریم (imap.dll) که باید فعال باشد.

این افزونه توابع بسیاری در رابطه با دریافت اطلاعات ایمیل دارد که مهم ترین آن ها :

  • imap_open : این تابع ایمیل را باز می کند. پارامتر های مربوط به authentication و path به این تابع داده می شود.
  • imap_search : این تابع در میان دسته بندی های ایمیل می گردد.
  • imap_fetchheaderinfo : برای دریافت هدر های ایمیل.
  • imap_fetchbody : برای دریافت بدنه ایمیل.

در بسیاری از کلاینت های ایمیل از این پروتکل ها استفاده می شود که باید قسمت imap_open برای آن ها پیاده سازی گردد. یعنی path , username , password .به علاوه برای دریافت ایمیل در سرور های معروف مثل gmail ما وب سرویس های خوبی (api) جهت ارائه داریم که کار با آن بهتر است.

مطالب مشابه

آموزش نکات و تکنیک های برنامه نویسی وردپرس

Rest API در وردپرس

سرور ها می توانند پاسخ مناسب به درخواست ها بدهند. درخواست ها و پاسخ یک سری ویژگی ها و داده همراه خود دارند. کدی که در...

ساخت REST API با PHP

API (Application Program Interface) یعنی یک واسط برای استفاده از امکانات نرم افزار. واسط های گرافیکی نرم افزار رو هم می...

هدر های Http در درخواست و پاسخ

Http Headers (قسمت دوم)

http headers حاوی اطلاعاتی در رابطه با نوع درخواست ما می باشند. همچنین یک نوع رابط میان درخواست کلاینت و پاسخ سرور در...

هدر های Http در درخواست و پاسخ

Http Headers (قسمت اول)

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

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

یک دیدگاه برای ارسال و دریافت ایمیل در php

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *