このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0267

CI_Email

 「CI_Email」クラスは、メール送信クライアント機能を提供します。
 「CI_Email」クラスを利用することでメールを送信するためのコーディングは非常に楽になりますが、 メールを送信するためには事前の設定が重要になってきます。

CI_Emailの設定

 「CI_Email」を設定するには、まず、メールを送信するための方法(protocol)を決めなければなりません。
メールを送信する方法(protocol)は、「sendmailコマンド」を利用する方法、「PHPのmail()関数」を利用する方法と 直接「SMTP」サーバと通信する方法の3つが用意されています。

 サーバの環境により、選択できる送信方法(protocol)が変わってきます。また、選択したプロトコルによって 「CI_Email」の設定項目が異なってきます。

  • sendmail
  • $config['protocol'] = 'sendmail';

     sendmailコマンドを利用する場合は、当然ながら「sendmail」コマンドがインストールされている 環境である必要があります。つまり、Windows環境ではこのプロトコルは選択できません。
     また、sendmailコマンドはローカルサーバのMTA(メールサーバ)を利用するため、ローカルのメールサーバが 適切に設定されている必要があります。

  • mail
  • $config['protocol'] = 'mail';

     PHPの「mail()」関数はWindows環境でも、LinuxやUnix環境でも利用できる可能性があります。
     LinuxやUnix環境の場合、「mail()」関数は結局のところ「sendmail」コマンドを利用してメールを送信します。
     Windows環境の場合、「mail()」関数がSMTPサーバと通信してメールを送信します。
     Linux・Unix環境、Windows環境共に、php.iniなどによるPHPの設定が予め必要となってきます。

  • smtp
  • $config['protocol'] = 'smtp';

     「smtp」プロトコルを選択した場合、「CI_Email」クラスは、MTA(メールサーバ)と直接ソケット通信を行い、 メールを送信します。従って、サーバシステムやPHPの設定は必要とせず、 開発者が直接、MTA(メールサーバ)の情報を「CI_Email」クラスをロードする際に指定します。

「sendmail」で必要な設定

    sendmailコマンドのファイルシステムパスを設定する必要があります。

    $config['protocol'] = 'sendmail';
    $config['mailpath'] = '/usr/sbin/sendmail';

「smtp」で必要な設定

    MTA(メールサーバ)の情報を設定する必要があります。

    $config['protocol'] = 'smtp';
    $config['smtp_host'] = 'localhost'; // SMTPサーバアドレス
    $config['smtp_port'] = 587; // SMTPサーバTCPポート番号
    $config['smtp_user'] = 'user_name'; // SMTP認証ユーザ名
    $config['smtp_pass'] = 'password'; // SMTP認証パスワード
    $config['smtp_timeout'] = 5; // SMTP接続のタイムアウト(秒)

共通設定

設定項目 デフォルト 説明
useragent CodeIgniter メールヘッダ「User-Agent:」の文字列を設定します
wordwrap TRUE ワードラップするかの設定です
wrapchars 76 「wordwrap」がTRUEの場合
折り返す文字数を設定します
mailtype text テキストメールかHTMLメールか設定します
設定値は「text」か「html」です
charset utf-8 文字コードを設定します
multipart mixed multipartタイプを「mixed」または「related」で設定します
alt_message HTMLメール送信での代替え文字列
validate FALSE メールアドレスのバリデーションを行うか設定します
priority 3 メールの重要度を設定します
newline \n メールヘッダ、メールボディの改行文字を設定します
crlf \n quoted-printableフォーマット部分の改行文字を設定します
send_multipart TRUE HTMLメールでマルチパートフォーマットを利用するか設定します
FALSEの場合「quoted-printable」フォーマットとなります
bcc_batch_mode FALSE
bcc_batch_size 200

CI_Emailのロード

 「CI_Loader」クラスの「library()」メソッドで 「CI_Email」クラスをロードします。  「application/config/email.php」の設定を利用せず、個別の設定でロードする場合は、 第二引数に設定連想配列を指定することもできます。

    $this->load->library('email');
  • 個別設定でロード
  • $config = array(
          'charset' => 'iso-2022-jp',
          'newline' => "\r\n",
    );
    $this->load->library('email', $config);

CI_Emailのメール送信機能

from($from, $name = '') 一番上に戻る

 メールの送信者アドレスを指定します。 第一引数にメールアドレスを指定します。

 第一引数に指定したメールアドレスは、メールヘッダの「From:」及び、「Return-Path:」に利用されます。 また、「エンベロープFrom」にも利用されます。

 また、第二引数に表示名を指定することができます。
 表示名は「CI_Email」によって自動でquoted-printableフォーマットされますが、文字コードは自動でコンバート されないため、予め「$config['charset']」で指定した文字コードに変換して渡す必要があります。

    $name = mb_convert_encoding('CIガイド', 'JIS', 'UTF-8'));
    $this->email->from('codeigniter@ci-guide.info', $name);

reply_to($replyto, $name = '') 一番上に戻る

 メールヘッダの「Reply-To:」にセットするアドレスを指定します。第一引数にメールアドレスを指定します。

 第二引数に表示名を指定することができますが、「reply_to()」メソッドでは、 表示名はquoted-printableフォーマットされないので、日本語などのマルチバイト文字列は指定しない方が良いでしょう。

 「reply_to()」メソッドが実行されなかった場合は、メールヘッダの「Reply-To:」は「from()」メソッドで 指定されたメールアドレスが利用されます。

    $name = 'CI Guide';
    $this->email->reply_to('codeigniter@ci-guide.info', $name);

to($to) 一番上に戻る

 宛先メールアドレスを追加指定します。  宛先メールアドレスは複数指定することが可能です。
 複数回「to()」メソッドを実行することで、宛先メールアドレスが追加されていきます。

 指定したメールアドレスは、メールヘッダの「To:」に利用されます。 また、「エンベロープTO」にも利用されます。

    $this->email->to('codeigniter@ci-guide.info');
  • 複数のアドレス
  • $this->email->to('codeigniter@ci-guide.info, ci@ci-guide.info');
  • 配列で指定
  • $to = array(
        'codeigniter@ci-guide.info',
        'ci@ci-guide.info',
    );
    $this->email->to($to);

cc($cc) 一番上に戻る

 カーボンコピーメールアドレスを指定します。  メールアドレスは複数指定することが可能です。

 指定したメールアドレスは、メールヘッダの「Cc:」に利用されます。

    $this->email->cc('guide@ci-guide.info');
  • 複数のアドレス
  • $this->email->cc('guide@ci-guide.info, ci@ci-guide.info');
  • 配列で指定
  • $cc = array(
        'guide@ci-guide.info',
        'ci@ci-guide.info',
    );
    $this->email->cc($cc);

bcc($bcc, $limit = '') 一番上に戻る

 ブラインドカーボンコピーメールアドレスを指定します。
 メールアドレスは複数指定することが可能です。

 指定したメールアドレスは、メールヘッダの「Bcc:」に利用されます。

    $this->email->bcc('guide@ci-guide.info');
  • 複数のアドレス
  • $this->email->bcc('guide@ci-guide.info, ci@ci-guide.info');
  • 配列で指定
  • $bcc = array(
        'guide@ci-guide.info',
        'ci@ci-guide.info',
    );
    $this->email->bcc($bcc);

subject($subject) 一番上に戻る

 メールの件名を指定します。

 指定した文字列は「CI_Email」クラスによってquoted-printableフォーマットされます。  しかし、文字列は予め「$config['charset']」で指定した文字コードに変換しておく必要があります。

    $subject = mb_convert_encoding('こんにちは', 'JIS', 'UTF-8');
    $this->email->subject($subject);

message($body) 一番上に戻る

 メールボディをセットします。
 文字列は予め「$config['charset']」で指定した文字コードに変換しておく必要があります。

    $body = mb_convert_encoding('拝啓 ほにゃらら', 'JIS', 'UTF-8');
    $this->email->message($body);

attach($filename, $disposition = 'attachment') 一番上に戻る

 添付ファイルを指定します。  複数回「attach()」メソッドを実行することで、複数のファイルを添付することができます。

 添付ファイルはファイルシステム上のファイルパスを指定します。ファイルパスはドキュメントルートからの 相対パスか、絶対パスで指定します。

    $this->email->attach('images/logo.gif');

 第二引数には「Content-Disposition:」の値として「'inline'」を指定することもできますが、 通常はデフォルトでよいでしょう。


send() 一番上に戻る

 メールを送信します。

 送信プロトコルが'mail'の場合、PHPの「mail()」関数の結果として「TRUE」または、「FALSE」を返します。
 送信プロトコルが'sendmail'の場合、「sendmailコマンド」の結果として「TRUE」または、「FALSE」を返します。
 送信プロトコルが'smtp'の場合、MTA(メールサーバ)が返すステータスが「250」の場合「TRUE」を返し、 それ以外では「FALSE」を返します。

 いづれも、返り値が「TRUE」であっても実際にメールが送信されたことを保証するものではありません。

    $this->email->send();
  • 空メール送信
  • $this->load->library('email');
    $this->email->from('ci@ci-guide.info');
    $this->email->to('your@mail.addr');
    $this->email->send();

clear($clear_attachments = FALSE) 一番上に戻る

 送信元メールアドレス以外のメールヘッダ、及び、メールボディを初期化します。
 デフォルトでは、添付ファイルは初期化されず保持されます。

 送信元メールアドレスを初期化する場合は、再度「from()」メソッドを実行すると上書きされます。

 第二引数に「TRUE」を指定すると添付ファイルも初期化されます。

    $this->email->clear();

CI_Emailの動的設定

 特定のメールだけ挙動を変更したい場合は、下記のメソッドで設定を動的に変更することができます。

set_alt_message($str = '') 一番上に戻る

 マルチパートHTMLメールでのHTML本文の代替え本文テキストをセットします。
 (デフォルトでは、HTML本文からHTMLタグが取り除かれたテキストが利用されます。)

    $this->email->set_alt_message('代替え本文テキスト');

set_mailtype($type = 'text') 一番上に戻る

 HTMLメールかテキストメールか設定します。引数には「text」または、「html」を指定します。

    $this->email->set_mailtype('text');
    または、
    $this->email->set_mailtype('html');

set_wordwrap($wordwrap = TRUE) 一番上に戻る

 本文テキストの自動折り返しを行うかTRUE、または、FALSE で設定します。

 日本語などのマルチバイト文字が含まれていると、文字化けを起こす可能性がありますので、 この機能の利用はお勧めできません。

    $this->email->set_wordwrap(FALSE);

set_protocol($protocol = 'mail') 一番上に戻る

 メールを送信する方式を「mail」「sendmail」「smtp」のいずれかを指定します。
詳しくは、「CI_Emailの設定」を参照してください。

    $this->email->set_protocol('mail');
    または、
    $this->email->set_protocol('sendmail');
    または、
    $this->email->set_protocol('smtp');

set_priority($n = 3) 一番上に戻る

 メールの重要度を「1」から「5」の数値で指定します。
1」が最も重要度が高く、「5」が最も重要度が低いものとなります。

    $this->email->set_priority(1);

set_newline($newline = "\n") 一番上に戻る

 改行文字(LF, CRLF, CR)を設定します。「\n」、「\r\n」、または、 「\r」のいずれかを指定します。

    $this->email->set_newline("\r\n");

set_crlf($crlf = "\n") 一番上に戻る

 「quoted-printable」エンコーディングで利用する改行文字を設定します。

    $this->email->set_crlf("\r\n");

CI_Emailのデバッグ

print_debugger() 一番上に戻る

デバッグメッセージを返します。
開発時のデバッグで利用してください。

    echo print_debugger();