PEAR::MailでSMTP送信に挑戦!|無事に動作したコピペで使えるコードを公開

2018-10-04
今回は前回に引き続き、PEAR関連でPEAR::Mailで「SMTP送信」を実行させました。

PHPのド標準関数である、mail() や mb_send_mail()では、
迷惑メールになりやすいし、SPAM認定されてしまうことがあるので、
より確実に届けるにはSMTPサーバー経由による送信が有効のようです。

これまでは個人的にメール送信周りを「Qdmail」という軽量ライブラリを使用していたのですが、
随分前に開発者による更新がストップしているので、今回PEARに興味を持ちました。

それでは早速PEAR::MailのSMTP送信のコピペで使えるコードをごらんください。
※xamppとさくらインターネットでは下記コードでちゃんと動作しました。

ローカル環境で動作しなかった場合は以下の3点が怪しいです。
・xamppにPEAR::Mailがうまくインストールできていない(XAMPP PEAR検索結果
・sendmail.iniの設定がうまくできていない(対処法参考
・PEARの環境変数が通っていない(対処法参考

<?php
//PEAR::Mailのインクルード(PEARの環境変数が設定されていればこのパスで大丈夫です。)
require_once("Mail.php");

//日本語メールを送る際に必要
mb_language("Japanese");
mb_internal_encoding("UTF-8");

// SMTPサーバーの情報を連想配列にセット
$params = array(
"host" => "sample.sakura.ne.jp", // SMTPサーバー名
"port" => 587, // ポート番号
"auth" => true, // SMTP認証を使用する
"username" => "info@sample.net", // SMTPのユーザー名
"password" => "password" // SMTPのパスワード
);

// PEAR::Mailのオブジェクトを作成
$mailObject = Mail::factory("smtp", $params);

// 送信先のメールアドレス
$recipients = "sample@gmail.com";

// メールヘッダ情報を連想配列としてセット
$headers = array(
"To" => "info@sample.net", // ここで指定したアドレスには送信されない
"From" => "info@sample.net",
"Subject" => mb_encode_mimeheader("メール件名") // 日本語の件名を指定する場合、mb_encode_mimeheaderでエンコード
);

// メール本文
$body = "日本語メールの本文。";

// 日本語なのでエンコード
$body = mb_convert_encoding($body, "ISO-2022-JP", "UTF-8");

// sendメソッドでメールを送信
$mailObject->send($recipients, $headers, $body);
?>

さくらインターネットはメール一括送信(メルマガ送信)の際、15分毎に100通以内の制限があります。ですので、このSMTP送信のコードを使って、15分おきに100通ずつ送信する簡単なシステムを近々作成しようと思います。
PHPのsleep関数は個人的に邪道だと思っているので、javascriptを駆使して15分毎に送信するようにしようと考えています。