We now have a youtube channel. Subscribe!

How to send Emails using PHP

How to Send Emails in PHP

Hello folks! welcome back to a new section of our tutorial on PHP. In this tutorial guide, we are going to be discussing about how to send Emails using PHP.

PHP must be correctly configured with the details of how your computer system sends email messages in the php.ini file. Open the php.ini file that is available in /etc/ directory and find the section headed [mail function].

The Windows users should ensure that two directives are supplied. The first directive is called SMTP that defines your email server address. The second directive is known as sendmail_from which is used to define your own email address.

The configuration for Windows OS should look something like this -

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

; For win32 only
sendmail_from = webmaster@webdesigntutorialz.com

Linux users simply need to allow PHP know the location of their sendmail app. The path and any desired switches should be defined to the sendmail_path directive.

The configuration for Linux should look something like this -

[mail function]
; For Win32 only.

; For win32 only
sendmail_from = 

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

Sending Plain Text Email

PHP utilizes mail() function for sending an email. This function needs three mandatory arguments that specify the receiver's email address, the subject (topic) of the message and the actual message. Additionally there are two other optional parameters.

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

The following is the description for each of the parameters -

Sr.NoParameter & Description


Required. Specifies the receiver / receivers of the email



Required. Specifies the subject of the email. This parameter cannot contain any newline characters



Required. Defines the message to be sent. Each line should be separated with a LF (\n). Lines should not exceed 70 characters



Optional. Specifies additional headers, like From, Cc, and Bcc. The additional headers should be separated with a CRLF (\r\n)



Optional. Specifies an additional parameter to the send mail program

Soon as the mail function is called, PHP will attempt to send the email then it will return true if successful or false if it fails.

Note - Multiple recipients can be specified as the first argument to the mail() function in a comma separated list.

Sending HTML Email

When you send a text message making use of PHP then all of the contents is treated as simple text. Even if you include HTML tags in a text message, it displays as simple text and HTML tags will not be styled according to Html syntax. But PHP provides option to send an HTML message as an actual HTML message.

While sending an email, you can specify a Mime version, content type and character set to send an HTML email.


The following example will send an HTML email message to xzy@somedomain.com copying it to abcd@somedomain.com. You can code this program in such a way that it should receive all the content from the user and then it should send an email.

      <title>Sending HTML email using PHP</title>
         $to = "xyz@somedomain.com";
         $subject = "This is subject";
         $message = "<b>This is HTML message.</b>";
         $message .= "<h1>This is headline.</h1>";
         $header = "From:jkl@somedomain.com \r\n";
         $header .= "Cc:abcd@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...";

Sending Attachments with Email

To send an email with mixed contents, it requires setting the Content-type header to multipart/mixed. Both the text and also the attachment section can be specified within boundaries.

A boundary begins with two hyphens and is followed by a unique number which can not show in the message part of the email. The md5() function is used to create a 32 digits hexadecimal number for creating a unique number. A final boundary that denotes the email's last section must also end with two hyphens

   // 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)); 
         $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" . "
         $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!");
      mail_attachment("$from", "youremailaddress@gmail.com", 
         "subject", "message", ("temp/".$_FILES["filea"]["name"]));

      <script language = "javascript" type = "text/javascript">
         function CheckData45() {
            with(document.filepost) {
               if(filea.value ! = "") {
                  document.getElementById('one').innerText = 
                     "Attaching File ... Please Wait";
      <table width = "100%" height = "100%" border = "0" 
         cellpadding = "0" cellspacing = "0">
            <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>
                        <td><input name = "from" type = "text" 
                           id = "from" size = "30"></td>
                     <tr valign = "bottom">
                        <td height = "20">Your Email Address:</td>
                        <td class = "frmtxt2"><input name = "emaila"
                           type = "text" id = "emaila" size = "30"></td>
                        <td height = "20" valign = "bottom">Attach File:</td>
                     <tr valign = "bottom">
                        <td valign = "bottom"><input name = "filea" 
                           type = "file" id = "filea" size = "16"></td>
                        <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>
                  <table width = "400">
                        <td id = "one">

Alright guys! This is where we are rounding up for this tutorial post. In our next tutorial post, we are going to be discussing about File Uploading in PHP.

Feel free to ask your questions where necessary and we will attend to them as soon as possible. If this tutorial was helpful to you, you can use the share button to share this tutorial.

Follow us on our various social media platforms to stay updated with our latest tutorials. You can also subscribe to our newsletter in order to get our tutorials delivered directly to your emails.

Thanks for reading and bye for now.

Post a Comment

Hello dear readers! Please kindly try your best to make sure your comments comply with our comment policy guidelines. You can visit our comment policy page to view these guidelines which are clearly stated. Thank you.
© 2023 ‧ WebDesignTutorialz. All rights reserved. Developed by Jago Desain