Emailクラス
CodeIgniterの堅牢なEmailクラスは、以下の機能をサポートしています。
複数のプロトコル: Mail、Sendmail、およびSMTP
SMTP用のTLSおよびSSL暗号化
複数の受信者
CCおよびBCC
HTMLまたはプレーンテキストメール
添付ファイル
ワードラッピング
優先度
BCCバッチモード。これにより、大規模なメールリストを小さなBCCバッチに分割できます。
メールデバッグツール
Emailライブラリの使用
メールの送信
メールの送信は簡単なだけでなく、オンザフライで設定したり、app/Config/Email.phpファイルで設定を保存したりできます。
以下はメール送信の基本的な例です。
<?php
$email = \Config\Services::email();
$email->setFrom('[email protected]', 'Your Name');
$email->setTo('[email protected]');
$email->setCC('[email protected]');
$email->setBCC('[email protected]');
$email->setSubject('Email Test');
$email->setMessage('Testing the email class.');
$email->send();
メール設定
メールメッセージの送信方法を調整するために利用できる設定は21種類あります。ここに記載されているように手動で設定するか、メール設定で説明されているように、設定ファイルに保存されている設定を使用して自動的に設定できます。
配列を渡してメール設定を行う
設定は、設定値の配列をemail initializeメソッドに渡すことで行います。以下にいくつかの設定を行う方法の例を示します。
<?php
$config['protocol'] = 'sendmail';
$config['mailPath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordWrap'] = true;
$email->initialize($config);
注
ほとんどの設定には、設定しない場合にデフォルトで使用されるデフォルト値があります。
設定ファイルでメール設定を行う
上記の方法で設定を行うことを希望しない場合は、代わりに設定ファイルに入れることができます。app/Config/Email.phpファイルを開き、Emailプロパティで設定を設定するだけです。次にファイルを保存すると、自動的に使用されます。設定ファイルで設定を行う場合は、$email->initialize()
メソッドを使用する必要はありません。
SMTPプロトコルでのSSLとTLS
SMTPサーバーとの通信中にユーザー名、パスワード、メールコンテンツを保護するには、チャネルの暗号化を使用する必要があります。2つの異なる規格が広く展開されており、メール送信の問題をトラブルシューティングする際には、違いを理解することが重要です。
ほとんどのSMTPサーバーでは、メールを送信する際にポート465または587での接続が許可されています。(元のポート25は、多くのISPがブロックルールを設けており、通信が完全にクリアテキストであるため、ほとんど使用されていません)。
重要な違いは、ポート465では、RFC 8314に従って、TLSを使用して通信チャネルが最初から保護されることが期待されていることです。ポート587への接続では、クリアテキスト接続が可能になり、後でSTARTTLS
SMTPコマンドを使用してチャネルが暗号化を使用するようにアップグレードされます。
ポート465での接続のアップグレードは、サーバーでサポートされている場合もサポートされていない場合もあるため、サーバーが許可しない場合、STARTTLS
SMTPコマンドが失敗する可能性があります。ポートを465に設定する場合は、SMTPCrypto
を空の文字列(''
)に設定してみてください。通信は最初からTLSを使用して保護されており、STARTTLS
は不要なためです。
設定でポート587に接続する必要がある場合は、SMTPサーバーと通信してクリアテキストから暗号化されたチャネルに切り替える際に、STARTTLS
コマンドを実装するため、SMTPCrypto
をtls
に設定する必要があります。最初の通信はクリアテキストで行われ、STARTTLS
コマンドを使用してチャネルがTLSにアップグレードされます。
設定の確認
最後に成功した送信に使用された設定は、インスタンスプロパティ$archive
から利用できます。これは、send()
呼び出し時の実際の値を判断するためのテストとデバッグに役立ちます。
メール設定
以下は、メールを送信する際に設定できるすべての設定のリストです。
設定 |
デフォルト値 |
オプション |
説明 |
---|---|---|---|
userAgent |
CodeIgniter |
なし |
「ユーザーエージェント」。 |
protocol |
|
メール送信プロトコル。 |
|
mailPath |
/usr/sbin/sendmail |
なし |
Sendmailへのサーバーパス。 |
SMTPHost |
デフォルトなし |
なし |
SMTPサーバーのホスト名。 |
SMTPUser |
デフォルトなし |
なし |
SMTPのユーザー名。 |
SMTPPass |
デフォルトなし |
なし |
SMTPのパスワード。 |
SMTPPort |
25 |
なし |
SMTPポート。( |
SMTPTimeout |
5 |
なし |
SMTPタイムアウト(秒単位)。 |
SMTPKeepAlive |
false |
|
永続的なSMTP接続を有効にします。 |
SMTPCrypto |
tls |
|
SMTP暗号化。これを |
wordWrap |
true |
|
ワードラップを有効にします。 |
wrapChars |
76 |
折り返す文字数。 |
|
mailType |
text |
|
メールの種類。HTMLメールを送信する場合は、完全なWebページとして送信する必要があります。相対リンクや相対画像パスがないことを確認してください。そうしないと機能しません。 |
charset |
utf-8 |
文字セット( |
|
validate |
true |
|
メールアドレスを検証するかどうか。 |
priority |
3 |
1, 2, 3, 4, 5 |
メールの優先度。 |
CRLF |
\n |
|
改行文字。(RFC 822 に準拠するには |
改行 |
\n |
|
改行文字。(RFC 822 に準拠するには |
BCCBatchMode |
false |
|
BCC バッチモードを有効にします。 |
BCCBatchSize |
200 |
なし |
各BCCバッチのメール数。 |
DSN |
false |
|
サーバーからの通知メッセージを有効にします。 |
ワードラッピングのオーバーライド
ワードラッピングが有効になっている場合(RFC 822 に準拠するために推奨)、メールに非常に長いリンクが含まれていると、リンクもラッピングされ、受信者がクリックできなくなる可能性があります。CodeIgniter では、メッセージの一部内でワードラッピングを手動でオーバーライドできます。方法は次のとおりです。
The text of your email that
gets wrapped normally.
{unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}
More text that will be
wrapped normally.
ワードラッピングしたくないアイテムを次の間で囲みます: {unwrap} {/unwrap}
クラスリファレンス
- class CodeIgniter\Email\Email
- setFrom($from[, $name = ''[, $returnPath = null]])
- パラメータ:
$from (
string
) – 「From」メールアドレス$name (
string
) – 「From」表示名$returnPath (
string
) – 未達メールをリダイレクトするオプションのメールアドレス
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
メールを送信する人のメールアドレスと名前を設定します
<?php $email->setFrom('[email protected]', 'Your Name');
未達メールのリダイレクトに役立つように Return-Path を設定することもできます
<?php $email->setFrom('[email protected]', 'Your Name', '[email protected]');
注
プロトコルとして ‘smtp’ を構成している場合、Return-Path は使用できません。
- setReplyTo($replyto[, $name = ''])
- パラメータ:
$replyto (
string
) – 返信用のメールアドレス$name (
string
) – 返信先メールアドレスの表示名
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
返信先アドレスを設定します。情報が提供されていない場合、setFrom メソッドの情報が使用されます。例
<?php $email->setReplyTo('[email protected]', 'Your Name');
- setTo($to)
- パラメータ:
$to (
mixed
) – カンマ区切り文字列またはメールアドレスの配列
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
受信者のメールアドレスを設定します。単一のメール、カンマ区切りリスト、または配列を使用できます
<?php $email->setTo('[email protected]');
<?php $email->setTo('[email protected], [email protected], [email protected]');
<?php $email->setTo(['[email protected]', '[email protected]', '[email protected]']);
- setCC($cc)
- パラメータ:
$cc (
mixed
) – カンマ区切り文字列またはメールアドレスの配列
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
CCメールアドレスを設定します。「to」と同様に、単一のメール、カンマ区切りリスト、または配列を使用できます。
- setBCC($bcc[, $limit = ''])
- パラメータ:
$bcc (
mixed
) – カンマ区切り文字列またはメールアドレスの配列$limit (
int
) – バッチごとに送信するメールの最大数
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
BCCメールアドレスを設定します。
setTo()
メソッドと同様に、単一のメール、カンマ区切りリスト、または配列を使用できます。$limit
が設定されている場合、「バッチモード」が有効になり、指定された$limit
を超えない各バッチにメールが送信されます。
- setSubject($subject)
- パラメータ:
$subject (
string
) – メール件名
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
メールの件名を設定します
<?php $email->setSubject('This is my subject');
- setMessage($body)
- パラメータ:
$body (
string
) – メール本文
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
メールの本文を設定します
<?php $email->setMessage('This is my message');
- setAltMessage($str)
- パラメータ:
$str (
string
) – 代替メール本文
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
代替メール本文を設定します
<?php $email->setAltMessage('This is the alternative message');
これは、HTML形式のメールを送信する場合に使用できるオプションのメッセージ文字列です。HTMLメールを受け付けない人のために、HTML形式を含まない代替メッセージを指定できます。独自のメッセージを設定しない場合、CodeIgniter は HTML メールからメッセージを抽出し、タグを削除します。
- setHeader($header, $value)
- パラメータ:
$header (
string
) – ヘッダー名$value (
string
) – ヘッダー値
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
メールに追加のヘッダーを追加します
<?php $email->setHeader('Header1', 'Value1'); $email->setHeader('Header2', 'Value2');
- clear($clearAttachments = false)
- パラメータ:
$clearAttachments (
bool
) – 添付ファイルをクリアするかどうか
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
すべてのメール変数を空の状態に初期化します。このメソッドは、メール送信メソッドをループで実行し、サイクル間でデータをリセットできるようにするために使用されます。
<?php foreach ($list as $name => $address) { $email->clear(); $email->setTo($address); $email->setFrom('[email protected]'); $email->setSubject('Here is your info ' . $name); $email->setMessage('Hi ' . $name . ' Here is the info you requested.'); $email->send(); }
パラメータを true に設定すると、添付ファイルもクリアされます
<?php $email->clear(true);
- send($autoClear = true)
- パラメータ:
$autoClear (
bool
) – メッセージデータを自動的にクリアするかどうか
- 戻り値:
成功した場合は true、失敗した場合は false
- 戻り値の型:
bool
メール送信メソッド。成功または失敗に基づいてブール値 true または false を返し、条件付きで使用できるようにします
<?php if (! $email->send()) { // Generate error }
このメソッドは、リクエストが成功した場合、すべてのパラメータを自動的にクリアします。この動作を停止するには false を渡します
<?php if ($email->send(false)) { // Parameters won't be cleared }
注
printDebugger()
メソッドを使用するには、メールパラメータのクリアを避ける必要があります。注
BCCBatchMode
が有効になっていて、BCCBatchSize
を超える受信者がいる場合、このメソッドは常にブール値true
を返します。
- attach($filename[, $disposition = ''[, $newname = null[, $mime = '']]])
- パラメータ:
$filename (
string
) – ファイル名$disposition (
string
) – 添付ファイルの「disposition」。ほとんどのメールクライアントは、ここで使用される MIME 仕様に関係なく、独自の決定を下します。https://www.iana.org/assignments/cont-disp/cont-disp.xhtml$newname (
string
) – メールで使用するカスタムファイル名$mime (
string
) – 使用するMIMEタイプ(バッファリングされたデータに便利)
- 戻り値:
CodeIgniter\Email\Email インスタンス(メソッドチェーン)
- 戻り値の型:
添付ファイルを送信できるようにします。最初のパラメータにファイルパス/名前を指定します。複数の添付ファイルを使用する場合は、このメソッドを複数回使用します。例:
<?php $email->attach('/path/to/photo1.jpg'); $email->attach('/path/to/photo2.jpg'); $email->attach('/path/to/photo3.jpg');
デフォルトの配置(添付ファイル)を使用する場合は、2番目のパラメータを空白のままにします。それ以外の場合は、カスタム配置を使用します。
<?php $email->attach('image.jpg', 'inline');
URLも使用できます。
<?php $email->attach('http://example.com/filename.pdf');
カスタムファイル名を使用したい場合は、3番目のパラメータを使用できます。
<?php $email->attach('filename.pdf', 'attachment', 'report.pdf');
実際の物理ファイルではなく、バッファ文字列を使用する必要がある場合は、最初のパラメータをバッファとして、3番目のパラメータをファイル名として、4番目のパラメータをMIMEタイプとして使用できます。
<?php $email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
- setAttachmentCID($filename)
- パラメータ:
$filename (
string
) – 既存の添付ファイル名
- 戻り値:
添付ファイルのContent-ID、または見つからない場合はfalse
- 戻り値の型:
string
添付ファイルのContent-IDを設定して返します。これにより、インライン(画像)添付ファイルをHTMLに埋め込むことができます。最初のパラメータは、既に添付されているファイル名である必要があります。
<?php $filename = '/img/photo1.jpg'; $email->attach($filename); foreach ($list as $address) { $email->setTo($address); $cid = $email->setAttachmentCID($filename); $email->setMessage('<img src="cid:' . $cid . '" alt="photo1">'); $email->send(); }
注
各電子メールのContent-IDは、一意であるために再作成する必要があります。
- printDebugger($include = ['headers', 'subject', 'body'])
- パラメータ:
$include (
array
) – 出力するメッセージの部分
- 戻り値:
フォーマットされたデバッグデータ
- 戻り値の型:
string
サーバーメッセージ、電子メールヘッダー、電子メールメッセージを含む文字列を返します。デバッグに便利です。
オプションで、メッセージのどの部分を出力するかを指定できます。有効なオプションは、headers、subject、bodyです。
例
<?php // You need to pass false while sending in order for the email data // to not be cleared - if that happens, printDebugger() would have // nothing to output. $email->send(false); // Will only print the email headers, excluding the message subject and body $email->printDebugger(['headers']);
注
デフォルトでは、すべての生のデータが出力されます。