Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to embed images in html email

I'm trying to implement a code to send HTML email with embedded image.

I already tried for simple HTML email with image but this image is taken from server.

like image 433
amol Avatar asked Dec 05 '09 09:12

amol


People also ask

How do I insert an image into an HTML email?

To attach an image, you need to have the encoding scheme of the image you want to attach. This is the base64 string of the picture. You can get this by right-clicking on the image you want to attach, copy the image address, and paste it into the HTML text. The recipient will have a preview of when they open the email.

How do you embed an image in HTML?

To insert image in an HTML page, use the <img> tags. It is an empty tag, containing only attributes since the closing tag is not required. Just keep in mind that you should use the <img> tag inside <body>… </body> tag.

Can you embed HTML in an email?

Note: Quick guide to embed HTML in emailYou can embed HTML in email with the 'Insert as Text' option. Select 'Insert' > Attach File > Select the htm. file > Click on 'Insert' dropdown bar > Select 'Insert as Text'.


1 Answers

I would strongly recommend using a library like PHPMailer to send emails.
It's easier and handles most of the issues automatically for you.

Regarding displaying embedded (inline) images, here's what's on their documentation:

Inline Attachments

There is an additional way to add an attachment. If you want to make a HTML e-mail with images incorporated into the desk, it's necessary to attach the image and then link the tag to it. For example, if you add an image as inline attachment with the CID my-photo, you would access it within the HTML e-mail with <img src="cid:my-photo" alt="my-photo" />.

In detail, here is the function to add an inline attachment:

$mail->AddEmbeddedImage(filename, cid, name); //By using this function with this example's value above, results in this code: $mail->AddEmbeddedImage('my-photo.jpg', 'my-photo', 'my-photo.jpg '); 

To give you a more complete example of how it would work:

<?php require_once('../class.phpmailer.php'); $mail = new PHPMailer(true); // the true param means it will throw exceptions on     errors, which we need to catch  $mail->IsSMTP(); // telling the class to use SMTP  try {   $mail->Host       = "mail.yourdomain.com"; // SMTP server   $mail->Port       = 25;                    // set the SMTP port   $mail->SetFrom('[email protected]', 'First Last');   $mail->AddAddress('[email protected]', 'John Doe');   $mail->Subject = 'PHPMailer Test';    $mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png");   $mail->Body = 'Your <b>HTML</b> with an embedded Image: <img src="cid:my-attach"> Here is an image!';    $mail->AddAttachment('something.zip'); // this is a regular attachment (Not inline)   $mail->Send();   echo "Message Sent OK<p></p>\n"; } catch (phpmailerException $e) {   echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) {   echo $e->getMessage(); //Boring error messages from anything else! } ?> 

Edit:

Regarding your comment, you asked how to send HTML email with embedded images, so I gave you an example of how to do that.
The library I told you about can send emails using a lot of methods other than SMTP.
Take a look at the PHPMailer Example page for other examples.

One way or the other, if you don't want to send the email in the ways supported by the library, you can (should) still use the library to build the message, then you send it the way you want.

For example:

You can replace the line that send the email:

$mail->Send(); 

With this:

$mime_message = $mail->CreateBody(); //Retrieve the message content echo $mime_message; // Echo it to the screen or send it using whatever method you want 

Hope that helps. Let me know if you run into trouble using it.

like image 94
Carlos Lima Avatar answered Sep 18 '22 07:09

Carlos Lima