CodeIgniter4 Email 類

2020-08-17 16:53 更新

CodeIgniter強(qiáng)大的電子郵件類支持以下功能:

  • 多種協(xié)議:郵件,Sendmail和SMTP
  • SMTP的TLS和SSL加密
  • 多個(gè)收件人
  • 抄送和密件抄送
  • HTML或純文本電子郵件
  • 附件
  • 自動換行
  • 優(yōu)先事項(xiàng)
  • 密件抄送批處理模式,可將大型電子郵件列表拆分為較小的密件抄送批處理。
  • 電子郵件調(diào)試工具

使用電子郵件庫

發(fā)送郵件

發(fā)送電子郵件不僅簡單,而且您可以隨時(shí)對其進(jìn)行配置,也可以在app / Config / Email.php文件中設(shè)置您的首選項(xiàng)。

這是一個(gè)基本示例,演示如何發(fā)送電子郵件:

$email = \Config\Services::email();


$email->setFrom('your@example.com', 'Your Name');
$email->setTo('someone@example.com');
$email->setCC('another@another-example.com');
$email->setBCC('them@their-example.com');


$email->setSubject('Email Test');
$email->setMessage('Testing the email class.');


$email->send();

設(shè)置電子郵件首選項(xiàng)

有21種不同的首選項(xiàng)可用于調(diào)整電子郵件的發(fā)送方式。您可以按照此處所述手動設(shè)置它們,也可以通過存儲在配置文件中的偏好設(shè)置自動設(shè)置它們,如下所述:

通過將一組首選項(xiàng)值傳遞給電子郵件初始化方法來設(shè)置首選項(xiàng)。這是您如何設(shè)置某些首選項(xiàng)的示例:

$config['protocol'] = 'sendmail';
$config['mailPath'] = '/usr/sbin/sendmail';
$config['charset']  = 'iso-8859-1';
$config['wordWrap'] = true;


$email->initialize($config);

注解

大多數(shù)首選項(xiàng)都具有默認(rèn)值,如果您未設(shè)置它們,則將使用它們。

在配置文件中設(shè)置電子郵件首選項(xiàng)

如果您不想使用上述方法來設(shè)置首選項(xiàng),則可以將其放入配置文件中。只需打開 app / Config / Email.php文件,然后在“電子郵件”屬性中設(shè)置您的配置。然后保存文件,它將自動使用。$email->initialize()如果您在配置文件中設(shè)置了首選項(xiàng),則無需使用該方法。

電子郵件首選項(xiàng)

以下是發(fā)送電子郵件時(shí)可以設(shè)置的所有首選項(xiàng)的列表。

偏愛 默認(rèn)值 選項(xiàng) 描述
userAgent CodeIgniter None “用戶代理”。
protocol mail mail, sendmail, or smtp 郵件發(fā)送協(xié)議。
mailpath /usr/sbin/sendmail None Sendmail的服務(wù)器路徑。
SMTPHost No Default None SMTP服務(wù)器地址。
SMTPUser No Default None SMTP用戶名。
SMTPPass No Default None SMTP密碼。
SMTPPort 25 None SMTP端口。
SMTPTimeout 5 None SMTP超時(shí)(以秒為單位)。
SMTPKeepAlive FALSE TRUE or FALSE (boolean) 啟用持久的SMTP連接。
SMTPCrypto No Default tls or ssl SMTP加密
wordWrap TRUE TRUE or FALSE (boolean) 啟用自動換行。
wrapChars 76 要包裝的字符數(shù)。
mailType text text or html 郵件類型。如果您發(fā)送HTML電子郵件,則必須將其作為完整的網(wǎng)頁發(fā)送。確保您沒有任何相對鏈接或相對圖像路徑,否則它們將不起作用。
charset utf-8 字符集(utf-8,iso-8859-1等)。
validate TRUE TRUE or FALSE (boolean) 是否驗(yàn)證電子郵件地址。
priority 3 1, 2, 3, 4, 5 電子郵件優(yōu)先級。1 =最高。5 =最低。3 =正常。
CRLF \n “\r\n” or “\n” or “\r” 換行符。(使用“ \ r \ n”符合RFC 822)。
newline \n “\r\n” or “\n” or “\r” 換行符。(使用“ \ r \ n”符合RFC 822)。).
BCCBatchMode FALSE TRUE or FALSE (boolean) 啟用密件抄送批處理模式。
BCCBatchSize 200 None 每個(gè)密件抄送批次中的電子郵件數(shù)量。
DSN FALSE TRUE or FALSE (boolean) 啟用來自服務(wù)器的通知消息

覆蓋單詞包裝

如果您啟用了自動換行(建議遵循RFC 822),并且電子郵件中的鏈接很長,則該鏈接也可能被自動換行,從而導(dǎo)致收信人無法點(diǎn)擊它。使用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}

類參考

CodeIgniter\Email\Email

setFrom$ from[, $name = ''[$ returnPath = null]])

參數(shù): $from (string) – “From” e-mail address
$name (string) – “From” display name
$returnPath (string) – Optional email address to redirect undelivered e-mail to
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置電子郵件地址和發(fā)送電子郵件的人的姓名:

$email->setFrom('you@example.com', 'Your Name');

您還可以設(shè)置返回路徑,以幫助重定向未送達(dá)的郵件:

$email->setFrom('you@example.com', 'Your Name', 'returned_emails@example.com');

注解

如果您已將“ smtp”配置為協(xié)議,則無法使用Return-Path。

setReplyTo($replyto[, $name = ''])

參數(shù): $replyto (string) – E-mail address for replies
$name (string) – Display name for the reply-to e-mail address
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置回復(fù)地址。 如果未提供信息,則使用setFrom方法中的信息。 例:

$email->setReplyTo('you@example.com', 'Your Name');

setTo($to)

參數(shù): $to (mixed) – Comma-delimited string or an array of e-mail addresses
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置收件人的電子郵件地址。 可以是一封電子郵件,逗號分隔的列表或數(shù)組:

$email->setTo('someone@example.com');
$email->setTo('one@example.com, two@example.com, three@example.com');
$email->setTo(['one@example.com', 'two@example.com', 'three@example.com']);

setCC($cc)

參數(shù): $cc (mixed) – Comma-delimited string or an array of e-mail addresses
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置抄送電子郵件地址。 就像“收件人”一樣,它可以是一封電子郵件,逗號分隔的列表或數(shù)組。

setBCC($bcc[, $limit = ''])

參數(shù): $bcc (mixed) – Comma-delimited string or an array of e-mail addresses
$limit (int) – Maximum number of e-mails to send per batch
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置密件抄送電子郵件地址。 就像setTo()方法一樣,它可以是一封電子郵件,一個(gè)逗號分隔的列表或一個(gè)數(shù)組。

如果設(shè)置了$limit,將啟用“批處理模式”,它將以批次發(fā)送電子郵件,每個(gè)批次不超過指定的$limit

setSubject($subject)

參數(shù): $subject (string) – E-mail subject line
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置電子郵件主題:

$email->setSubject('This is my subject');

setMessage($body)

參數(shù): $body (string) – E-mail message body
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置電子郵件正文:

$email->setMessage('This is my message');

setAltMessage($str)

參數(shù): $str (string) – Alternative e-mail message body
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

設(shè)置備用電子郵件正文:

$email->setAltMessage('This is the alternative message');

這是一個(gè)可選的消息字符串,如果您發(fā)送HTML格式的電子郵件,則可以使用該字符串。 它使您可以指定不帶HTML格式的替代消息,該消息將添加到不接受HTML電子郵件的人的標(biāo)題字符串中。 如果您未設(shè)置自己的消息,CodeIgniter將從HTML電子郵件中提取消息并剝離標(biāo)簽。

setHeader($header, $value)

參數(shù): $header (string) – Header name
$value (string) – Header value
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

將其他標(biāo)題附加到電子郵件:

$email->setHeader('Header1', 'Value1');
$email->setHeader('Header2', 'Value2');

clear($clearAttachments = false)

參數(shù): $clearAttachments (bool) – Whether or not to clear attachments
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

將所有電子郵件變量初始化為空狀態(tài)。 如果您循環(huán)運(yùn)行電子郵件發(fā)送方法,則允許使用此方法,以便在兩次循環(huán)之間重置數(shù)據(jù)。

foreach ($list as $name => $address)
{
        $email->clear();


        $email->setTo($address);
        $email->setFrom('your@example.com');
        $email->setSubject('Here is your info '.$name);
        $email->setMessage('Hi ' . $name . ' Here is the info you requested.');
        $email->send();
}

如果將參數(shù)設(shè)置為TRUE,則所有附件也會被清除:

$email->clear(true);

send($autoClear = true)

參數(shù): $autoClear (bool) – Whether to clear message data automatically
返回: TRUE on success, FALSE on failure
返回類型: bool

電子郵件發(fā)送方法。 根據(jù)成功或失敗返回布爾值TRUE或FALSE,使其可以有條件地使用:

if (! $email->send())
{
        // Generate error
}

如果請求成功,此方法將自動清除所有參數(shù)。 要停止此行為,請通過FALSE:

if ($email->send(false))
{
        // Parameters won't be cleared
}

注解

為了使用printDebugger()方法,您需要避免清除電子郵件參數(shù)。

如果啟用了BCCBatchMode,并且接收者超過BCCBatchSize,則此方法將始終返回布爾值TRUE。

attach($filename[, $disposition = ''[, $newname = null[, $mime = '']]])

參數(shù): $filename (string) – File name
$disposition (string) – ‘disposition’ of the attachment. Most email clients make their own decision regardless of the MIME specification used here. https://www.iana.org/assignments/cont-disp/cont-disp.xhtml
$newname (string) – Custom file name to use in the e-mail
$mime (string) – MIME type to use (useful for buffered data)
返回: CodeIgniter\Email\Email instance (method chaining)
返回類型: CodeIgniter\Email\Email

使您可以發(fā)送附件。 將文件路徑/名稱放在第一個(gè)參數(shù)中。 對于多個(gè)附件,請多次使用該方法。 例如:

$email->attach('/path/to/photo1.jpg');
$email->attach('/path/to/photo2.jpg');
$email->attach('/path/to/photo3.jpg');

要使用默認(rèn)處置方式(附件),請將第二個(gè)參數(shù)留空,否則請使用自定義處置方式:

$email->attach('image.jpg', 'inline');

您也可以使用以下網(wǎng)址:

$email->attach('http://example.com/filename.pdf');

如果您想使用自定義文件名,則可以使用第三個(gè)參數(shù):

$email->attach('filename.pdf', 'attachment', 'report.pdf');

如果需要使用緩沖字符串而不是實(shí)際文件,則可以將第一個(gè)參數(shù)用作緩沖區(qū),將第三個(gè)參數(shù)用作文件名,將第四個(gè)參數(shù)用作mime-type:

$email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');

setAttachmentCID($filename)

參數(shù): $filename (string) – Existing attachment filename
返回: Attachment Content-ID or FALSE if not found
返回類型: string

設(shè)置并返回附件的Content-ID,使您可以將內(nèi)嵌(圖片)附件嵌入HTML。 第一個(gè)參數(shù)必須是已經(jīng)附加的文件名。

$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();
}

注解

必須重新創(chuàng)建每個(gè)電子郵件的Content-ID,以使其唯一。

printDebugger($include = ['headers', 'subject', 'body'])

參數(shù): $include (array) – Which parts of the message to print out
返回: Formatted debug data
返回類型: string

返回一個(gè)包含任何服務(wù)器消息,電子郵件標(biāo)題和電子郵件消息的字符串。 對調(diào)試有用。

您可以選擇指定應(yīng)打印消息的哪些部分。 有效選項(xiàng)包括:headers, subject, body。

例如:

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

注解

默認(rèn)情況下,將打印所有原始數(shù)據(jù)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號