CodeIgniterで日本語のメールを送信する際の書き方と、何かと便利そうなのに参考文献が少ないBCCバッチモードについてのメモです。
/*メール送信*/
$this->load->library('email');
$config['charset'] = 'UTF-8'; //文字コードを設定
$config['wordwrap'] = TRUE; //改行モードを設定
$config['wrapchars'] = 76; //改行文字数を設定
$config['crlf'] = '\r\n'; //改行コードを設定
$config['newline'] = '\n'; //改行文字を設定
$bcc_limit = 100; //BCC送信時に分割する件数
$bcc_addr = array('foo1@example.com', 'foo2@example.com');//BCC宛先
$this->email->initialize($config);
$this->email->from('hoge@example.com');
$this->email->to('foo@example.com');
$this->email->bcc($bcc_addr, $bcc_limit);
$this->email->subject('タイトル');
$this->email->message('本文です');
$this->email->send();
文字コードは従来だと”ISO-2022-JP”を指定していましたが、最近だと”UTF-8″が無難だろうということで、そうしています。改行コードは環境に合わせて選択するようですが、私の環境ではCR+LFの指定で問題なさそうです。(詳しくはPHPでのmail関数によるメール送信とMTAの関係について調べてみて下さい。)
EmailクラスのBCCバッチモードに関する設定項目である”bcc_batch_mode”と”bcc_batch_size”がありますが、これをあえてconfigで指定する必要はありません。coreのソースコードを見れば分かりますが、bcc関数の第2引数を記述すれば、自動的に”bcc_batch_mode”と”bcc_batch_size”を設定してくれます。
分割する件数というのは、仮にBCCの宛先が500件あって分割件数が100件だと5回に分けて送信されるということです。(Toには5通届く)
BCCを使ったのは、宛先分を1通ずつ送信するより送信件数が抑えられて規制にひっかかりにくいだろうと考えたからですが、例えばBDにメールキューテーブルなんかを作って置いて、cronとバッチプログラムで定期的に一定件数分割した上で連続送信する方法もありますので、時間を作って試してみるつもりでいます。しかし、その場合でも連続で送信するような事をしたい時、デフォルトのプロトコルとして指定されるmail関数による送信を使うべきではないようです。(参考:PHP:Mail)
それにしても、メールクライアントソフトによって迷惑メールフォルダに入ったり入らなかったりと不思議な現象が起きています。暫く、試行錯誤の日々が続きそうです。