CakePHPからGmailのSMTPサーバーを利用してメール送信したい。

http://sane.justblog.jp/blog/2008/02/cakephpgmail-e5.htmlを参考にやってみたのですが

Warning (2): fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?)

このようなエラーが出てしまいました。
この原因もわからなかったのですが、とりあえず
$config['Gmail']['host'] = 'ssl://smtp.gmail.com';
を↓にすると、
$config['Gmail']['host'] = 'smtp.gmail.com';

最初に記述したエラーは消えたのですが、今度は
Notice (8): fputs() [function.fputs]: send of 16 bytes failed with errno=10054
~~~ここに文字化けしたような文字が並んでいる~~~~
[CORE\vendors\phpmailer\class.smtp.php, line 556]
このようなエラーが出てしまいます。

何が悪いのでしょうか。やりたいことはCakePHPからメール送信させることです。Gmailなどの外部smtpサーバを利用するのが一番簡単なように感じたのですが…しくみが理解できてないのかテコずってます。PHP.iniの設定なども必要なのでしょうか。(コメント欄に質問の補足があります)

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/09/22 12:42:22
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント35pt

ウノウラボ Unoh Labs: PHPでSSL通信する時の注意点

Gmail の SMTP サーバーは通常のものと違い SMTPS( SMTP over SSL )を使用する必要があります。

このためには、PHP 自体が SSL をサポートしている必要があるので、まずはそれを確認してください。

通信する際のプロトコル、及びラッパが使用可能かを調べます。この場合はhttps://(PHP4.3.0以降)が対象です。 phpinfo()ではRegisterd PHP Streamで確認できます。 SSL通信の場合OpenSSLがインストールされている必要があり、PHP4.3.0以降では静的にコンパイルされ組み込まれている必要がありますが、PHP5以降ではモジュールとしてコンパイルされていても使用できます。

id:dedara

ありがとうございます。

php.iniにOpenSSLのextensionを追加したらできました。

2008/09/22 12:39:35

その他の回答1件)

id:t_shiono No.1

回答回数256ベストアンサー獲得回数22

ポイント35pt

試していませんが、SSL通信が許可されていないのではないでしょうか?

以下のURLが参考になるかと思います。

http://labs.unoh.net/2007/09/phpssl.html

id:dedara

ありがとうございます。

php.iniにOpenSSLのextensionを追加したらできました。

2008/09/22 12:39:33
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント35pt

ウノウラボ Unoh Labs: PHPでSSL通信する時の注意点

Gmail の SMTP サーバーは通常のものと違い SMTPS( SMTP over SSL )を使用する必要があります。

このためには、PHP 自体が SSL をサポートしている必要があるので、まずはそれを確認してください。

通信する際のプロトコル、及びラッパが使用可能かを調べます。この場合はhttps://(PHP4.3.0以降)が対象です。 phpinfo()ではRegisterd PHP Streamで確認できます。 SSL通信の場合OpenSSLがインストールされている必要があり、PHP4.3.0以降では静的にコンパイルされ組み込まれている必要がありますが、PHP5以降ではモジュールとしてコンパイルされていても使用できます。

id:dedara

ありがとうございます。

php.iniにOpenSSLのextensionを追加したらできました。

2008/09/22 12:39:35
  • id:dedara
    【補足】
    CakePHPは1.2です

    PHP.iniのmbstringの設定は以下のとおりです。
    mbstring.language = Japanese
    mbstring.internal_encoding = utf-8
    mbstring.http_input = auto
    mbstring.http_output = utf-8

    PHPファイルの文字コードはutf-8(bom無し)です。
    よってリンク先(リンク先のリンク先)にあるソースの
    mb_internal_encoding("EUC-JP");
    とあるところは
    mb_internal_encoding("utf-8");
    に書き換え
    $mail->FromName = mb_encode_mimeheader(mb_convert_encoding($fromname,"JIS","EUC-JP"));
    $mail->Subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","EUC-JP"));
    $mail->Body = mb_convert_encoding($subject,"JIS","EUC-JP");
    のEUC-JPとあるところもutf-8に書き換えています。

    以下はPHP.iniのsmtp関連の設定です
    SMTP = localhost
    smtp_port = 25
    sendmail_from = me@example.com

    以下はapp/config/gmailaccount.phpの記述です
    $config['Gmail']['username'] = '*****@gmail.com';
    $config['Gmail']['password'] = '*****';
    //$config['Gmail']['host'] = 'ssl://smtp.gmail.com';
    $config['Gmail']['host'] = 'smtp.gmail.com';
    $config['Gmail']['port'] = 465;

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません