PHPからGmailなどの外部SMTPサーバーを利用してメールの送信

最近ウェブ上のサービスからメールを送信したいけどもSMTPサーバーをわざわざ立てるのもめんどくさいし、SMTP立てるとセキュリティ管理もめんどくさそうだしという機会があって、ならGmailのSMTPサーバーを利用してして送ればいいやという機会がありました。
サーバーはsakuraのVPS, サービスはphpで作っていたものです。

ので備忘録です。

はまりどころとしては3つありました。

mb_encode_mimeheader
mb_convert_encoding
mb_encode_mimeheader($title)
mb_convert_encoding( $body, “ISO-2022-JP”, “auto” )

このあたりを設定しないと日本語での送信が文字化け。

・’username’ => GMAILUSER

“hogefuga@gmail.com” みたいなアカウントのSMTP使うなら”hogefuga”だけで。
またgoogleappsなんかで”gmail@hogefuga.com”みたいなドメインでGmailを利用しているアカウントのSMTP使うなら”gmail@hogefuga.com”全部記入。

うまく行かない場合には ‘debug’ => false を true にして確認すると良いと思いますがPHPから送る前に telnet でそもそもサーバーからの接続が可能かどうかを確認するのも大事だと思います。

% telnet smtp.gmail.com 465
Trying 74.125.141.109...
Connected to smtp.gmail.com.
Escape character is '^]'.

ここでだめならiptablesとかを見直してやり直し。

ただ色々見てると大量に送信しちゃうとはじかれるようです。


function Sendemail($title, $body, $toemail="XXX", $fromemail="XXX")
{
    require_once("Mail.php");
    require_once("Mail/mime.php");

    mb_language("japanese");
    mb_internal_encoding("utf8");

    $params =
        array(
            'host' => 'tls://smtp.gmail.com',
            'port' => 465,
            'auth' => true,
            'protocol' => 'SMTP_AUTH',
            'debug' => false,
            'username' => GMAILUSER,
            'password' => GMAILPASS,
        );  
    $headers  =
        array (
            'To' => $toemail,
            'From' => $fromemail,                                                          
            'Subject' => mb_encode_mimeheader($title),
        );  

    $body = mb_convert_encoding($body, "ISO-2022-JP", "auto");
    $smtp = Mail::factory('smtp',  $params);
    $smtp->send($toemail,  $headers,  $body);
}

Post a Comment