Как использовать грушевый почтовый мим

Как вы можете использовать грушевый почтовый мим с Google. Я нашел это, что позволяет вам использовать почту груши с Google, но не почту mime: http://globalconstant.scnay.com/2009/11/06/sending-email-through-gmail-using-php/

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

$from = "Sender <*******@googlemail.com>";
$to = "Receiver <*******@googlemail.com>";
$subject = "Welcome to SITENAME!";
$crlf = "\n";
$html = "<h1> This is HTML </h1>";

$headers = array('From' => $from,
                 'To' => $to,
                 'Subject' => $subject);


$host = "smtp.gmail.com";
$port = 465;
$username = "********@googlemail.com";
$password = "********";

$mime = new Mail_mime($crlf);
$mime->setHTMLBody($html);

$body = $mime->get();
$headers = $mime->headers($headers);

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

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

if (PEAR::isError($mail)) {
echo $mail->getMessage();
} else {
echo "Message sent successfully!";
}
echo "\n";

я продолжаю получать

Не удалось добавить получателя: @localhost [SMTP: с сервера получен неверный код ответа (код: 555, ответ: 5.5.2 Синтаксическая ошибка. f52sm5542930wes.35)]

Изменить:

Теперь электронное письмо получено, однако оно выглядит так:

This is a message I sent from <a href=3D"http://www.php.net/">PHP</a> using=
 the PEAR Mail package and SMTP through Gmail. Enjoy!

person john    schedule 26.12.2010    source источник
comment
Можете ли вы уточнить, что вы имеете в виду?   -  person Pekka    schedule 26.12.2010
comment
@Pekka: Я думаю, @john означает, что он хочет отправить электронное письмо в формате HTML.   -  person stealthyninja    schedule 26.12.2010
comment
Извините, PHP-код не появился, проклятый Markdown, теперь он там. Да, я хочу отправить электронное письмо в формате HTML. ^   -  person john    schedule 27.12.2010
comment
Почему минус? Я прояснил вопрос.   -  person john    schedule 27.12.2010


Ответы (5)


Похоже, у вас проблема с заголовком электронной почты. Я обновил ваш код на основе почтового документа груши (http://pear.php.net/manual/en/package.mail.mail-mime.example.php):

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

$from = "Sender <*******@googlemail.com>";
$to = "Receiver <*******@googlemail.com>";
$subject = "Welcome to SITENAME!";
$crlf = "\n";
$html = "<h1> This is HTML </h1>";

$headers = array('From' => $from,
                 'To' => $to,
                 'Subject' => $subject);


//$host = "smtp.gmail.com";
$host = "ssl://smtp.gmail.com"; // try this one to use ssl
$port = 465;
$username = "********@googlemail.com";
$password = "********";

//$mime = new Mail_mime($crlf);
$mime =  new Mail_mime(array('eol' => $crlf)); //based on pear doc     
$mime->setHTMLBody($html);

//$body = $mime->get();
$body = $mime->getMessageBody(); //based on pear doc above
$headers = $mime->headers($headers);

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

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

if (PEAR::isError($mail)) {
echo $mail->getMessage();
} else {
echo "Message sent successfully!";
}
echo "\n";

Это работает для меня, поэтому я надеюсь, что это сработает для вас! Привет, Эрез

person ErezSO    schedule 17.07.2011

@john: Используя код из опубликованной вами ссылки, измените его следующим образом:

<?php
require_once('Mail.php');
require_once('Mail/mime.php');

$from = 'Sender <[email protected]>';
$to = 'Receiver <[email protected]>';
$subject = 'Sent from PHP on my machine';

$text = 'This is a message I sent from <a href="http://www.php.net/">PHP</a> '
      . 'using the PEAR Mail package and SMTP through Gmail. Enjoy!';

$message = new Mail_mime();
$message->setTXTBody(strip_tags($text)); // for plain-text
$message->setHTMLBody($text);
$body = $message->get();

$host = 'smtp.gmail.com';
$port = 587; //According to Google you need to use 465 or 587
$username = 'sender';
$password = 'your_password';

$headers = array('From' => $from,
    'To' => $to,
    'Subject' => $subject);

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

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

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

echo "\n";

?>

Обновление:

Изменить:

Теперь электронное письмо получено, однако оно выглядит так:

This is a message I sent from <a href=3D"http://www.php.net/">PHP</a> using=
the PEAR Mail package and SMTP through Gmail. Enjoy!

@john: обновить

$body = $mime->get();

to

$body = $mime->get(array('text_charset' => 'utf-8'));

и попробуй еще раз.

person stealthyninja    schedule 26.12.2010
comment
Вероятно, верное предположение. +1 - person Pekka; 26.12.2010
comment
Я до сих пор получаю такие письма: ‹html›‹body›Уважаемый участник, Чтобы подтвердить свою учетную запись, нажмите= на следующую ссылку: ‹br/›‹a href=3D?action=3Dverify&id=3D33c292bcfc377= 818a43a1cfb6f470bf91f59e556c221c13a97c326f47c66 =3Dverify&id=3D= 33c292bcfc377818a43a1cfb6f470bf91f59e556c221c13a97c326f47c6c00b7‹/a›. Наслаждайтесь = !‹/body›‹/html› - person john; 27.12.2010

$body = $mime->get(array('text_charset' => 'utf-8'));

В дополнение к вышеперечисленному вам нужен html_charset для html-писем.

$crlf = "\n";

$body = $mime->get(array('html_charset' => 'utf-8', 'text_charset' => 'utf-8', 'eol' => $crlf));

Это исправит такие аберрации, как Â в электронных письмах.

person geilt    schedule 18.07.2011

Не смог прокомментировать ответ StealthyNinja, поэтому я опубликовал свой собственный, извините за это.

Вопрос также немного устарел, но, возможно, это может быть полезно для других.

Чтобы избавиться от всех этих HTML-тегов и странных символов, вы должны подготовить свой заголовок, чтобы клиент электронной почты мог правильно читать электронную почту. Попробуйте это ПОСЛЕ настройки массива $headers:

$headers = $message->headers($headers);

После этого должно работать нормально.

person Theo    schedule 11.03.2011

Я использовал этот код для удаления 3D после знака =.

$hdrs = array( 'From'    => $from,
       'To'      => $to,
       'Subject' => $subject  );

$mime =& new Mail_mime();
$mime->setTXTBody($message);

if($htmlMessage==""){
    $htmlMessage=$message;
}

$mime->setHTMLBody($htmlMessage);
if($attachmentIsFile){
    if($attachment!=null)
        $mime->addAttachment($attachment,'application/octet-stream',$attachmentName.extractExtension($attachment));
}else{
    if($attachment!="")
        $mime->addAttachment($attachment,'application/octet-stream',$attachmentName,false);
}
$body = $mime->get(array('text_encoding' => '8bit','html_encoding' => '8bit'));
$hdrs = $mime->headers($hdrs);
person foram    schedule 14.11.2016