Класс Email
Устойчивый класс Email CodeIgniter поддерживает следующие возможности:
- Несколько протоколов: Mail, Sendmail и SMTP
- Шифрование TLS и SSL для SMTP
- Несколько получателей
- CC и BCC
- Электронная почта в формате HTML или Plaintext
- Вложения
- Обёртывание слов
- Приоритеты
- Режим пакетной рассылки BCC, позволяющий разбивать большие списки рассылки на небольшие пакеты BCC.
- Инструменты отладки электронной почты
Использование библиотеки Email
Отправка электронной почты
Отправка электронной почты не только проста, но и позволяет настроить её на лету или задать параметры в файле конфигурации.
Ниже представлен базовый пример отправки электронной почты. Примечание: Этот пример предполагает, что вы отправляете электронное письмо из одного из ваших контроллеров.
$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();
Настройка параметров электронной почты
Доступно 21 параметр для настройки отправки электронных сообщений. Вы можете настроить их вручную, как описано здесь, или автоматически через параметры, хранящиеся в файле конфигурации, как описано ниже:
Настройка параметров осуществляется путём передачи массива значений параметров в метод инициализации email. Вот пример настройки некоторых параметров:
$config['protocol'] = 'sendmail'; $config['mailpath'] = '/usr/sbin/sendmail'; $config['charset'] = 'iso-8859-1'; $config['wordwrap'] = TRUE; $this->email->initialize($config);
Примечание
Большинство параметров имеют значения по умолчанию, которые будут использоваться, если вы их не зададите.
Настройка параметров электронной почты в файле конфигурации
Если вы предпочитаете не настраивать параметры указанным выше методом, вы можете вместо этого поместить их в файл конфигурации. Просто создайте новый файл с именем email.php, добавьте массив $config в этот файл. Затем сохраните файл в config/email.php, и он будет использоваться автоматически. Вам НЕ нужно будет использовать метод $this->email->initialize() если вы сохраните свои параметры в файле конфигурации.
Параметры электронной почты
Ниже приведен список всех параметров, которые можно настроить при отправке электронной почты.
| Параметр | Значение по умолчанию | Варианты | Описание |
|---|---|---|---|
| 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 (булево) | Включить постоянные подключения SMTP. |
| smtp_crypto | Нет значения по умолчанию | tls или ssl | Шифрование SMTP |
| wordwrap | TRUE | TRUE или FALSE (булево) | Включить обёртывание слов. |
| wrapchars | 76 | Количество символов для обёртывания. | |
| mailtype | text | text или html | Тип почты. Если вы отправляете HTML-почту, вы должны отправить её как полную веб-страницу. Убедитесь, что у вас нет относительных ссылок или относительных путей к изображениям, иначе они не будут работать. |
| charset | utf-8 | Набор символов (utf-8, iso-8859-1 и т. д.). | |
| validate | FALSE | TRUE или FALSE (булево) | Требовать валидацию адреса электронной почты. |
| priority | 3 | 1, 2, 3, 4, 5 | Приоритет электронной почты. 1 = самый высокий. 5 = самый низкий. 3 = нормальный. |
| crlf | \n | “\r\n” или “\n” или “\r” | Символ новой строки. (Используйте «\r\n» для соответствия RFC 822). |
| newline | \n | “\r\n” или “\n” или “\r” | Символ новой строки. (Используйте «\r\n» для соответствия RFC 822). |
| bcc_batch_mode | FALSE | TRUE или FALSE (булево) | Включить режим пакетной рассылки BCC. |
| bcc_batch_size | 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 CI_Email -
-
from($from[, $name = ''[, $return_path = NULL]]) -
Параметры: - $from (string) – Адрес электронной почты «От»
- $name (string) – Имя для отображения адреса «От»
- $return_path (string) – (необязательно) адрес электронной почты для перенаправления не доставленных писем
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Устанавливает адрес электронной почты и имя отправителя письма:
$this->email->from('you@example.com', 'Your Name');Вы также можете установить значение Return-Path для перенаправления не доставленных писем:
$this->email->from('you@example.com', 'Your Name', 'returned_emails@example.com');Примечание
Return-Path нельзя использовать, если протокол установлен на «smtp».
-
reply_to($replyto[, $name = '']) -
Параметры: - $replyto (string) – Адрес электронной почты для ответов
- $name (string) – Имя для отображения адреса reply-to
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Устанавливает адрес для ответов. Если информация не предоставлена, используется информация из метода :meth:from. Пример:
$this->email->reply_to('you@example.com', 'Your Name');
-
to($to) -
Параметры: - $to (mixed) – Строка адресов электронной почты, разделённая запятыми, или массив адресов
Возвращаемое значение: Экземпляр 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) -
Параметры: - $cc (mixed) – Строка адресов электронной почты, разделённая запятыми, или массив адресов
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Устанавливает адреса CC. Аналогично методу «to», может быть один адрес, список, разделённый запятыми, или массив.
-
bcc($bcc[, $limit = '']) -
Параметры: - $bcc (mixed) – Строка адресов электронной почты, разделённая запятыми, или массив адресов
- $limit (int) – Максимальное количество писем в одной отправке
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Устанавливает адреса BCC. Аналогично методу
to(), может быть один адрес, список, разделённый запятыми, или массив.Если
$limitзадан, будет включен режим отправки по партиям, отправка в партиях, при этом каждая партия не превысит заданного$limit.
-
subject($subject) -
Параметры: - $subject (string) – Тема письма
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Устанавливает тему письма:
$this->email->subject('This is my subject');
-
message($body) -
Параметры: - $body (string) – Тело письма
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Устанавливает тело письма:
$this->email->message('This is my message');
-
set_alt_message($str) -
Параметры: - $str (string) – Альтернативное тело письма
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Устанавливает альтернативное тело письма:
$this->email->set_alt_message('This is the alternative message');Это необязательная строка, которая может использоваться при отправке HTML-письма. Она позволяет указать альтернативное тело без HTML-форматирования, которое добавляется к строке заголовка для людей, не принимающих HTML-письма. Если вы не зададите своё сообщение, CodeIgniter извлечёт сообщение из вашего HTML-письма и удалит теги.
-
set_header($header, $value) -
Параметры: - $header (string) – Название заголовка
- $value (string) – Значение заголовка
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Добавляет дополнительные заголовки к письму:
$this->email->set_header('Header1', 'Value1'); $this->email->set_header('Header2', 'Value2');
-
clear([$clear_attachments = FALSE]) -
Параметры: - $clear_attachments (bool) – Удалять ли вложения
Возвращаемое значение: Экземпляр 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('Here is your info '.$name); $this->email->message('Hi '.$name.' Here is the info you requested.'); $this->email->send(); }Если вы установите параметр в TRUE, любые вложения также будут удалены:
$this->email->clear(TRUE);
-
send([$auto_clear = TRUE]) -
Параметры: - $auto_clear (bool) – Автоматически очищать данные сообщения
Возвращаемое значение: TRUE при успехе, FALSE при ошибке
Тип возвращаемого значения: bool
Метод отправки письма. Возвращает boolean TRUE или FALSE в зависимости от успеха или неудачи, что позволяет использовать его условно:
if ( ! $this->email->send()) { // Generate error }Этот метод автоматически очистит все параметры, если запрос был успешен. Чтобы остановить это поведение, передайте FALSE:
if ($this->email->send(FALSE)) { // Parameters won't be cleared }Примечание
Для использования метода
print_debugger()необходимо избегать очистки параметров электронной почты.
-
-
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 для использования (полезно для буферизованных данных)
Возвращаемое значение: Экземпляр CI_Email (цепочка методов)
Тип возвращаемого значения: CI_Email
Позволяет отправлять вложение. В первом параметре укажите путь/имя файла. Для нескольких вложений используйте метод несколько раз. Например:
$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');Если вам нужно использовать строку буфера вместо реального физического файла, вы можете использовать первый параметр как буфер, третий параметр как имя файла, а четвертый параметр как тип MIME:
$this->email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
-
attachment_cid($filename) -
Параметры: - $filename (string) – Существующее имя файла вложения
Возвращаемое значение: Идентификатор содержимого вложения или FALSE, если не найден
Тип возвращаемого значения: string
Устанавливает и возвращает идентификатор содержимого вложения, что позволяет встраивать встроенное (изображение) вложение в 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(); }Примечание
Идентификатор содержимого для каждого электронного письма должен быть повторно создан, чтобы он был уникальным.
-
print_debugger([$include = array('headers', 'subject', 'body')]) -
Параметры: - $include (array) – Какие части сообщения распечатать
Возвращаемое значение: Отформатированные отладочные данные
Тип возвращаемого значения: string
Возвращает строку, содержащую любые сообщения сервера, заголовки электронной почты и сообщение электронной почты. Полезно для отладки.
Вы можете необязательно указать, какие части сообщения нужно напечатать. Допустимые параметры: headers, subject, body.
Пример:
// You need to pass FALSE while sending in order for the email data // to not be cleared - if that happens, print_debugger() would have // nothing to output. $this->email->send(FALSE); // Will only print the email headers, excluding the message subject and body $this->email->print_debugger(array('headers'));Примечание
По умолчанию будут напечатаны все сырые данные.
-
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/email.html