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

PHP باید در فایل php.ini با جزییات این که سیستم شما چگونه e-mail می فرستد، به درستی پیکربندی شود. ابتدا فایل php.ini حاضر در دایرکتوری /etc/  را باز کنید، سپس بخشی که عنوان تابع mail()  را دارد پیدا کنید.

کاربران ویندوز باید حتماً هر دو آدرس را داشته باشند. اولی که آدرس سِروِرe-mail  را مشخص می کند، SMTP نامیده می شود. دومی sendmail_form خوانده می شود، که آدرس e-mail را مشخص می کند.

عملیات پیکربندی و تنظیم در ویندوز به این شکل خواهد بود.

[mail function]‎

; For Win32 only. ‎

SMTP = smtp. secureserver. net

‎ ‎ 

; For win32 only‎

sendmail_from = webmaster@tutorialspoint. Com

 

کاربران linux، باید PHP را از مکان برنامه اجرایی sendmail خود آگاه کنند. مسیر و هر سوییچ دلخواه دیگری را باید به مسیر دایرکتوری sendmail_path راهنمایی کنید.

عملیات پیکربندی و تنظیم برای linux به این شکل خواهد بود.

[mail function]‎

; For Win32 only. ‎

SMTP = ‎

‎ ‎

; For win32 only‎

sendmail_from = ‎

‎ ‎

; For Unix only‎

sendmail_path = /usr/sbin/sendmail -t -i

حال آماده ی فرستادن e-mail هستید.

 

فرستادن e-mail متن ساده

PHP برای فرستادن e-mail از تابع mail() بهره می گیرد. این تابع به سه آرگومان شناسایی ضروری، آدرس دریافت کننده ی e-mail، موضوع پیغام و خود پیغام نیاز دارد. به علاوه دو پارامتر اختیاری دیگر وجود دارد.

mail( to، ‏‎ subject، ‏‎ message، ‏‎ headers، ‏‎ parameters );‎

 

این پارامترها در زیر توصیف شده اند.

 پارامتر                                    توصیف
 to اجباری. دریافت کننده / دریافت کننده ی e-mail را مشخص می کند.
Subject{موضوع} اجباری. موضوع e-mail را تعیین می کند. این پارامتر هیچ کاراکتر خط جدیدی را در خود نمی گنجاند.
Message {پیغام} اجباری. پیغامی که قرار است فرستاده شود را معرفی می کند. هر خط باید توسط LF (\n) از هم جدا شوند. خطوط نباید بیش از ۷۰ کاراکتر باشد.
Headers {هدر} اختیاری. هِدِرهای اضافی مانند From،Cc و Bccمشخص می کند. هدرهای اضافی باید توسط CRLF (\r\n) از هم جدا شوند.
Parameters{پارامترها} اختیاری. پارامترهای اضافی را با برنامه ی sendmail مشخص می کند.

 

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

چند دریافت کننده، همزمان در یک لیست با comma {ویرگول} از هم جدا شده به عنوان آرگومان اول به mail() function مشخص و معرفی می شوند.

مثال

در مثال زیر پیغامی به صورت ایمیل HTML به xyz@somedomain.com فرستاده می شود. شما باید این برنامه را چنان کد نویسی کنید که همه ی محتوا را از کاربر دریافت کند و یک ایمیل بفرستد.

<html>

<head>

   <title>Sending email using PHP</title>

</head>

<body>

   <?php‎

‎   $to = “xyz@somedomain. com”;‎

‎   $subject = “This is subject”;‎

‎   $message = “This is simple text message. “;‎

‎   $header = “From:abc@somedomain. com \r\n”;‎

‎   $retval = mail ($to‎، ‏‎$subject‎، ‏‎$message‎، ‏‎$heade‎اr);‎

‎   if( $retval == true )‎

‎   {‎

‎   echo “Message sent successfully. . . “;‎

‎   }‎

‎   else

‎   {‎

‎   echo “Message could not be sent. . . “;‎

‎   }‎

‎   ?>

</body>

</html>

فرستادن ایمیل HTML

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

برای اینکه ایمیل HTML بفرستید باید یک ورژنMime ، نوع محتوا، مجموعه کاراکتر برای ایمیلی که می فرستید مشخص کنید.

مثال

در مثال زیر پیغامی به صورت ایمیل HTML به xyz@somedomain.com فرستاده می شود و سپس آن را در آدرس afgh@somedomain.com کپی می کند. شما باید این برنامه را چنان کد نویسی کنید که همه ی محتوا را از کاربر دریافت کند و یک ایمیل بفرستد.

<html>

<head>

   <title>Sending HTML email using PHP</title>

</head>

<body>

   <?php‎

‎   $to = “xyz@somedomain. com”;‎

‎   $subject = “This is subject”;‎

‎   $message = “<b>This is HTML message. </b>”;‎

‎   $message. = “<h1>This is headline. </h1>”;‎

‎   $header = “From:abc@somedomain. com \r\n”;‎

‎   $header = “Cc:afgh@somedomain. com \r\n”;‎

‎   $header. = “MIME-Version: 1. 0\r\n”;‎

‎   $header. = “Content-type: text/html\r\n”;‎

‎   $retval = mail ($to‎، ‏‎$subject، ‏‎$message‎، ‏‎$header);‎

‎   if( $retval == true )‎

‎   {‎

‎   echo “Message sent successfully. . . “;‎

‎   }‎

‎   else

‎   {‎

‎   echo “Message could not be sent. . . “;‎

‎   }‎

‎   ?>

</body>

</html>

نیاز است برای فرستادن ایمیلی با محتوای گوناگون، نوع محتوای هدر را روی multipart/mixed تنظیم کنید. متن و ضمیمه {attachment} در boundaries مشخص می شوند. boundary با دو تا hyphen { خط ربط}” _ ” شروع می شود و سپس به دنبال آن یک عدد منحصر به فرد که به هیچ وجه در قسمت پیام ایمیل پدیدار نمی شود می آید. تابع md5() در php برای ساختن یک رقم ۳۲ شماره ای هگزا دسیمال به منظور ساختن یک عدد منحصر به فرد مورد استفاده قرار می گیرد. مرز نهایی {final boundary} که قسمت پایانی ایمیل را نشان داده و علامت گذاری می کند، هم باید با دو hyphen ختم شود. فایل های ضمیمه شده را برای انتقال ایمن تر با تابع base64_encode() باید کد گذاری کنید و برای مناسب تر تقسیم کردن تکه ها بهتر است از تابع chunk_split() استفاده کنید. این در فواصل منظم \r\n داخل فایل می گنجاند که به طور معمول هر ۷۶ کاراکتر است.

مثال زیر فایل /tmp/test.txt را به عنوان ضمیمه می فرستد. می توانید برنامه ی خود را به گونه ای بنویسید که فایل آپلود شده {uploaded file} را دریافت کند و بعد بفرستد.

<html>

<head>

   <title>Sending attachment using PHP</title>

</head>

<body>

   <?php‎

‎   $to = “xyz@somedomain. com”;‎

‎   $subject = “This is subject”;‎

‎   $message = “This is test message. “;‎

‎   # Open a file‎

‎   $file = fopen( “/tmp/test. txt”‎، ‏‎ “r” );‎

‎   if( $file == false )‎

‎   {‎

‎   echo “Error in opening file”;‎

‎   exit();‎

‎   }‎

‎   # Read the file into a variable‎

‎   $size = filesize(“/tmp/test. txt”);‎

‎   $content = fread( $file‎، ‏‎ $size);‎

‎ ‎

‎   # encode the data for safe transit‎

‎   # and insert \r\n after every 76 chars. ‎

‎   $encoded_content = chunk_split( base64_encode($content));‎

‎ ‎

‎   # Get a random 32 bit number using time() as seed. ‎

‎   $num = md5( time() );‎

‎ ‎

‎   # Define the main headers. ‎

‎   $header = “From:xyz@somedomain. com\r\n”;‎

‎   $header. = “MIME-Version: 1. 0\r\n”;‎

‎   $header. = “Content-Type: multipart/mixed; “;‎

‎   $header. = “boundary=$num\r\n”;‎

‎   $header. = “–$num\r\n”;‎

‎ ‎

‎   # Define the message section‎

‎   $header. = “Content-Type: text/plain\r\n”;‎

‎   $header. = “Content-Transfer-Encoding:8bit\r\n\n”;‎

‎   $header. = “$message\r\n”;‎

‎   $header. = “–$num\r\n”;‎

‎ ‎

‎   # Define the attachment section

‎   $header. = “Content-Type: multipart/mixed; “;‎

‎   $header. = “name=\”test. txt\”\r\n”;‎

‎   $header. = “Content-Transfer-Encoding:base64\r\n”;‎

‎   $header. = “Content-Disposition:attachment; “;‎

‎   $header. = “filename=\”test. txt\”\r\n\n”;‎

‎   $header. = “$encoded_content\r\n”;‎

‎   $header. = “–$num–“;‎

‎ ‎

‎   # Send email now‎

‎   $retval = mail ( $to‎، ‏‎ $subject‎، ‏‎ “”‎، ‏‎ $header );‎

‎   if( $retval == true )‎

‎   {‎

‎   echo “Message sent successfully. . . “;‎

‎   }‎

‎   else

‎   {‎

‎   echo “Message could not be sent. . . “;‎

‎   }‎

‎   ?>

</body>

</html>