ارسال ایمیل در php

ارسال ایمیل در php

برای ارسال ایمیل در php حتما باید فایل php.ini به درستی کانفیگ شده باشد . فایل php.ini را باز کنید و دنبال [mail function] بگردید.

کاربران ویندوزی باید مطمئن شود دو دستورالعمل به درستی وجود دارد.  اولین نوع SMTP  میباشد که ادرس ایمیل سرور را تعریف میکند و دومی sendmail_from  نامیده میشود که ایمیل آدرس خودتان را تعریف میکند.

تنظیمات برای ویندوز باید به شکل زیر باشد : 

[mail function]
; For Win32 only.
SMTP = smtp.secureserver.net

; For win32 only
sendmail_from = webmaster@tutorialspoint.com

کاربران لینوکسی به سادگی باید اجازه دهند زبان برنامه نویسی PHP محل برنامه ی  sendmail آنها را بفهمد .

مسیر و سوئیچ های مورد نظر باید در sendmail_path  مشخص شوند . 

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

[mail function]
; For Win32 only.
SMTP = 

; For win32 only
sendmail_from = 

; For Unix only
sendmail_path = /usr/sbin/sendmail -t -i

خب شما الان آماده هستیید ایمیل بفرستید ! 

 

ارسال ایمیل متن ساده در php 

در زبان php از تابع mail برای ارسال ایمیل استفاده میشود . این تابع سه آرگومان اجباری دارد که باید انها را تعریف کنیم : 

  1. ایمیل دریافت کننده 
  2. موضوع ایمیل
  3. متن و محتویات داخلی ایمیل

ولی بغیر از سه آرگومان بالا دو آرگومان اختیاری هم وجود دارد . سینتکس ارسال ایمیل در php

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

در زیر توضیحات تمام پارامترهای این  تابع آورده شده است : 

شماره پارامتر و توضیحات آن
1 to
اجباری است . ایمیل مقصد در این قسمت قرار میگیرد
2 subject
اجباری است ، موضوع ایمیل را مشخص میکند و نمیتواند شامل هر گونه کاراکتر که باعث رفتن به خط جدید میشود ، باشد
3

message
اجباری است و حاوی متن یا محتویات داخل ایمیل است . هر خط باید با (\n) از هم جدا شود و در هر خط بیش از 70 کاراکتر نمیتواند قرار بگیرد 

4 headers
اختیاری است . هدرهای اضافی را شامل میشود مانند : From, Cc,  و Bcc
5 parameters
اختیاری است . پارامترهای اضافی را به برنامه های ارسال ایمیل میفرستد

همانطور که در سینتکس بالا نحوه ی استفاده از تابع mail برای ارسال ایمیل گفته شد بعد ازارسال ایمیل اگر ارسال موفقیت آمیز باشد این تابع true برمیگرداند و اگر به هر دلیلی ایمیل ارسال نشود تابع بالا false برمیگرداند .

 

ارسال ایمیل صورت html در php 

زمانی که شما یک متن ساده را بعنوان ایمیل ارسال میکنید زبان php آنرا بعنوان یک متن ساده بدون هیچ پردازشی در نظر میگیرد حتی شما وقتی تگ های html را درون این متن ساده قرار دهید کدهای html به همان صورت چاپ میشوند و رندر html روی تگ هایی که فرستادید انجام نمیگیرد . ولی php این امکان را به شما میدهد که تگ های html را همانطور ایمیل کنید که در مرورگر پردازش میشود و نتیجه نمایش داده میشود . 

زمانی که شما یک ایمیل ارسال می کنید میتوانید Mime version, content type و  character set سند 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>

 

ارسال فایل با ایمیل در php 

برای ارسال ایمیل هایی که محتوای مختلفی مثل فایل دارند باید Content-type را multipart/mixed تعریف کنید . 

سپس بخش متنی و بخش فایل ضمیمه ی ایمیل را میتوان در boundaries تعریف کرد . 

یک boundary با دو هایفن یا خط تیره شروع میشود و سپس یک عدد منحصر به فرد دارد . از تابع md5 استفاده شده است تا یک عدد از نوع 32 digit hexadecimal تولید شود که یک عدد منحصر به فرد خواهد بود . 

مثال زیر یک مثال کاملی برای ارسال یک ایمیل با فایل ضمیمه شده است : 

<?php
   // request variables // important
   $from = $_REQUEST["from"];
   $emaila = $_REQUEST["emaila"];
   $filea = $_REQUEST["filea"];
   
   if ($filea) {
      function mail_attachment ($from , $to, $subject, $message, $attachment){
         $fileatt = $attachment; // Path to the file
         $fileatt_type = "application/octet-stream"; // File Type 
         
         $start = strrpos($attachment, '/') == -1 ? 
            strrpos($attachment, '//') : strrpos($attachment, '/')+1;
				
         $fileatt_name = substr($attachment, $start, 
            strlen($attachment)); // Filename that will be used for the 
            file as the attachment 
         
         $email_from = $from; // Who the email is from
         $subject = "New Attachment Message";
         
         $email_subject =  $subject; // The Subject of the email 
         $email_txt = $message; // Message that the email has in it 
         $email_to = $to; // Who the email is to
         
         $headers = "From: ".$email_from;
         $file = fopen($fileatt,'rb'); 
         $data = fread($file,filesize($fileatt)); 
         fclose($file); 
         
         $msg_txt="\n\n You have recieved a new attachment message from $from";
         $semi_rand = md5(time()); 
         $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
         $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . "
            boundary=\"{$mime_boundary}\"";
         
         $email_txt .= $msg_txt;
			
         $email_message .= "This is a multi-part message in MIME format.\n\n" . 
            "--{$mime_boundary}\n" . "Content-Type:text/html; 
            charset = \"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . 
            $email_txt . "\n\n";
				
         $data = chunk_split(base64_encode($data));
         
         $email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" .
            " name = \"{$fileatt_name}\"\n" . //"Content-Disposition: attachment;\n" . 
            //" filename = \"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: 
            base64\n\n" . $data . "\n\n" . "--{$mime_boundary}--\n";
				
         $ok = mail($email_to, $email_subject, $email_message, $headers);
         
         if($ok) {
            echo "File Sent Successfully.";
            unlink($attachment); // delete a file after attachment sent.
         }else {
            die("Sorry but the email could not be sent. Please go back and try again!");
         }
      }
      move_uploaded_file($_FILES["filea"]["tmp_name"],
         'temp/'.basename($_FILES['filea']['name']));
			
      mail_attachment("$from", "youremailaddress@gmail.com", 
         "subject", "message", ("temp/".$_FILES["filea"]["name"]));
   }
?>

<html>
   <head>
      
      <script language = "javascript" type = "text/javascript">
         function CheckData45() {
            with(document.filepost) {
               if(filea.value ! = "") {
                  document.getElementById('one').innerText = 
                     "Attaching File ... Please Wait";
               }
            }
         }
      </script>
      
   </head>
   <body>
      
      <table width = "100%" height = "100%" border = "0" 
         cellpadding = "0" cellspacing = "0">
         <tr>
            <td align = "center">
               <form name = "filepost" method = "post" 
                  action = "file.php" enctype = "multipart/form-data" id = "file">
                  
                  <table width = "300" border = "0" cellspacing = "0" 
                     cellpadding = "0">
							
                     <tr valign = "bottom">
                        <td height = "20">Your Name:</td>
                     </tr>
                     
                     <tr>
                        <td><input name = "from" type = "text" 
                           id = "from" size = "30"></td>
                     </tr>
                     
                     <tr valign = "bottom">
                        <td height = "20">Your Email Address:</td>
                     </tr>
                     
                     <tr>
                        <td class = "frmtxt2"><input name = "emaila"
                           type = "text" id = "emaila" size = "30"></td>
                     </tr>
                     
                     <tr>
                        <td height = "20" valign = "bottom">Attach File:</td>
                     </tr>
                     
                     <tr valign = "bottom">
                        <td valign = "bottom"><input name = "filea" 
                           type = "file" id = "filea" size = "16"></td>
                     </tr>
                     
                     <tr>
                        <td height = "40" valign = "middle"><input 
                           name = "Reset2" type = "reset" id = "Reset2" value = "Reset">
                        <input name = "Submit2" type = "submit" 
                           value = "Submit" onClick = "return CheckData45()"></td>
                     </tr>
                  </table>
                  
               </form>
               
               <center>
                  <table width = "400">
                     
                     <tr>
                        <td id = "one">
                        </td>
                     </tr>
                     
                  </table>
               </center>
               
            </td>
         </tr>
      </table>
      
   </body>
</html>

 

نکته : بعد از یادگیری php وقت آن است که آموزش php mvc و یادگیری پروژه محور پی اچ پی را در نظر بگیرید.چون تا php mvc را یاد نگیرید به سختی میتوانید با فریمورک ها و سی ام اس های php کار کنید و همچنین آموزش های پروژه محور php باعث میشوند که در محیط یک پروژه ی واقعی قرار بگیرید و تجربه ی پیاده سازی یک پروژه ی کاملا عملی را کسب کنید. از دوره ی آموزش پی اچ پی استاد نیک زاد برای یادگیری ویدیویی پی اچ پی استفاده کنید.

 

اتمام درس