Email クラス¶
CodeIgniter の堅牢な Email クラスは、次のような機能に対応しています:
- 複数プロトコル: メール、Sendmail、および SMTP
- SMTPのための暗号化 TLS および SSL
- 複数の受取人
- CC と BCC
- HTML または プレーンテキスト email
- 添付
- ワードラップ
- 優先度
- BCC バッチモード。これは、大きなメールリストを小さな BCC バッチに分割します。
- Email デバッグツール
Email クラスを使う¶
Email の送信¶
メールの送信は単純なだけでなく、送信する直前にも設定ファイル でも、メール送信の設定ができます。
以下は、どうやってメールを送信できるかを示した基本的な例です。 .. note:: この例では、コントローラ でメールを送信すると仮定しています。
$this->load->library('email');
$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');
$this->email->cc('another@another-example.com');
$this->email->bcc('them@their-example.com');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
$this->email->send();
Email のオプションを設定する¶
メールの送信方法をカスタマイズできる21の設定項目が 利用可能です。以下で述べるように手動で設定することも できますし、後述するように、設定ファイルに保管された 項目から自動設定することもできます:
設定項目は、email クラスの initialize メソッドに設定項目の配列を渡す ことでセットすることができます。以下は、設定項目をどのようにセット できるかの例です:
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$this->email->initialize($config);
Note
ほとんどの設定項目には、設定しなかった場合に使われる 初期値があります。
設定ファイルでEmailの設定を行う¶
設定をするのに、上で述べた方法を使いたくない場合は、代わりに設定 ファイルにその設定を書いておくことができます。 email.php という 名前で新しいファイルをつくり、$config という配列をそのファイル に書くだけです。 そして、config/email.php にそのファイルを保存 すると、自動的にそれが使われます。 設定ファイルで設定した場合は、 $this->email->initialize() メソッドを使う必要は「ありません」。
Email クラスの設定項目¶
次のリストは、メールを送信する際にセットできる 設定項目の全リストです。
設定項目 | 初期値 | 選択肢 | 説明 |
---|---|---|---|
useragent | CodeIgniter | なし | ユーザエージェント |
protocol | mail, sendmail, または smtp | メールを送信するプロトコル | |
mailpath | /usr/sbin/sendmail | なし | Sendmail へのパス |
smtp_host | 初期値なし | なし | SMTP サーバのアドレス |
smtp_user | 初期値なし | なし | SMTP のユーザ名 |
smtp_pass | 初期値なし | なし | SMTP のパスワード |
smtp_port | 25 | なし | SMTP のポート番号 |
smtp_timeout | 5 | なし | SMTP のタイムアウト (秒単位) |
smtp_keepalive | FALSE | TRUE または FALSE(boolean) | 持続的SMTP接続の有効化 |
smtp_crypto | 初期値なし | tls または ssl | SMTP暗号化 |
wordwrap | TRUE | TRUE または FALSE (boolean) | ワードラップの有効化設定 |
wrapchars | 76 | 何番目の文字で折り返すか | |
mailtype | text | text または html | メールのタイプ。HTML メールを送信すると、メールは完全な Web ページとして送信されます。このとき、相対リンクや画像への相対 パスがないか確かめてください。それらは動作しません。 |
charset | $config['charset'] |
文字セット (utf-8、iso-8859-1、など) | |
validate | FALSE | TRUE または FALSE(boolean) | メールアドレスを検証するかどうか |
priority | 3 | 1, 2, 3, 4, 5 | メールの優先度。 1 = 最高 5 = 最低 3 = 通常 |
crlf | \n | “\r\n” or “\n” or “\r” | CRLF (“\r\n” RFC 822に応じて使用). |
newline | \n | “\r\n” or “\n” or “\r” | 改行文字 (“\r\n” RFC 822に応じて使用). |
bcc_batch_mode | FALSE | TRUE またはFALSE(boolean) | BCC バッチモードを有効にするかどうか |
bcc_batch_size | 200 | なし | 各 BCC バッチで送るメール件数。 |
dsn | FALSE | TRUE または FALSE (boolean) | サーバーからのメッセージ通知を有効にする |
ワードラップ設定の上書き¶
ワードラップが有効になっている (RFC 822 に従うことを推奨します) 場合 、email に非常に長いリンクがあると折り返されてしまい、受信 した人がクリックできないようになります。 CodeIgniter では、次の ようにして、メッセージの一部で手動でワードラップ設定を上書きする ことができます:
通常通り折り返された メールのテキスト。
{unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}
さらに通常通り折り返 されたテキスト.
折り返したくない項目を {unwrap} {/unwrap}で挟んでください。
クラスリファレンス¶
-
class
CI_Email
¶ -
from
($from[, $name = ''[, $return_path = NULL]])¶ パラメータ string $from: “From” メールアドレス パラメータ string $name: “From” 表示名 パラメータ string $return_path: 未配達の電子メールをリダイレクトするオプションのメールアドレス 返り値: CI_Email インスタンス (メソッドチエーン) 返り値型: CI_Email 電子メール送信者の電子メールアドレスと氏名をセットします:
$this->email->from('you@example.com', 'あなたの名前');
送信したメールのリターンパスを決めることもできます。未配達のメールを転送するのを支援します。:
$this->email->from('you@example.com', 'あなたの名前', 'returned_emails@example.com');
Note
プロトコルとして「SMTP」を設定した場合、 リターンパスは使用できません。
-
reply_to
($replyto[, $name = ''])¶ パラメータ string $replyto: 返信の電子メール・アドレス パラメータ string $name: 返信の電子メールアドレス名を示します 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email 返信先アドレスをセットします。指定しない場合は、”from” メソッド で指定されたものが使われます。例:
$this->email->reply_to(‘you@example.com’, ‘あなたの名前’);
-
to
($to)¶ パラメータ mixed $to: メールアドレス カンマで区切られた列または配列 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email 受取人のメールアドレスをセットします(複数可)。次のように、単一のメールアドレス、 カンマ区切りのリスト、あるいは配列で指定可能です:
$this->email->to(‘someone@example.com’);$this->email->to('one@example.com, two@example.com, three@example.com');
$this->email->to( array('one@example.com', 'two@example.com', 'three@example.com') );
-
cc
($cc)¶ パラメータ mixed $cc: メールアドレス カンマで区切られた列または配列 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email CC のメールアドレスをセットします(複数可)。 “to” メソッドのように、単一のメールアドレス、 カンマ区切りのリスト、あるいは配列で指定可能です。
-
bcc
($bcc[, $limit = ''])¶ パラメータ mixed $bcc: メールアドレス カンマで区切られた列または配列 パラメータ int $limit: バッチ送信する電子メールの最大数 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email BCC のメールアドレスをセットします(複数可)。”to” メソッドのように、単一のメールアドレス、 ンマ区切りのリスト、あるいは配列で指定可能です。
「$LIMIT」が設定されている場合は、「バッチモード」は、各バッチ が指定された「$LIMIT」を超えないと、バッチに電子メールを送信します、 これが有効になります。
-
subject
($subject)¶ パラメータ string $subject: 電子メールの件名 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email 電子メールの件名をセットします:
$this->email->subject('This is my subject');
-
message
($body)¶ パラメータ string $body: 電子メール本文 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email 電子メールの本文をセットします:
$this->email->message('This is my message');
-
set_alt_message
($str)¶ パラメータ string $str: 代替のメール本文: 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email 代替のメール本文をセットします:
$this->email->set_alt_message('This is the alternative message');
これは、HTML形式にフォーマットされた電子メールを送信する場合に使用 できるオプションのメッセージ文字列です。あなたがHTML形式のメールを 対応していない人々の為、ヘッダ文字列に追加されていないHTMLフォーマ ットで代替メッセージを指定することができます。あなた自身のメッセー ジを設定しないとCodeIgniterはHTMLメールからメッセージを抽出しタグを 削除します。
-
set_header
($header, $value)¶ パラメータ string $header: ヘッダ名 パラメータ string $value: ヘッダ内容 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email 電子メールの追加のヘッダーを付加:
$this->email->set_header('Header1', 'Value1'); $this->email->set_header('Header2', 'Value2');
-
clear
([$clear_attachments = FALSE])¶ パラメータ bool $clear_attachments: 添付ファイルをクリアするかどうか 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email メールの設定を空状態にします。 このメソッドは、ループの 各サイクルでデータをリセットしながらメール送信機能を使う 場合を意図しています。
foreach ($list as $name => $address) { $this->email->clear(); $this->email->to($address); $this->email->from('your@example.com'); $this->email->subject('あなたの情報 '.$name); $this->email->message('こんにちは '.$name.'さん ご要望の情報です。'); $this->email->send(); }
次のように引数に TRUE をセットした場合は、すべての添付も 解除されます:
$this->email->clear(TRUE);
-
send
([$auto_clear = TRUE])¶ パラメータ bool $auto_clear: 自動的にメッセージデータをクリアするかどうか 返り値: 成功時TRUE、失敗した場合FALSE 返り値型: bool メール送信メソッド。 条件判断が利用できるよう、送信が成功したか失敗したかに 基づいてブール値の TRUE か FALSE が返ります:
if ( ! $this->email->send()) { // エラーを生成します }
要求が成功した場合、このメソッドは自動的にすべてのパラメータをクリアします。 この動作を停止するにはFALSEを渡します:
if ($this->email->send(FALSE)) { // パラメータはクリアされません }
Note
「print_debugger」を使用するためには、電子メールのパラメータ をクリアしないようにする必要があります。
-
attach
($filename[, $disposition = ''[, $newname = NULL[, $mime = '']]])¶ パラメータ string $filename: ファイル名 パラメータ string $disposition: 添付ファイルを「配置」します。ほとんどの電子メールクライアント にかかわらず、ここで使用されるMIME仕様の独自の判断を下します。 https://www.iana.org/assignments/cont-disp/cont-disp.xhtml パラメータ string $newname: 電子メールで使用するカスタムファイル名 パラメータ string $mime: MIMEタイプを使用する (バッファリングされたデータに利用) 返り値: CI_Email インスタンス (メソッドチェイン) 返り値型: CI_Email 添付ファイルを送信できます。第1引数にファイルのパスとファイル名を指定してください。 複数ファイルを添付する場合は、複数回メソッドを呼んでください。例えば以下のように します:
$this->email->attach('/path/to/photo1.jpg'); $this->email->attach('/path/to/photo2.jpg'); $this->email->attach('/path/to/photo3.jpg');
デフォルトの設定(添付ファイル)を使用します。それ以外の場合はカスタム配置を使用し、 二番目のパラメータを空白のままにします:
$this->email->attach('image.jpg', 'inline');
また、URLを使用することができます:
$this->email->attach('http://example.com/filename.pdf');
カスタムファイル名を使用したい場合は、第三のパラメータを使用することができます:
$this->email->attach('filename.pdf', 'attachment', 'report.pdf');
本当の物理的なファイルの代わりに、バッファ文字列を使用する必要がある場合、 バッファとしての最初のパラメータ、ファイル名としての第3のパラメータとMIME タイプとしての第4のパラメータを使うことができます:
$this->email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
-
attachment_cid
($filename)¶ パラメータ string $filename: 既存の添付ファイル名 返り値: 添付ファイルのContent-ID、見つからない場合はFALSE 返り値型: string 添付ファイルのセットとContent-IDを返し、添付ファイルをHTMLにインライン(写真)埋め込むため有効にします。 最初のパラメータは、すでに添付されたファイル名でなければなりません。
$filename = '/img/photo1.jpg'; $this->email->attach($filename); foreach ($list as $address) { $this->email->to($address); $cid = $this->email->attachment_cid($filename); $this->email->message('<img src='cid:". $cid ."' alt="photo1" />'); $this->email->send(); }
Note
一意にするため、それぞれ電子メール用のContent-IDは、再作成する必要があります。
-
print_debugger
([$include = array('headers', 'subject', 'body')])¶ パラメータ array $include: メッセージのどの部分を印刷するか 返り値: フォーマットされたデバッグデータ 返り値型: string すべてのサーバメッセージ、メールヘッダ、メールメッセージを文字列として返します。 デバッグに役立ちます。
オプションで、メッセージの一部を印刷するかを指定することができます。 有効なオプションは以下のとおりです。「ヘッダ」「件名」「本文」
例:
// クリアされないように電子メールデータのための順序で送信しているときには、 // FALSEを渡す必要があります。その場合、print_debugger()の出力には何も // ないでしょう。 $this->email->send(FALSE); // 唯一のメッセージの件名と本文を除く、電子メールのヘッダを出力します $this->email->print_debugger(array('headers'));
Note
デフォルトでは、すべての生データが印刷されます。
-