مدیریت ایمیل در PHP
مدیریت ایمیل در PHP

در این آموزش موارد زیر را برسی خواهیم کرد:

  • نحوه ارسال ایمیل به وسیله PHP
  • نحوه ارسال ایمیل امن به وسیله PHP

مقدمه :

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

زبان PHP به صورت کامل از ارسال ایمیل در صفحات وب پشتیبانی می نماید.

تابع ( )mail، در PHP وظیفه ارسال ایمیل را بر عهده دارد . در این بخش قصد داریم تا به کمک تابع ( )mail ، نحوه ارسال ایمیل را در PHP به شما آموزش دهیم.

 

تابع ( )mail :

گفتیم که تابع ( ) mail در PHP ، وظیفه ارسال ایمیل را بر عهده دارد . اما این تابع چگونه کار می کند؟

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

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

  mail ( to , subject , message , headers );

همانطور که در ساختار ارائه شده ، مشاهده می نمایید ، تابع ( ) mail ، دارای پارامترهای گوناگونی است که هر کدام یکی از موارد لازم یک ایمیل را دریافت می کنند . در جدول زیر به تشریح هر یک از پارامترهای فوق می پردازیم :

 

to: این پارامتر آدرس ایمیل گیرنده یا گیرندگان نامه را دریافت می کند .

استفاده از این پارامتر اجباری است.      

subject: این پارامتر از نوع متن بوده و عنوان نامه را تعیین می نماید . این پارامتر نمی تواند بیش از یک خط باشد .

استفاده از این پارامتر اجباری است.      

massage: این پارامتر از نوع متن بوده و متن نامه را تعیین می کند . هر خط در این متن باید با یک کاراکتر ( \n ) از خط قبلی و یا بعدی جدا شود . همچنین تعداد کاراکتر هر خط نباید از ۷۰ کاراکتر بیشتر باشد .

استفاده از این پارامتر اجباری است.      

headers: این پارامتر از نوع متن بوده و تعیین کننده خواصی مثل From و یا CC ( رونوشت ) است . هر خط در این متن باید با یک کاراکتر ( \r\n ) از خط قبلی و یا بعدی جدا شود .

استفاده از این پارامتر اختیاری است.     

 

پس از اینکه شما را با نحوه کار تابع ( ) mail و پارامترهای آن آشنا کردیم ، در چند مثال نحوه استفاده عملی از این تابع را به شما نشان می دهیم .

ارسال یک ایمیل ساده به وسیله تابع ( ) mail :

مثال ۱ : در مثال زیر یک ایمیل ساده را به وسیله تابع ( ) mail ، ارسال کرده ایم . در این مثال هر کدام از خصوصیات ایمیل را به صورت از قبل تعیین شده در یک متغیر ذخیره کرده ایم . سپس متغیر ها را به عنوان پارامتر به تابع ( ) mail ارسال کرده ایم . این تابع نیز ایمیل را ارسال کرده و یک پیام تایید به کاربر نمایش می دهد .

توجه داشته باشید که این مثال فقط برای نمایش نحوه عملکرد تابع ( ) mail است و اینگونه ایمیل فرستادن بعید به نظر میاد . در مثال بعدی نحوه ارسال یک ایمیل کامل به وسیله یک فرم HTML را نشان خواهیم داد .

<?php

  $to = "someone@example.com";

  $subject = "Test mail";
  $from = "someonelse@example.com";

  $message = "Hello! This is a simple email message.";

  $headers = "From:" . $from

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

  echo "Mail Sent.";

?>

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

مثال ۲ : در مثال زیر یک فرم HTML برای دریافت نظرات کاربران سایت طراحی کرده ایم . این فرم دارای تعدادی کادر متن است که مقادیر لازم را از کاربر دریافت کرده و سپس آنها را در یک متغیر تعیین شده ، ذخیره می نمایند . سپس این متغیرها را به عنوان پارامتر به تابع ( ) mail ارسال می کنند تا به ایمیل تعیین شده ارسال شوند :

<html>
<body>
  <?php
    if (isset($_REQUEST['email']))
      // دستور بالا در صورتی که کادر ایمیل پر شده باشد ، ایمیل را ارسال می کند
        {
        // ارسال ایمیل 
          $email = $_REQUEST['email'] ;
          $subject = $_REQUEST['subject'] ;
          $message = $_REQUEST['message'] ;
          mail ( "someone@example.com" , $subject , $message , "From:" . $email) ;
          echo "از ارسال ایمیل شما متشکریم";
        }
    else
      // اگر کادر ایمیل پر نشده باشد ، برنامه فرم زیرا را نمایش می دهد
        {
          echo " < form method='post' action='mailform.php' >
          Email : < input name='email' type='text' /> <br />
          Subject : < input name='subject' type='text' /> <br />
          Message : <br />
        < textarea name='message' rows='15' cols='40' >
        < /textarea > <br />
        < input type='submit' />
        < /form >";
        }
  ?>
</body>
</html>

 

ارسال ایمیل ( Email ) امن به وسیله PHP :

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

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

<html>

<body>

  <?php

    if (isset($_REQUEST['email']))

      // دستور بالا در صورتی که کادر ایمیل پر شده باشد ، ایمیل را ارسال می کند

        {

        // ارسال ایمیل

          $email = $_REQUEST['email'] ;

          $subject = $_REQUEST['subject'] ;

          $message = $_REQUEST['message'] ;

          mail ( "someone@example.com" , $subject , $message , "From:" . $email) ;

          echo "از ارسال ایمیل شما متشکریم";

        }

    else

      // اگر کادر ایمیل پر نشده باشد ، برنامه فرم زیرا را نمایش می دهد

        {

          echo " < form method='post' action='mailform.php' >

          Email : < input name='email' type='text' /> <br />

          Subject : < input name='subject' type='text' /> <br />

          Message : <br />

        < textarea name='message' rows='15' cols='40' >

        < /textarea > <br />

        < input type='submit' />

        < /form >";

        }

  ?>

</body>

</html>

اگر در کد بالا و در کادر متن آدرس ایمیل ، کاربر برای مثال متن زیر را وارد نماید ، آنگاه چه اتفاقی می افتد ؟!

مد مخرب

someone@example.com%0ACc:person2@example.com

%۰ABcc:person3@example.com,person3@example.com,

anotherperson4@example.com,person5@example.com

%۰ABTo:person6@example.com

با وارد شدن کد بالا از سوی کاربر ، تابع ( ) mail ، آدرس های فوق را به عنوان هدرهای ایمیل ثبت کرده و ایمیل را به همه آنها ( Bcc , Cc , To , … ) ارسال می کند . این کار مطابق نظر وب مستر نبوده و برنامه را ممکن است دچار مشکل نماید .

اما راه حل چیست؟

جلوگیری از حملات اسکریپتی PHP در تابع ( ) mail :

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

در کد زیر که اصلاح شده کد قبلی است ، دو تابع را به کد اضافه کرده ایم که اطلاعات وارد شده در فرم را اعتبار سنجی کرده و در صورتی که دارای فرمت صحیح یک ایمیل باشد ، اجازه Submit فرم را می دهد .

نکات :

۱ . تابع ( ) FILTER_SANITIZE_EMAIL ، کاراکترهایی اضافی که در ایمیل وارد شده اند را حذف می کند .

۲ . تاع ( ) FILTER_VALIDATE_EMAIL ، بررسی می کند که آیا ایمیل وارد شده فرمت صحیح یک ایمیل را دارد یا خیر .

برای دریافت اطلاعات بیشتر ، به بخش اعتبار سنجی مقادیر ورودی در PHP بروید .

 

ایمیل صحیح:

<html>

<body>

  <?php

   function spamcheck($field)

      {

      // این تابع کاراکترهای غیر مجاز در آدرس ایمیل را پاک می کند

      $field=filter_var($field, FILTER_SANITIZE_EMAIL);



      // این تابع فرمت ایمیل را بررسی کرده و در صورت داشتن فرمت مقدار مثبت بر می گرداند

      if( filter_var($field, FILTER_VALIDATE_EMAIL) )

         {

            return TRUE;

         }

      else

         {

            return FALSE;

         }

         }



      if (isset($_REQUEST['email']))

         {

            // در مرحله اول چک می شود آیا مقداری برای ایمیل وارد شده یا خیر

            //check if the email address is invalid

            $mailcheck = spamcheck($_REQUEST['email']);

            if ($mailcheck==FALSE)

               {

                  echo "فرمت نا صحیح";

               }

            else

               {

                  // ارسال ایمیل

                  $email = $_REQUEST['email'] ;

                  $subject = $_REQUEST['subject'] ;

                  $message = $_REQUEST['message'] ;

                  mail("someone@example.com", "Subject: $subject",

                  $message, "From: $email" );

                  echo "Thank you for using our mail form";

               }

         }

         else

            {

               //  اگر ایمل وارد نشده باشد ، فرم زیر را نمایش می دهد

               echo "<form method='post' action='mailform.php'>

               Email: <input name='email' type='text'><br>

               Subject: <input name='subject' type='text'><br>

               Message:<br>

               <textarea name='message' rows='15' cols='40'>

               </textarea><br>

               <input type='submit'>

               </form>";

           }

  ?> 

</body>

</html>

دیدگاه‌ خود را بیان کنید

اشتراک در
اطلاع از
guest

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

0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
سبد خرید0
There are no products in the cart!