Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending HTML message through PEAR while using SMTP authentication returns an error

Tags:

php

smtp

gmail

pear

I'm trying to send an HTML message while using SMTP authentication to Gmail in PHP. Here is the script that I am using:

require_once "Mail.php";
require_once 'Mail/mime.php';

$from = "Some Name <[email protected]>";
$to = "Other Name <[email protected]>";
$subject = "This is a test";
$crlf = "\n";

$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "[email protected]";
$password = "mypass";

$headers = array ('From' => $from,
                  'Return-Path' => $from,
                  'Subject' => $subject);

$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'port' => $port,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mime = new Mail_mime($crlf);
$mime->setTXTBody("This is a test email message");
$mime->setHTMLBody($body);
$body = $mime->get();
$headers = $mime->headers($headers);

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
} else {
  echo("<p>Message successfully sent!</p>");
}

Note: the $body is an HTML table with images and other info.

When I execute the script it fails with the following error:

Failed to set sender: Some name [SMTP: Invalid response code received from server (code: 555, response: 5.5.2 Syntax error. c6sm20541406obd.22)]

Here is what I've tried to see what is going wrong: 1. Using the same script using 'Mail' instead of 'smtp' i.e.

$smtp = Mail::factory('Mail');

This works just fine. 2. Using the same script w/o the mime.php, this also works but doesn't allow one to send an HTML email.

Does anybody know how I can combine the two so that I'm still using SMTP authentication and send an HTML message?

EDIT: Here is the dump of $mime->headers():

[MIME-Version] => 1.0
[From] => Some Name
[Return-Path] => Some Name
[Subject] => This is a test
[Content-Type] => multipart/alternative;
boundary="=_8662996a1f586248545d9f01f48e916d"
like image 666
Anton Soradoi Avatar asked Oct 06 '22 19:10

Anton Soradoi


2 Answers

See the below URL I think it is very help full to you.

How to send an HTML email using SMTP in PHP

The Gmail's SMTP server address is SMTP.GOOGLEMAIL.COM not SMTP.GMAIL.COM.

Therefore Your settings should be:

// ...
$smtp=array();
$smtp['host']='ssl://smtp.googlemail.com';

See another example:-

Send An HTML & Plain Text Email Using An SMTP Server With PHP & PEAR

http://tonyvirelli.com/slider/php-html-email-using-smtp/

like image 159
Abid Hussain Avatar answered Oct 10 '22 03:10

Abid Hussain


Figured it out myself finally.

Thanks to Abid Hussain for providing the link to the example here: http://tonyvirelli.com/slider/php-html-email-using-smtp/

Solution:

  1. Remove the 'Return-Path' => $from from the headers array.
  2. Add To => $to to the headers array(without this, the to header of the received email is Undisclosed recipients)
like image 22
Anton Soradoi Avatar answered Oct 10 '22 03:10

Anton Soradoi