Send HTML in email via PHP

PhpHtmlEmailSend

Php Problem Overview


How can I send an HTML-formatted email with pictures using PHP?

I want to have a page with some settings and HTML output which is sent via email to an address. What should I do?

The main problem is to attach files. How can I do that?

Php Solutions


Solution 1 - Php

It is pretty simple. Leave the images on the server and send the PHP + CSS to them...

$to = 'bob@example.com';

$subject = 'Website Change Request';

$headers  = "From: " . strip_tags($_POST['req-email']) . "\r\n";
$headers .= "Reply-To: " . strip_tags($_POST['req-email']) . "\r\n";
$headers .= "CC: [email protected]\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

$message = '<p><strong>This is strong text</strong> while this is not.</p>';


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

It is this line that tells the mailer and the recipient that the email contains (hopefully) well-formed HTML that it will need to interpret:

$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

Here is the link I got the information from... (link)

You will need security though...

Solution 2 - Php

You need to code your HTML content using the absolute path for images. By absolute path, I mean you have to upload the images to a server and in the src attribute of images you have to give the direct path, like this <img src="http://yourdomain.com/images/example.jpg">.

Below is the PHP code for your reference: It’s taken from mail:

<?php
    // Multiple recipients
    $to  = '[email protected]' . ', '; // Note the comma
    $to .= '[email protected]';

    // Subject
    $subject = 'Birthday Reminders for August';

    // Message
    $message = '
      <p>Here are the birthdays upcoming in August!</p>
    ';

    // To send HTML mail, the Content-type header must be set
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

    // Additional headers
    $headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
    $headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";


    // Mail it
    mail($to, $subject, $message, $headers);
?>

Solution 3 - Php

I have this code and it will run perfectly for my site:

public function forgotpassword($pass, $name, $to)
{
    $body  = "<table width=100% border=0><tr><td>";
    $body .= "<img width=200 src='";
    $body .= $this->imageUrl();
    $body .= "'></img></td><td style=position:absolute;left:350;top:60;><h2><font color = #346699>PMS Pvt Ltd.</font><h2></td></tr>";
    $body .= '<tr><td colspan=2><br/><br/><br/><strong>Dear '.$name.',</strong></td></tr>';
    $body .= '<tr><td colspan=2><br/><font size=3>As per Your request we send Your Password.</font><br/><br/>Password is : <b>'.$pass.'</b></td></tr>';
    $body .= '<tr><td colspan=2><br/>If you have any questions, please feel free to contact us at:<br/><a href="mailto:[email protected]" target="_blank">[email protected]</a></td></tr>';
    $body .= '<tr><td colspan=2><br/><br/>Best regards,<br>The PMS Team.</td></tr></table>';
    $subject = "Forgot Password";
    $this->sendmail($body, $to, $subject);
}
Mail function
function sendmail($body, $to, $subject)
{
    //require_once 'init.php';

    $from = '[email protected]';
    $headersfrom = '';
    $headersfrom .= 'MIME-Version: 1.0' . "\r\n";
    $headersfrom .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headersfrom .= 'From: ' . $from . ' ' . "\r\n";
    mail($to, $subject, $body, $headersfrom);
}

The image URL function is used for if you want to change the image. You have to it change in only one function. I have many mail functions, like for forgot password or create user. Therefore I am using the image URL function. You can directly set the path.

function imageUrl()
{
    return "http://" . $_SERVER['SERVER_NAME'] . substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], "/") + 1) . "images/capacity.jpg";
}

Solution 4 - Php

Sending an HTML email is not much different from sending normal emails using PHP. What is necessary to add is the content type along the header parameter of the PHP mail() function. Here is an example.

<?php
    $to = "toEmail@domain.com";
    $subject = "HTML email";
    $message = "
    <html>
        <head>
            <title>HTML email</title>
        </head>

        <body>
            <p>A table as email</p>
            <table>
                <tr>
                    <th>Firstname</th>
                    <th>Lastname</th>
                </tr>
                <tr>
                    <td>Fname</td>
                    <td>Sname</td>
                </tr>
            </table>
        </body>
    </html>
    ";
    // Always set content-type when sending HTML email
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\b";
    $headers .= 'From: name' . "\r\n";
    mail($to, $subject, $message, $headers);
?>

You can also check here for more detailed explanations by W3Schools.

Solution 5 - Php

You can easily send the email with HTML content via PHP. Use the following script.

<?php
$to = '[email protected]';
$subject = "Send HTML Email Using PHP";

$htmlContent = '
<html>
<body>
    <h1>Send HTML Email Using PHP</h1>
    <p>This is a HTMl email using PHP by CodexWorld</p>
</body>
</html>';

// Set content-type header for sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

// Additional headers
$headers .= 'From: CodexWorld<[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";

// Send email
if(mail($to,$subject,$htmlContent,$headers)):
    $successMsg = 'Email has sent successfully.';
else:
    $errorMsg = 'Email sending fail.';
endif;
?>

Source code and live demo can be found from here - Send Beautiful HTML Email using PHP

Solution 6 - Php

The simplest way is probably to just use Zend Framework or any of the other frameworks like CakePHP or Symfony.

You can do it with the standard mail function too, but you'll need a bit more knowledge on how to attach pictures.

Alternatively, just host the images on a server instead of attaching them. Sending HTML mail is documented in the mail() function documentation.

Solution 7 - Php

Use PHPMailer.

To send HTML mail, you have to set $mail->isHTML() only, and you can set your body with HTML tags.

Here is a well written tutorial:

How to send mail using PHP

Solution 8 - Php

The trick is to know the content id of the image MIME part when building the HTML body part.

It boils down to making the img tag—<img src="cid:entercontentidhere" />

Kronolith.php

Look at the function buildMimeMessage for a working example.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAbadisView Question on Stackoverflow
Solution 1 - PhpChrisView Answer on Stackoverflow
Solution 2 - PhpSubhajitView Answer on Stackoverflow
Solution 3 - PhpJalpesh PatelView Answer on Stackoverflow
Solution 4 - PhpbonyemView Answer on Stackoverflow
Solution 5 - PhpJoyGuruView Answer on Stackoverflow
Solution 6 - PhpMartijnView Answer on Stackoverflow
Solution 7 - PhpRohitashv SinghalView Answer on Stackoverflow
Solution 8 - PhpRalf LangView Answer on Stackoverflow