views:

129

answers:

4

I want to store angle brackets in a string in PHP because i want to eventually use mail() to send an HTML email out.

The following is the code that doesn't seem to work.

while(...) {
   $msg .= "<img src=\"http://.../images/".$media['Path']."\"&gt;&lt;br&gt;";
   echo "message: ".$msg."<br>";
}

What I want is for $msg to contain a bunch of images (provided by $media['Path']) that are separated by line breaks. Then $msg is passed into mail().

The echo confirms that no images are being sent. And, indeed, I receive no images in the email body. Why is this happening? How can I fix it?

A: 

Your code will try to get images from the Internet, but at the same time you are giving a local path. If you want to send images in the e-mail, try this: http://www.phpeveryday.com/articles/PHP-Email-Using-Embedded-Images-in-HTML-Email-P113.html

Karol
+3  A: 

There are two ways of embedding images in an email:

  1. As external references: <img src="http://..."; and
  2. Embedded in the email.

(1) is I guess what you're trying to do. Many mail programs will (rightly) block such images as they are used by spammers to test email accounts for liveness.

It's better to do (2). See PHP Email: Using Embedded Images in HTML Email. Basically you create a multi-part MIME email (so you can attach HTML and the images) and then reference them by cid instead of a true URL. These are far less suspicious to any mail program that receives them but obviously result in bigger emails (as the image might be sent 100,000 times instead of just sending a URL).

cletus
I would need an array of $sep = sha1(date('r', time())) so that I can identify each image? But how would I cycle through the array n number of times to include them all in the html body?
Teef L
While that is a great answer, I can't seem to get that to work, and I'm on a strict time schedule. I found the bug in my code that wasn't letting the img tag go through. Thanks, though!
Teef L
+1  A: 

Have you inspected the HTML that gets echo'd out? You probably have the wrong image path. Also, if you're going to be emailing that, you need to use an absolute path (http://yoursite.com/images/theimage.jpg rather than images/theimage.jpg).

Also, make sure that you have the headers set up right in the mail() function so that it gets sent as HTML instead of plaintext.

Mark
I thought that was problem, too, but I confirmed the paths, and that doesn't seem to be it.
Teef L
A: 

You could also use a mail wrapper such as Swiftmailer or PHPMailer which may help you with your problem. You have said that you are on a time limit though, so it may take you longer to actually convert across to using something like this.

Blair McMillan