CI_Email
「CI_Email」クラスは、メール送信クライアント機能を提供します。
「CI_Email」クラスを利用することでメールを送信するためのコーディングは非常に楽になりますが、
メールを送信するためには事前の設定が重要になってきます。
CI_Emailの設定
「CI_Email」を設定するには、まず、メールを送信するための方法(protocol)を決めなければなりません。
メールを送信する方法(protocol)は、「sendmailコマンド」を利用する方法、「PHPのmail()関数」を利用する方法と
直接「SMTP」サーバと通信する方法の3つが用意されています。
サーバの環境により、選択できる送信方法(protocol)が変わってきます。また、選択したプロトコルによって 「CI_Email」の設定項目が異なってきます。
- sendmail
- smtp
sendmailコマンドを利用する場合は、当然ながら「sendmail」コマンドがインストールされている
環境である必要があります。つまり、Windows環境ではこのプロトコルは選択できません。
また、sendmailコマンドはローカルサーバのMTA(メールサーバ)を利用するため、ローカルのメールサーバが
適切に設定されている必要があります。
PHPの「mail()」関数はWindows環境でも、LinuxやUnix環境でも利用できる可能性があります。
LinuxやUnix環境の場合、「mail()」関数は結局のところ「sendmail」コマンドを利用してメールを送信します。
Windows環境の場合、「mail()」関数がSMTPサーバと通信してメールを送信します。
Linux・Unix環境、Windows環境共に、php.iniなどによるPHPの設定が予め必要となってきます。
「smtp」プロトコルを選択した場合、「CI_Email」クラスは、MTA(メールサーバ)と直接ソケット通信を行い、 メールを送信します。従って、サーバシステムやPHPの設定は必要とせず、 開発者が直接、MTA(メールサーバ)の情報を「CI_Email」クラスをロードする際に指定します。
「sendmail」で必要な設定
sendmailコマンドのファイルシステムパスを設定する必要があります。
$config['mailpath'] = '/usr/sbin/sendmail';
「smtp」で必要な設定
MTA(メールサーバ)の情報を設定する必要があります。
$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」の設定を利用せず、個別の設定でロードする場合は、 第二引数に設定連想配列を指定することもできます。
- 個別設定でロード
'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']」で指定した文字コードに変換して渡す必要があります。
$this->email->from('codeigniter@ci-guide.info', $name);
reply_to($replyto, $name = '') 一番上に戻る
メールヘッダの「Reply-To:」にセットするアドレスを指定します。第一引数にメールアドレスを指定します。
第二引数に表示名を指定することができますが、「reply_to()」メソッドでは、 表示名はquoted-printableフォーマットされないので、日本語などのマルチバイト文字列は指定しない方が良いでしょう。
「reply_to()」メソッドが実行されなかった場合は、メールヘッダの「Reply-To:」は「from()」メソッドで 指定されたメールアドレスが利用されます。
$this->email->reply_to('codeigniter@ci-guide.info', $name);
to($to) 一番上に戻る
宛先メールアドレスを追加指定します。
宛先メールアドレスは複数指定することが可能です。
複数回「to()」メソッドを実行することで、宛先メールアドレスが追加されていきます。
指定したメールアドレスは、メールヘッダの「To:」に利用されます。 また、「エンベロープTO」にも利用されます。
- 複数のアドレス
- 配列で指定
'codeigniter@ci-guide.info',
'ci@ci-guide.info',
);
$this->email->to($to);
cc($cc) 一番上に戻る
カーボンコピーメールアドレスを指定します。 メールアドレスは複数指定することが可能です。
指定したメールアドレスは、メールヘッダの「Cc:」に利用されます。
- 複数のアドレス
- 配列で指定
'guide@ci-guide.info',
'ci@ci-guide.info',
);
$this->email->cc($cc);
bcc($bcc, $limit = '') 一番上に戻る
ブラインドカーボンコピーメールアドレスを指定します。
メールアドレスは複数指定することが可能です。
指定したメールアドレスは、メールヘッダの「Bcc:」に利用されます。
- 複数のアドレス
- 配列で指定
'guide@ci-guide.info',
'ci@ci-guide.info',
);
$this->email->bcc($bcc);
subject($subject) 一番上に戻る
メールの件名を指定します。
指定した文字列は「CI_Email」クラスによってquoted-printableフォーマットされます。 しかし、文字列は予め「$config['charset']」で指定した文字コードに変換しておく必要があります。
$this->email->subject($subject);
message($body) 一番上に戻る
メールボディをセットします。
文字列は予め「$config['charset']」で指定した文字コードに変換しておく必要があります。
$this->email->message($body);
attach($filename, $disposition = 'attachment') 一番上に戻る
添付ファイルを指定します。 複数回「attach()」メソッドを実行することで、複数のファイルを添付することができます。
添付ファイルはファイルシステム上のファイルパスを指定します。ファイルパスはドキュメントルートからの 相対パスか、絶対パスで指定します。
第二引数には「Content-Disposition:」の値として「'inline'」を指定することもできますが、 通常はデフォルトでよいでしょう。
send() 一番上に戻る
メールを送信します。
送信プロトコルが'mail'の場合、PHPの「mail()」関数の結果として「TRUE」または、「FALSE」を返します。
送信プロトコルが'sendmail'の場合、「sendmailコマンド」の結果として「TRUE」または、「FALSE」を返します。
送信プロトコルが'smtp'の場合、MTA(メールサーバ)が返すステータスが「250」の場合「TRUE」を返し、
それ以外では「FALSE」を返します。
いづれも、返り値が「TRUE」であっても実際にメールが送信されたことを保証するものではありません。
- 空メール送信
$this->email->from('ci@ci-guide.info');
$this->email->to('your@mail.addr');
$this->email->send();
clear($clear_attachments = FALSE) 一番上に戻る
送信元メールアドレス以外のメールヘッダ、及び、メールボディを初期化します。
デフォルトでは、添付ファイルは初期化されず保持されます。
送信元メールアドレスを初期化する場合は、再度「from()」メソッドを実行すると上書きされます。
第二引数に「TRUE」を指定すると添付ファイルも初期化されます。
CI_Emailの動的設定
特定のメールだけ挙動を変更したい場合は、下記のメソッドで設定を動的に変更することができます。
set_alt_message($str = '') 一番上に戻る
マルチパートHTMLメールでのHTML本文の代替え本文テキストをセットします。
(デフォルトでは、HTML本文からHTMLタグが取り除かれたテキストが利用されます。)
set_mailtype($type = 'text') 一番上に戻る
HTMLメールかテキストメールか設定します。引数には「text」または、「html」を指定します。
set_wordwrap($wordwrap = TRUE) 一番上に戻る
本文テキストの自動折り返しを行うかTRUE、または、FALSE で設定します。
日本語などのマルチバイト文字が含まれていると、文字化けを起こす可能性がありますので、 この機能の利用はお勧めできません。
set_protocol($protocol = 'mail') 一番上に戻る
メールを送信する方式を「mail」「sendmail」「smtp」のいずれかを指定します。
詳しくは、「CI_Emailの設定」を参照してください。
set_priority($n = 3) 一番上に戻る
メールの重要度を「1」から「5」の数値で指定します。
「1」が最も重要度が高く、「5」が最も重要度が低いものとなります。
set_newline($newline = "\n") 一番上に戻る
改行文字(LF, CRLF, CR)を設定します。「\n」、「\r\n」、または、 「\r」のいずれかを指定します。
set_crlf($crlf = "\n") 一番上に戻る
「quoted-printable」エンコーディングで利用する改行文字を設定します。