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への接続では、クリアテキスト接続が可能になり、後でSTARTTLSSMTPコマンドを使用してチャネルが暗号化を使用するようにアップグレードされます。

ポート465での接続のアップグレードは、サーバーでサポートされている場合もサポートされていない場合もあるため、サーバーが許可しない場合、STARTTLSSMTPコマンドが失敗する可能性があります。ポートを465に設定する場合は、SMTPCryptoを空の文字列('')に設定してみてください。通信は最初からTLSを使用して保護されており、STARTTLSは不要なためです。

設定でポート587に接続する必要がある場合は、SMTPサーバーと通信してクリアテキストから暗号化されたチャネルに切り替える際に、STARTTLSコマンドを実装するため、SMTPCryptotlsに設定する必要があります。最初の通信はクリアテキストで行われ、STARTTLSコマンドを使用してチャネルがTLSにアップグレードされます。

設定の確認

最後に成功した送信に使用された設定は、インスタンスプロパティ$archiveから利用できます。これは、send()呼び出し時の実際の値を判断するためのテストとデバッグに役立ちます。

メール設定

以下は、メールを送信する際に設定できるすべての設定のリストです。

設定

デフォルト値

オプション

説明

userAgent

CodeIgniter

なし

「ユーザーエージェント」。

protocol

mail

mailsendmail、またはsmtp

メール送信プロトコル。

mailPath

/usr/sbin/sendmail

なし

Sendmailへのサーバーパス。

SMTPHost

デフォルトなし

なし

SMTPサーバーのホスト名。

SMTPUser

デフォルトなし

なし

SMTPのユーザー名。

SMTPPass

デフォルトなし

なし

SMTPのパスワード。

SMTPPort

25

なし

SMTPポート。(465に設定した場合、SMTPCryptoの設定に関係なく、接続にTLSが使用されます。)

SMTPTimeout

5

なし

SMTPタイムアウト(秒単位)。

SMTPKeepAlive

false

true/false (ブール値)

永続的なSMTP接続を有効にします。

SMTPCrypto

tls

tlsssl、または空の文字列(''

SMTP暗号化。これをsslに設定すると、SSLを使用してサーバーへの安全なチャネルが作成され、tlsに設定すると、サーバーにSTARTTLSコマンドが発行されます。ポート465での接続では、これを空の文字列('')に設定する必要があります。 SMTPプロトコルでのSSLとTLSも参照してください。

wordWrap

true

true/false (ブール値)

ワードラップを有効にします。

wrapChars

76

折り返す文字数。

mailType

text

textまたはhtml

メールの種類。HTMLメールを送信する場合は、完全なWebページとして送信する必要があります。相対リンクや相対画像パスがないことを確認してください。そうしないと機能しません。

charset

utf-8

文字セット(utf-8iso-8859-1など)。

validate

true

true/false (ブール値)

メールアドレスを検証するかどうか。

priority

3

1, 2, 3, 4, 5

メールの優先度。1 = 最高。 5 = 最低。 3 = 通常。

CRLF

\n

\r\n または \n または \r

改行文字。(RFC 822 に準拠するには \r\n を使用してください)。

改行

\n

\r\n または \n または \r

改行文字。(RFC 822 に準拠するには \r\n を使用してください)。

BCCBatchMode

false

true/false (ブール値)

BCC バッチモードを有効にします。

BCCBatchSize

200

なし

各BCCバッチのメール数。

DSN

false

true/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 インスタンス(メソッドチェーン)

戻り値の型:

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 インスタンス(メソッドチェーン)

戻り値の型:

CodeIgniter\Email\Email

返信先アドレスを設定します。情報が提供されていない場合、setFrom メソッドの情報が使用されます。例

<?php

$email->setReplyTo('[email protected]', 'Your Name');
setTo($to)
パラメータ:
  • $to (mixed) – カンマ区切り文字列またはメールアドレスの配列

戻り値:

CodeIgniter\Email\Email インスタンス(メソッドチェーン)

戻り値の型:

CodeIgniter\Email\Email

受信者のメールアドレスを設定します。単一のメール、カンマ区切りリスト、または配列を使用できます

<?php

$email->setTo('[email protected]');
setCC($cc)
パラメータ:
  • $cc (mixed) – カンマ区切り文字列またはメールアドレスの配列

戻り値:

CodeIgniter\Email\Email インスタンス(メソッドチェーン)

戻り値の型:

CodeIgniter\Email\Email

CCメールアドレスを設定します。「to」と同様に、単一のメール、カンマ区切りリスト、または配列を使用できます。

setBCC($bcc[, $limit = ''])
パラメータ:
  • $bcc (mixed) – カンマ区切り文字列またはメールアドレスの配列

  • $limit (int) – バッチごとに送信するメールの最大数

戻り値:

CodeIgniter\Email\Email インスタンス(メソッドチェーン)

戻り値の型:

CodeIgniter\Email\Email

BCCメールアドレスを設定します。setTo() メソッドと同様に、単一のメール、カンマ区切りリスト、または配列を使用できます。

$limit が設定されている場合、「バッチモード」が有効になり、指定された $limit を超えない各バッチにメールが送信されます。

setSubject($subject)
パラメータ:
  • $subject (string) – メール件名

戻り値:

CodeIgniter\Email\Email インスタンス(メソッドチェーン)

戻り値の型:

CodeIgniter\Email\Email

メールの件名を設定します

<?php

$email->setSubject('This is my subject');
setMessage($body)
パラメータ:
  • $body (string) – メール本文

戻り値:

CodeIgniter\Email\Email インスタンス(メソッドチェーン)

戻り値の型:

CodeIgniter\Email\Email

メールの本文を設定します

<?php

$email->setMessage('This is my message');
setAltMessage($str)
パラメータ:
  • $str (string) – 代替メール本文

戻り値:

CodeIgniter\Email\Email インスタンス(メソッドチェーン)

戻り値の型:

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 インスタンス(メソッドチェーン)

戻り値の型:

CodeIgniter\Email\Email

メールに追加のヘッダーを追加します

<?php

$email->setHeader('Header1', 'Value1');
$email->setHeader('Header2', 'Value2');
clear($clearAttachments = false)
パラメータ:
  • $clearAttachments (bool) – 添付ファイルをクリアするかどうか

戻り値:

CodeIgniter\Email\Email インスタンス(メソッドチェーン)

戻り値の型:

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 インスタンス(メソッドチェーン)

戻り値の型:

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

サーバーメッセージ、電子メールヘッダー、電子メールメッセージを含む文字列を返します。デバッグに便利です。

オプションで、メッセージのどの部分を出力するかを指定できます。有効なオプションは、headerssubjectbodyです。

<?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']);

デフォルトでは、すべての生のデータが出力されます。