آموزش ساده ارسال ایمیل با PHP

۱۳۸۹/۱۱/۲۳


فرستادن ایمیل تقریباً یک کار روزمره (شاید ساعتمره یا دقیقهمره!) برای سایت هایی ست که کاربران بسیاری دارند می باشد. ارسال ایمیل با php بسیار آسان است. کلاس ها و توابع فراوانی برای این کار وجود دارند. در این آموزش با روش هایی برای ارسال ایمیل آشنا می شوید. همان طور که می دانید ایمیل ها اقسام مختلفی دارند. ایمیل می تواند شامل فایل ضمیمه، تصاویر درونی، فرمت دوتایی(HTML/text) و غیره باشد.

ما با یک ایمیل ساده شروع می کنیم. این ایمیل از تابع ابتدایی ()mail استفاده می کند.

برای این کار از کد زیر استفاده می کنیم:

         
        

حال این کد را تشریح می کنیم:

         date_default_timezone_set("Asia/Tehran");
        

1) در اینجا زمان را بر حسب منطقه جغرافیایی را مشخص کردیم. Asia/Tehran منطقه جغرافیایی ایران را مشخص می کند که در ساعت ۳:۳۰+ واقع است.

         $to = "[email protected]";
        

2) از متغیری دلخواه مانند to$ برای نگهداری آدرس ایمیل مقصد استفاده می کنیم.

         $subject = "Test Text Email Only";
        

3) از متغیری دلخواه مانند subject$ برای نگهداری عنوان ایمیل استفاده می کنیم.

         $headers = "From: [email protected]: Custom PHP Script";
        

4) در اینجا هدری که می خواهیم ارسال شود را تعیین می کنیم. آدرس فرستنده از جمله مواردی است که می توانیم در این هدر استفاده کنیم.

پارامترهای هدر ارسالی با rn از یکدیگر جدا می شوند.

         $body = "Hi.nnHello World!nnRegards,nnWiwit.";
        

5) متن ایمیل را در اینجا قرار می دهیم. همان طور که می دانید n برای ایجاد خط جدید است که در رشته های متنی(text) استفاده می شود.

         mail($to, $subject, $body, $headers);
        

6) در نهایت موارد لازم را در تابع mail قرار می دهیم. هم اکنون ایمیل ارسال شد!

در مرحله بعدی می خواهیم یک ایمیل html ارسال کنیم. شاید تا کنون با یک ایمیل تبلیغاتی برخورد کرده باشید. اکثر این ایمیل ها شامل کدهای html هستند. آن ها چیدمان زیبایی دارند و حاوی جدول ها، رنگ های زیبای نوشته و غیره هستند. آن ها تنها بدنه ایمیل ارسالی را تغییر داده و کدهای html را وارد آن کرده اند و همچنین یک هدر Content-type: text/html به آن اضافه کرده اند.

به مثال زیر نگاه کنید:


, 
Soheil Novinfard rn"; 
$headers .= "From: Me rn"; 
$headers .= "Cc: [email protected]"; 
$headers .= "Bcc: [email protected]";

$body = "


ایمیل آزمایشی


سلام این ایمیل آزمایشی است.


";

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

حال کدهای جدید را بررسی می کنیم:


$to .= ", " . "[email protected]";

1) به قسمت دریافت کننده های اصلی این ایمیل، یک پست الکترونیکی جدید را اضافه کرده ایم. در رشته ی to حتما باید کاراکتر کاما(،) به رشته موجود اضافه شود و در میان ایمیل های دریافت کننده، قرار گیرد.

در PHP از نقطه(.) برای الحاق رشته ها، استفاده می شود.


$headers = "MIME-Version: 1.0rn";

2) در چند کد جدید بعدی هدر های جدیدی به ایمیل اضافه شده است. در اینجا نسخه MIME برای ایمیل ارسالی، تعریف شده است.


$headers .= "Content-type: text/html; charset=utf-8rn";

3) در این هدر ارسالی، نوع ایمیل از نوع html انتخاب شده و اینکودینگ کارکتری آن را از نوع utf-8 انتخاب کرده ایم.

استفاده از اینکودینگ utf-8 برای نمایش صحیح زبان فارسی در ایمیل، الزامی است.


$headers .= "To: Information Department ,

Soheil Novinfard rn";

4) در این هدر، برای دریافت کنندگان ایمیل، نام انتخاب می شود.


$headers .= "Cc: [email protected]";

$headers .= "Bcc: [email protected]";

5) دریافت کنندگان نوع Cc و Bcc نامه مورد نظر ما، در این قسمت هدر مشخص می شوند.






ایمیل آزمایشی





سلام این ایمیل آزمایشی است.





6) در اینجا بدنه ی ایمیل ارسالی از متن به کدهای html تغییر یافته است.

آموزش ما در اینجا به پایان می رسد.

23 دیدگاه در “آموزش ساده ارسال ایمیل با PHP

  1. عبدالماجد در گفت:

    عالی بود .

    پاسخ
  2. paull در گفت:

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

    پاسخ
  3. احمد شعبانی در گفت:

    سلام. وقتتون بخیر.
    من چطور میتونم از این کد در وبسایتم استفاده کنم؟
    من یک صفحه با PHP نوشتم که می خوام در اون یک ایمیل به کاربر بفرستم
    (وقتی کاربر سفارشش کامل میشه، یک ایمیل واسش بفرستم)
    از این کدی که شما قرار دادید چطور میتونم استفاده کنم؟!

    با تشکر-شعبانی

    پاسخ
    • سهیل نوین فرد در گفت:

      با سلام،
      بسیار واضح است، شما در صفحه ای که فرم ثبت نام شما برای پردازش به آن ارسال می شود، به یکی از دو صورت بالا (متنی یا html) ایمیل را ارسال می کنید. شما باید تنها در متغیر to آدرس ایمیل ارسالی از صفحه قبل را وارد کنید و متن دلخواه خود را جایگزین کنید.

      پیروز باشید

      پاسخ
      • مدیر در گفت:

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

        پاسخ
        • سهیل نوین فرد در گفت:

          با سلام،
          منظورتان این است که نتظیمات مربوط به smtp در کد اسکریپت اجرایی باید تنظیم شود؟

          پاسخ
  4. احمد شعبانی در گفت:

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

    ارادتمند-شعبانی

    پاسخ
    • سهیل نوین فرد در گفت:

      شما احتمالا ایمیل رو از روی لوکال ارسال نکردید؟
      به نظرم تنظیم SMTP ضروری نیست، من این مورد رو بررسی کردم.
      بازم نظر دوستان رو دنبال می کنم …

      پاسخ
  5. احمد شعبانی در گفت:

    راستی در مورد سایتم باید بگم که من از پرتال دیتالایف استفاده کردم: http://www.forghaniprint.com/
    و برای گرفتن سفارش از یک فرم php استفاده کردم: http://www.forghaniprint.com/sendOrder.php
    (این سایت رو به عنوان پروژه درس کارآفرینی و همچنین پروژه پایانیم راه اندازی کردم.)
    در این صفحه وقتی سفارش با موفقیت ثبت میشه میخوام به کاربر یه ایمیل مبنی بر همین موضوع بدم!

    در مورد ست کردن smtp تو اینترنت سرچ کردم و یه چیزهایی در مورد php.ini دیدم اما نتونستم این فایل رو روی سیستم خودم و روی هاستم پیدا کنم.

    با تشکر از اظهار لطفتون…

    پاسخ
    • مدیر در گفت:

      توی بعضی از سرورهای ویندوزی ممکنه تنظیمات ست نشده باشه
      اما توی سرور های لینوکسی بدون ست کردن تنظیمات smtp می تونید ایمیل ارسال کنید (با استفاده از تابع mail)

      پاسخ
  6. احمد شعبانی در گفت:

    سلام دوستان

    من این کد رو استفاده کردم:

        $to = "[email protected]";
        $subject = "Hi!";
        $body = "Hi,nn How are you?";
        $header = "From: ";
        if (mail($to, $subject, $body, $header))
        {
            echo("Message successfully sent!");
        }
        else
        {
            echo("Message delivery failed...");
        }
    

    وقتی سفارش تکمیل میشه فقط این پیغام ظاهر میشه:

    Message successfully sent!

    اما هیچ ایمیلی برام ارسال نمیشه!

    ممنون میشم کمک کنید.

    پاسخ
    • سهیل نوین فرد در گفت:

      با سلام،
      با توجه به دقت نظر شما، من یک بار دیگر این کد رو بر روی سرور خودم تست کردم و ارسال شد!
      حتی همین کد بالا را به خود شما هم ارسال کردم، ایمیل خودتون رو چک کنید.
      اگر مشکل باز هم حل نشد با مسئولان هاست و سرور خود تماس حاصل فرمایید.

      پیروز باشید

      پاسخ
  7. یونا در گفت:

    سلام ، ضمیمه کردن فایل attach منظورتونه؟ توضیح که ندادید چه جوریه؟؟؟

    پاسخ
    • سهیل نوین فرد در گفت:

      در این آموزش تنها دو نوع متنی و Html توضیح داده شده است. ارسال فایل ضمیمه و ارسال همگانی در آینده توضیح داده می شود.

      پاسخ
  8. بازپینگ: اراسال ایمیل با php | گــــوگــــــل

  9. adel در گفت:

    سلام . من وقتی می خواهم ایمیل ارسال کنم با این خطا روبرو می شم.
    Warning: mail() [function.mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first
    مشکل کار کجاست ؟

    پاسخ
  10. fatemeh در گفت:

    سلام من هم همچین مشکلی رو که آقای adel گفتن دارم. مشکل کجاست؟

    پاسخ
  11. asd در گفت:

    asd

    پاسخ
  12. ابراهیم در گفت:

    سلام. من یه فرم ثبت نام طراحی کرده ام که حاوی فیلدهایی مثل “نام” – “تلفن” – “ایمیل” – “ادرس” – “شماره حساب” و… هست. توی موتور ارسال کنند این خط کدها را قرار داده ام:

    $to = 'MY EMAIL';
    $from = 'NAME';
    $message = $_REQUEST['content'];
    $subject = 'SUBJECT';
    $header = "From: ” .”rn”;
    $send = @mail($to, $subject, $message, $header);
    if(!$send){
    die();
    }
    ?>

    بدین ترتیب ایمیل ارسال میشه ولی فقط اطلاعات فیلدی که با نام content هست رو ارسال می کنه! هرکاری هم کردم اطلاعات فیلدهای دیگه رو ارسال نمی کنه! میشه راهنمائیم کنید چجوری و در کجای این کدها باید نام فیلدهای دیگه رو به بدنه ی ایمیل اضافه کنم!؟

    فیلدهام:

    Name: نام و نام خانوادگی
    Phone: تلفن
    Address: آدرس
    accoun: شماره حساب
    content: پیغام
    اگر هم کسی لطف کنه بگه چجوری میشه اطلاعات این فیلدها رو بصورت جدول و منظم ایمیل کنم ممنون میشم.
    یعنی مثلا ی جدول واسم ایمیل بشه که اطلاعات فیلدها منظم داخلش قرار بگیره!
    یکدنیا ممنونم. خیلی از کدنویسی سردرنمیارم. ممنون میشم کدش رو بهم بگید.
    مرسیییییییییییییییییییییییی

    پاسخ
  13. رضا صداقه مسکن در گفت:

    با سلام
    دوستان تابع mail زیاد نیازی به تنظیمات smtp نداره، بعضی از دوستان که فرمودن ایملی ارسال نمیشه دلیلش شاید بخاطر این باشه که تابع mail در extension های php هاست شما فعال نباشه که بایستی توسط مدیر سرور این گزینه در php.ini تنظیم شود.
    یک سوالی هم داشتم اینه که از دوستان آیا میدونن چیکار میشه کرد که ایمیل ارسال شده با این تابع بصورت spam در میل باکس قرار نگیره؟؟

    ممنون

    پاسخ
  14. bahram در گفت:

    مرسی

    پاسخ
  15. ali aghaei در گفت:

    salam,khoobin?
    kheili mamnoon az zahamati ke mikeshin
    man mikham ye axe tablighatiro baraye tedade ziadi email ersal konam che tor bayad in kar ro anjam bedam,momkene rahnamaee konin?
    mamnoon misham

    پاسخ
  16. amirsalartavakoli در گفت:

    بسیار عالی بود خیلی

    پاسخ

پاسخ دهید

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

شما می‌توانید از این دستورات HTML استفاده کنید: