5

PHP で SMTP 認証を使用して Gmail に HTML メッセージを送信しようとしています。私が使用しているスクリプトは次のとおりです。

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

$from = "Some Name <myemail@gmail.com>";
$to = "Other Name <otheremail@gmail.com>";
$subject = "This is a test";
$crlf = "\n";

$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "myemail@gmail.com";
$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>");
}

注:$body、画像やその他の情報を含む HTML テーブルです。

スクリプトを実行すると、次のエラーで失敗します。

送信者の設定に失敗しました: 一部の名前 [SMTP: サーバーから受信した無効な応答コード (コード: 555、応答: 5.5.2 構文エラー。c6sm20541406obd.22)]

1. 「smtp」の代わりに「Mail」を使用して同じスクリプトを使用する、すなわち

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

これはうまくいきます。2. mime.php なしで同じスクリプトを使用すると、これも機能しますが、HTML メールを送信することはできません。

SMTP認証を使用してHTMLメッセージを送信できるように、2つを組み合わせる方法を知っている人はいますか?

編集: これはのダンプです$mime->headers()

[MIME-Version] => 1.0
[From] => Some Name
[Return-Path] => Some Name
[Subject] => This is a test
[Content-Type] => multipart/alternative;
boundary="=_8662996a1f586248545d9f01f48e916d"
4

4 に答える 4

2

以下の URL を参照してください。非常に役立つと思います。

PHP で SMTP を使用して HTML メールを送信する方法

Gmail の SMTP サーバー アドレスはSMTP.GOOGLEMAIL.COMであり、 SMTP.GMAIL.COMではありません。

したがって、設定は次のようになります。

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

別の例を参照してください:-

PHP と PEAR で SMTP サーバーを使用して HTML とプレーン テキストの電子メールを送信する

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

于 2012-09-17T18:59:04.563 に答える
1

次のように、名前を二重引用符で囲みます。

$from = '"Some Name" <myemail@gmail.com>';
$to = '"Other Name" <otheremail@gmail.com>';

試してみて、それについて教えてください。

更新:
わかりました、上記は機能しませんでした。そのため、php ページで smtp gmail を介してメールを送信することがどのように機能しているかを説明します。

それに基づいて、設定を次のように変更してみてください。

$host = "tls://smtp.gmail.com";
$port = "587";

ここでは、phpmailer を使用して gmail 経由でメールを送信する方法を確認できます。

于 2012-09-17T23:21:32.850 に答える
1

最後に自分で考え出しました。

ここに例へのリンクを提供してくれたAbid Hussainに感謝します: http://tonyvirelli.com/slider/php-html-email-using-smtp/

解決:

  1. 'Return-Path' => $fromヘッダー配列から を削除します。
  2. To => $toheaders 配列に追加します (これがないと、受信メールのtoヘッダーはUndisclosed recipientsになります)
于 2012-09-18T15:48:17.500 に答える