آموزش پیشرفته PHP [گام 3] ارسال ایمیل با PHPMailer

دوره پیشرفته PHP ژانویه 2016 17

در دوره مقدماتی PHP با نحوه استفاده از تابع mail برای ارسال ایمیل آشنا شدید. در این درس روش ارسال ایمیل با استفاده از کلاس PHPMailer رو بهتون آموزش خواهم داد. ویدیو این قسمت را میتوانید از باکس زیر دانلود کنید :

دانلود فیلم آموزشی
لینک دانلود32 مگابایت12 دقیقه

 

کلاس phpmailer از تابع mail در php استفاده میکنه اما در روش ارسال ایمیل با تابع mail اگر نیاز به امکانات بیشتر مثل ارسال فایل و … شد باید با پرتکل SMTP آشنا باشید ؛ در صورتی که در روش ارسال ایمیل با کلاس phpmailer بدون نیاز با آشنایی با پرتکل SMTP و سریع از امکانات این پرتکل استفاده کنید.

در ابتدا باید کلاس PHPMailer را به پروژه تون متصل کنید ، پس از باکس زیر این کلاس را دانلود و فایل class.phpmailer.php در پروژه فراخوانی کنید :

دانلود کلاس phpmailer
لینک دانلود1 مگابایت

 

برای ارسال ایمیل با کلاس PHPMailer ابتدا باید یک شی از آن را نمونه سازی کنیم :

برای تعیین عنوان ایمیل از صفت Subject و برای تعیین متن ایمیل از صفت Body استفاده میکنیم:

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

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

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

که این متد در صورت ارسال ایمیل مقدار true و در غیر اینصورت مقدار false را بر میگرداند پس میتوان برای صحت ارسال به این شکل استفاده کرد :

مثال زیر یک ایمیل را ارسال میکند :

 

 

متد addCC گیرنده های کپی و متد addBCC گیرنده های کپی مخفی ایمیل را تعیین میکنند:

متد addReplayTo آدرس گیرنده پاسخ نامه را تعیین میکند.

اگر ایمیل حاوی کد های HTML است [برای قالب بندی ایمیل] باید متد isHTML را برابر true قرار دهید:

برای تعیین نوع انکدینگ محتوای ایمیل [شامل عبارات فارسی] باید صفت CharSet را برابر utf-8 قرار دهیم :

با استفاده از متد addAttachment میتوان یک فایل را به همراه ایمیل ضمیمه کرد :

که در اینجا ورودی اول folder/myfile.zip آدرس فایل و ورودی دوم ، یعنی file.zip نام جدیدی که برای فایل انتخاب میکنیم است.

 

اما برای ارسال ایمیل از طریق سرور خارجی ، مثل سرور های جیمیل ؛ باید  ابتدا متد isSMTP فراخوانی شود و صفت های زیر را هم تعیین نمود:

Host : نام دامنه سرور خارجی که از پرتکل SMTP استفاده میشه ، که برای جیمیل smtp.gmail.com

Username : نام کاربری ایمیلی که در سرور خارجی استفاده میکنیم.

Password : رمز مربوط به نام کاربری وارده

SMTPSecure : نوع پروتکل را تعیین میکند که برای جیمیل میتوانید ssl یا tls باشد.

Port : پورت اتصال به سرور خارجی که معمولا 25 است و برای ssl پورت 465 و برای tls پورت 587 است.

SMTPAuth : که برای تعیین صلاحیت باید مقدار true را داشته باشد.

 

در مثال زیر از یک سرور خارجی [جیمیل] برای ارسال ایمیل استفاده کردیم :

 

دیدگاه ها
  • [Mr.mm] گفت:

    به به بعد از مدت ها php اومد
    ممنون

    • حسین شفیعیان گفت:

      انشالله دوره پیشرفته PHP رو ادامه میدم ، مدتی بود سایت به سمت طراحی رفته بود و از برنامه نویسی به دور بود !

  • سوران گفت:

    ممنون از زحمات شما. واقعا هیچ قیمتی نمیشه روی زحمات شما گذاشت. باز هم ممنون

  • مدیریت کامپیوتر دانشجو گفت:

    درود بر شما
    متاسفانه سایت شما ارتباط با ما نداره
    سایت شما از لحاظ محتوا و رتبه الکسا خیلی خوبه
    پیشنهاد تبادل لینک با وب سایت iranapp.org دارم
    با تشکر

    • حسین شفیعیان گفت:

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

  • نبیل امیری گفت:

    من قبلا ازاین کلاس phpmailerاستفاده کردم البته اون موقع php5بودش الان میخوام بدونم امکانات این کلاس بیشترشده یانه خودتون هم میدونیدکه چندوقتی هست که php7 اومده .ممنون

  • Ali.n گفت:

    ممنون برای اموزشهای خوبتون 😡

  • karami گفت:

    سپاس فراون از زحماتتون
    منتظر آموزش های بعدی شما هستم.

  • ًQueen گفت:

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

    • حسین شفیعیان گفت:

      سلام ، مرسی
      متاسفانه استقبالی که انتظار دارم میسر نیست

      • xiaoyu گفت:

        سلام واقعا سایت عالیی دارین.
        منم دارم استقبال می کنم….php پیشرفته رو بزارین….
        ولی به خاطره اوناییم که مثل منن (مبتدی).اموزش php مقدماتیم بزارین…سه برابر استقبال می کنم.
        یک سوالیم داشتم:من از وبسایت هایی مثل w3schools دوره ی مبتدی و پیشرفته رو تموم کردم دو هفته…..ولی الان که می خوام یک برنامه بنویسم .نمیدونم چطوری بنویسمش..انگار این زبان خیلییی سخته!!!.باز بان های html.css.jqury.به طور کامل کار کردم خوب بود….ولی این یکی یه چیز دیگس…به نظرتون چجوری یاد بگیرم که راحت بتونم برنامه بنویسم….ممنون می شم راهنماییم کنین.

        • حسین شفیعیان گفت:

          سلام
          تشکر
          باید یه پروژه تعریف کنید و با الگوریتم و فلوچارت شروع کنید و دیزاین پروژه رو انجام بدین تا بدونید چطوری پیادش کنید

  • سمی گفت:

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

  • Mina گفت:

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

  • مهران گفت:

    سلام مهندس عزیز … یه مشکلی هس هر کاری کردم حل نشد من زمپ نصب کردم بعدش میخوام با php mailer ایمیل بفرستم اما نمیشه این خطارو میده SMTP connect() failed هر کاری کردم از فایل php.ini رفتم open ssl رو هم فعال کردم اما بازم نشد…به نظر شما چیکار کنم؟ اصلا امیدی هست؟

    • مهران گفت:

      اینم کد های نوشته شده
      http://opload.ir/downloadf-d88a9db7f4001-zip.html
      مرسی

      • مهران گفت:

        اخرش نتونستم با گوگل بفرستم رفتم با یاهو فرستادم با phpmailer…….. گوگل رو سرور جواب میده اما رو لوکال کار نمیکنه با زمپ .. اما یاهو کار کرد خداروشکر….دوروزه دارم سرچ میکنم این گوگل دیونم کرد …. مرسی حسین جان

    • حسین شفیعیان گفت:

      باید تو هاست اجراش کنی

  • پرهام گفت:

    سلام مهندس
    علامت :: در php به چه معنیه؟
    برای مثال:
    ;()jfactory::getuser

  • tabesh گفت:

    سلام خدمت شما
    من میخواهم داخل سایتم کد پی اچ پی قرار بدم
    میخوام هنگام نمایش زیبا نشون داده بشه
    حالا یا مثل سایت شما یا مثل سایت php.net
    میشه راهنمایی کنید چکار کنم ؟ وقتی از WYSIWYG استفاده میکنم جا برای قرار دادن کد php نداره
    وردپرسم نیستم که افزونه داشته باشه
    با فریمورک یی2 کار میکنم

  • محسن گفت:

    سلام و درود
    میخوساتم بدونم دیگه آموزش های دوره حرفه ای پی اچ پی و MYsql و Jquery قرار نمیدید؟
    خیلی وقته که آموزش جدید قرار ندادید در صورت امکان قرار بدید
    من هر روز به سایتتون سر میزنم
    ممنون

  • آرش گفت:

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

  • sajjadcr7 گفت:

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

  • سارا گفت:

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

  • MorTaZa7khat گفت:

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

  • php گفت:

    سلام خواستم ببینم اگه با php بخوام یک فایل txt که با الگو خاصی توش نوشته شده را به صورت خوانا چاپ بکنم باید جیکار کنم؟ منظورم اینه هر الگو را یک آرایه بکنه و قسمت های مختلفش را تو جدول نشون بده
    ممنون

  • mr developer گفت:

    سلام داداش من چند وقت پیش دوره ی اموزش پی اچ پی رو کامل ئانلود کردم ولی حالا متوجه شدم که جلسه 15و16 جا افتاده توی نظرات گفتی که بعد از تابستون قرار میدی ولی خوب نمیشه همین دو جلسه رو به ایمیلم بفرستی بی صبرانه منتظرم در ضمن برای اموشات ممنون بعد هدف قشنگی هم دری

  • developer گفت:

    سلام داداش من چند وقت پیش دوره ی اموزش پی اچ پی رو کامل ئانلود کردم ولی حالا متوجه شدم که جلسه 15و16 جا افتاده توی نظرات گفتی که بعد از تابستون قرار میدی ولی خوب نمیشه همین دو جلسه رو به ایمیلم بفرستی بی صبرانه منتظرم در ضمن برای اموشات ممنون

  • developer گفت:

    چرا نه؟؟؟؟؟؟؟؟؟؟

  • رضا گفت:

    سلام خسته نباشید.یه راهنمایی میخواستم ازتون .میخواستم ببینم این ویدیو کنفرانس هارو چطوری میسازن.الان با جاوااسکریپت تونستم وب کم رو روشن کنم ولی بخوام همه بیان تو یه پیج خاص بعد هرکی وصله همه ی وب کم ها رو نشون بده چطوریه؟

  • حیدر گفت:

    سلام آقای برنامه نویس یه سوال داشتم نمیدونستم باید داخل کدوم قسمت مطرح کنم.
    یه نگاه به سایت http://myroyal.ir/ بندازید!!
    بعد از کلیک روی دانلود به صفحه download.php منتقل میشه
    بعد از ارائه لینک دانلود اتوماتیک صفحه بسته میشه
    میشه فهمید از چه کدی استفاده کرده؟؟ خیلی برام مهمه اگه میشه کمک کنید

  • فری گفت:

    سلام و درود بر شما
    عذرمیخوام آموزش مقدماتی رو چطور میتونم دریافت کنم؟؟؟؟

  • فری گفت:

    خیلیییییی ممنون
    از زحماتتون بی نهایت سپاسگزارم

  • مرتضی گفت:

    سلام چرا وقت ارسال ایمیل 20 ثانیه طول میکشه صفحه لود بشه

  • رامین گفت:

    سلام ایمیل ارسال نمی شه کد ها رو هم کپی کردم یه خطا نشون میده تو هاست هم اجرا کردم خطا نشون نداد اما ارسال هم نکرد خطاش اینه
    Fatal error: Class ‘SMTP’ not found in D:\wamp\www\webasrpc\temp\class.phpmailer.php on line 1443
    خواهشن سریع جواب بدین واج لازم دارم ممنون

    • شروین گفت:

      منم همین مشکل رو دارم کسی جواب ما رو نمیده؟

      • حسین شفیعیان گفت:

        برای اینکه دارید ایمیل رو از سمت سیستم خودتون ارسال میکنید ! دستورات رو سمت سرور اجرا کنید تا نتیجه بگیرین

  • شیرین گفت:

    سلام
    نمونه مثال شما رو که تست میکردم کار نمیکرد تا اینکه بعد از سرچ کردن با اضافه کردن دستور
    require_once(‘class.smtp.php’);
    موفق به ارسال میل شدم
    البته نمیدونم دقیقا جریانش چی هست ولی گفتم شاید اگر کسی هم این مشکل رو داشته باشه بتونه کمکش کنه
    امیدوارم آموزش های این بخش از سایت رو ادامه بدید
    در ضمن همچنان منتظر شروع دوره ی تبدیل قالب بوت استرپ در وردپرس هم هستیم
    سپاس 🙂

  • ati گفت:

    کاش منم برنامه نویس بودم…خوش به حالتون..اصطلاحاتو بلد نیستم واس همین سخته واسم یکم…موفق باشید واقعا سایت عالی و خوبی دارید…❤ی

  • مهران گفت:

    سلام.
    خیلی وب سایتتون عالیه.
    بعضی از مشکلاتم حل شد.
    مرسی.
    میشه کد و جدول دیتابیس همین پرسش و پاسخی که تو وب سایتتون هست رو به زبان php و mysqli برای من تو ایمیلم بفرستید یا اینکه تو سایتتون قرار بدید.
    لطفا لطفا با آموزش هم باشه که بهتره. خیلی خیلی ازتون ممنون میشم.
    تا بیستم بهمن خیلی بهش احتیاج دارم. برای پروژه پایان ترم میخوام.
    خواهش میکنم.
    مرسی.

    • حسین شفیعیان گفت:

      سلام
      پرسش و پاسخ ، منظورتون کدوم قسمته ؟

      • مهران گفت:

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

        میشه کد php و” mysqli” و جدول دیتابیسش رو بذارید.
        ممنون میشم.

        اگه آموزشش هم باشه که خیلی عالیه.

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

        این اسکریپت ها رو به زبان php و mysqli میخوام: (میشه اگه دارید، بذاریدشون تو سایت. تا بیستم بهمن بهشون احتیاج دارم.)

        نظرات و پرسش و پاسخ
        گالری تصاویر
        کلیپ گذاشتن
        آمار سایت
        عضویت در خبرنامه
        مطالب تازه یا باکسی برای نشون دادن مطالب تازه با php و mysqli

        خیلی مهمه که با mysqli باشه.
        ممنون.

      • مهران گفت:

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

        • حسین شفیعیان گفت:

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

  • مهران گفت:

    کدهای دیتابیسش حتما با mysqli باشه.
    مرسی

  • مسعود گفت:

    سلام
    با آرزوی موفقیت روز افزون برای شما.
    یک سئوال داشتم، میخواستم ببینم چطور میتوانم با این برنامه به یک گروه ایمیل ارسال کنم؟
    منظورم اینه که مثلا یک متنی را به ایمیل همه کاربران سایت ارسال کنیم بطور خودکار
    با تشکر

  • abasphp گفت:

    سلام حسین آقا میشه این خطای برام بگید چند روز درگیر اینم
    Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\test\include\config.php:5 Stack trace: #0 C:\xampp\htdocs\test\index.php(3): test->__construct() #1 {main} thrown in C:\xampp\htdocs\test\include\config.php on line 5

    • حسین شفیعیان گفت:

      مثل اینکه نمیتونه یه تابعی رو فراخاونی کنه ، اشتباه تایپی یا عدم وجود تابع و …

  • سجاد گفت:

    درود.بنده ایمیل رو ارسال میکنم ولی هم سابجکت و هم بادی به صورت نا مشخص ارسال میشن! (مثل حالتی که کدینگ صفحه UTF-8 نیست)
    مثلا متن “سلام کد تایید شما 23415 میباشد” رو به صورت “سلام.کد ثبت نام شما در مستر فیلم 55487 میباشد.” نشون میده.
    ممنون میشم راهنمایی کنید …

    • حسین شفیعیان گفت:

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

      header(‘Content-Type: text/html; charset=utf-8’);