ارسال ایمیل با PHP

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

در زبان برنامه نویسی محبوب PHP توابعی به صورت پیشفرض برای ارسال ایمیل وجود دارد که گزینه های بسیاری را برای ارسال ایمیل در اختیار برنامه نویسی قرار میدهد. با استفاده از تابع معرفی شده در پی اچ پی، میتوانیم ایمیل های متنی یا ایمیل هایی با محتوای HTML حتی همراه با فایل ضمیمه ارسال کنیم.

البته استفاده از این نوع ارسال ایمیل در یک برنامه، بعضاً ممکن است به دلیل محدودیت های سرور، در مقیاس بسیار بزرگ چندان کارآمد نبوده و موجب شود به سمت روش های دیگری روی آوریم. اما در مقیاس معمولی، روشی خوب، مناسب و ساده است.

 

در برنامه های تحت وب، ممکن است به دلایل مختلفی نیاز به ارسال ایمیل احساس شود، برخی از این دلایل عبارتند از:

  • اطلاع رسانی کاربران از رویدادهای مهمی که در سیستم رخ داده است.
  • کاربران بتوانند از طریق فرم های تماس، با مسئول سایت ارتباط برقرار کنند.
  • توسعه دهنده یا پشتیبان سیستم از وضعیت پیش بینی نشده و خطاهای احتمالی سیستم مطلع شود.
  • ارسال خبرنامه به کاربران مشترک
  • ارسال ایمیل خوش آمد گویی / فعالسازی حساب کاربری و یا فراموشی رمز عبور برای کاربران
  • ارسال ایمیل های مرتبط با کاربران نظیر فاکتور، وضعیت سفارش، اطلاعات سفارش و …

 

همانطور که میبینید با اهداف مختلفی میتوانیم در سیستم خود امکان ارسال ایمیل را در نظر بگیریم.

 

ارسال ایمیل با تابع mail در PHP

یکی از ساده ترین روش های ارسال ایمیل در پی اچ پی استفاده از تابع mail() که در این زبان از پیش تعریف شده است، می باشد. این تابع از پروتکل SMTP استقاده کرده و بدون درخواست نام کاربری و رمز عبور مربوط به ایمیل تعریف شده، اقدام به ارسال ایمیل از سرور میکند.

ساختار کلی تابع mail() به صورت زیر است.

mail( TO, SUBJECT, MESSAGE, HEADERS, PARAMETERS );

 

سه آرگوما اول این تابع به صورت اجباری و دو پارامترد یگر اختیاری است.

  • پارامتر TO : آدرس ایمیل دریافت کننده یا دریافت کنندگان ایمیل را مشخص میکند.
  • پارامتر SUBJECT : مشخص کننده موضوع ایمیل ارسال شده می باشد که در صندوق پستی دریافت کننده نمایش داده میشود.
  • پارامتر MESSAGE : محتوای پیامی است که قرار است به صورت ایمیل به دریافت کننده (ها) ارسال شود. این پیام میتواند چند خطی باشد با این شروط که هر خط با کاراکتر خط جدید (\n) از یکدیگر جدا شده و هر خط حداکثر حاوی 70 کاراکتر باشد.
  • پارامتر HEADERS : هدرهای افزوده شده برای ایمیل را مشخص میکند. این هدرها شامل آدرس فرستنده ایمیل و مقادیر BCC و CC و … می باشد.
  • پارامتر PARAMETERS : پارامترهای اضافی برای برنامه های پست الکترونیک را مشخص میکند.

 

توجه داشته باشید که برای مشخص کردن چند گیرنده برای ایمیل ارسالی، میتوان در پارامتر اول تابع mail()، تمام آدرس های گیرندگان را که با علامت کاما (,) از یکدیگر جدا شده اند را قرار داد.

 

پس از صدا زده شدن تابع mail()، سعی میشود ایمیل مورد نظر ارسال شود. به عنوان خروجی تابع، اگر true داشته باشیم، به این معناست که ایمیل به موفقیت از سرور ما ارسال شده و در صورتی که با false مواجه شویم، متوجه خواهیم شد مشکلی در ارسال ایمیل به وجود آمده است.

سه پارامتر اول به عنوان ورودی تابع، مشخص و واضح است. در ادامه ابتدا به بررسی چگونگی تعریف هدرها برای یک ایمیل خواهیم پرداخت و سپس ساختار کلی ارسال یک ایمیل را بررسی میکنیم.

 

تنظیم هدر (header) برای ایمیل در PHP

همانطور که در ابتدای آموزش گفته شد، هدرها برای مشخص کردن تنظیمات و اطلاعات اضافی ایمیل در حال ارسال استفاده میشوند. به عنوان مثال میتوان با استفاده از هدرهای ایمیل، آدرس فرستنده، آدرس های گیرنده به صورت BCC و CC و نیز فرمت و کاراکتر سِت (یونی کد یا charset) ایمیل را مشخص کنیم.

در صورتی که بخواهیم به همراه ایمیل، فایلی را به عنوان ضمیمه (attachment) ارسال کنیم، می بایست در header ایمیل تعریف شود.

یک ساختار ساده برای هدر ایمیل را میتوان به صورت زیر در نظر گرفت.

<?php
    $header = "From:sender@domain.com \r\n";
    $header .= "Cc:cc@targetdomain.com \r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-type: text/html\r\n";
?>

 

نوع header یک ساختار متنی است که با راحتی قابل خواندن و فهمیدن است. در صورتی که کدهای ایمیل های دریافتی خود در پست الکترونیکی تان را نیز بررسی کنید، معمولاً در ابتدای تمام ایمیل های ساختاری مشابه ساختار فوق را مشاهده خواهید کرد که میتواند حاوی اطلاعاتی در مورد سرور ارسال کننده ایمیل باشد.

در قطعه کد فوق مشخص است که ابتدا فرستنده ایمیل (sender@domain.com) را مشخص کرده ایم، سپس یک دریافت کننده مخفی به صورت cc تعریف کرده و در ادامه ورژن ارسال ایمیل و نوع محتوای درون پیام (Message) را مشخص کرده ایم.

کاراکترهای \r\n در انتهای هر خط، به معنی ایجاد خط جدید است. یعنی هر کدام از اطلاعات فوق را در یک خط نوشته و به تابع میدهیم.

در سومین خط، یک ورژن برای MIME انتخاب کرده ایم. MIME در حقیقت یک استاندارد جهانی برای ارسال و دریافت ایمیل است که از طریق این استاندارد ایمیل های ارسالی در دستگاه های مختلف به خوبی شناخته و خوانده میشود. (MIME مخفف Multipurpose Internet Mail Extensions)

 

اطلاعات هدر ایمیل را به صورت مرتب تر و کلی تر میتوانیم به صورت زیر نیز تعریف کنیم.

<?php
    $headers  = "From: Sender Name < sender@domain.com >\n";
    $headers .= "Cc: CC Name < cc@targetdomain.com >\n"; 
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=utf-8\r\n";
?>

 

در قسمت Content-Type مقداری نیز برای یونی کد (charset) محتوا مشخص کرده ایم.

 

مقادیر دیگری نیز میتوانیم به عنوان هدر در ایمیل خود ارسال کنیم.

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

Reply-To: reply@domain.com

 

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

 

ویژگی های دیگری نیز میتوان تعریف کرد که از اهداف این آموزش خارج است، اما میتوانید به جستجو در مورد نحوه تعریف اولویت (priority)، سیستم و ورژن پلتفرم فرستنده ایمیل و … بپردازید.

 

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

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

<?php
    $to = "user@mailserver.com";
    $subject = "موضوع ایمیل";

    $message = "سلام! \n این یک ایمیل برای تست ارسال می باشد. ";
    $header = "From:sender@domain.com \r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-type: text/html\r\n";
    
    $res = mail ($to,$subject,$message,$header);
    
    if( $res == true ) {
       echo "ایمیل با موفقیت ارسال شد!";
    }else {
       echo "مشکلی در ارسال ایمیل به وجود آمده است!";
    }
?>

 

ارسال ایمیل با قالب html در php

در حالت عادی، زمانی که اقدام به ارسال ایمیل با استفاده از تابع mail() میکنیم، با محتوای متن پیام ما به صورت متن ساده (plain text) برخورد میشود. در صورتی که بخواهیم در متن ایمیل خود از تگ های HTML نیز استفاده کنیم، میتوان هماننده ویژگی هایی که بالاتر تعریف شد، در قسمت content-type خود مشخص کنیم که ایمیل حاوی تگ های html نیز هست. به این صورت پیام های ارسالی ما به همراه با قالب بندی انجام شده با html ارسال میشود.

<?php
    $to = "user1@mailserver.com, user2@mailserver.com";
    $subject = "ایمیل با ساختار html";

    $message = '<html><head>';
    $message .= '<style>.colored{color:red;}</style>';
    $message .= '</head><body>';
    $message .= '<p>کاربر گرامی، سلام</p>';
    $message .= '<p class="colored">این یک متن با رنگ متفاوت در ایمیل ارسالی است!</p>';
    $message .= '</body></html>';

    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
    $headers .= 'From: <test@domain.com>' . "\r\n";

    mail($to, $subject, $message, $headers);
?>

 

 

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