Класс Email
Класс Email поддерживает следующие возможности:
- Работа с Mail, Sendmail и SMTP
- Массовая рассылка
- CC и BCCs
- HTML или Обычный текст писем
- Вложения
- Перенос строк
- Приоритеты
- BCC Batch Mode, позволяет разбивать большие списки адресов на мелкие пакеты.
- Инструменты отладки
Отправка сообщений
Отправка сообщений проста. Вы можете настроить её «налету» или задать настройки в файле конфигурации.
Вот основной пример, демонстрирующий как можно отправить email. Замечание: Предполагается, что вы отправляете письмо из одного из ваших контроллеров.
$this->load->library('email');
$this->email->from('your@your-site.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');
$this->email->message('Тестирование класса отправки сообщений');
$this->email->send();
echo $this->email->print_debugger();
Настройка параметров письма
Существует 17 различных параметров. Вы можете устанавливать их автоматически, подгружая из файла конфигурации или вручную, как это описано ниже:
Параметры помещаются в массив и затем инициализируются с помощью функции initialize. Вот пример того, как это можно сделать:
$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(), если Вы будете хранить параметры в файле конфигурации.
Параметры письма
Ниже приведен список всех параметров, которые могут быть установлены при отправке 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 тайм-аут (в секундах). |
wordwrap | TRUE | TRUE или FALSE (boolean) | Включение переносов. |
wrapchars | 76 | Число символов до переноса. | |
mailtype | text | text или html | Тип письма. Если отсылаете письмо в виде HTML, то Вы должны отправить его как полноценную веб-страницу. Убедитесь, что отсутствуют относительные ссылки и относительные пути изображений, иначе они не будут работать. |
charset | utf-8 | Установка кодировки письма (utf-8, iso-8859-1 и т.д.). | |
validate | FALSE | TRUE или FALSE (boolean) | Валидация email-адреса. |
priority | 3 | 1, 2, 3, 4, 5 | Email приоритеты. 1 = самый высокий. 5 = самый низкий. 3 = нормальный. |
newline | \n | "\r\n" или "\n" | Тип переноса на новую строку. (Используйте "\r\n" для соблюдения стандарта RFC 822). |
bcc_batch_mode | FALSE | TRUE или FALSE (boolean) | Включение пакетного режима BCC. |
bcc_batch_size | 200 | Нет | Количество адресов в одном BCC-пакете. |
Функции класса Email
$this->email->from()
Задает адрес электронной почты и имя лица-отправителя:
$this->email->from('you@your-site.com', 'Ваше Имя');
$this->email->reply_to()
Устанавливает адрес для ответа, если не была указана информация в функции "from". Пример:
$this->email->reply_to('you@your-site.com', 'Ваше Имя');
$this->email->to()
Задает адрес(а) получателя (получателей). Может быть указан один адрес электронной почты, список через запятую или массив:
$this->email->to('someone@example.com');
$this->email->to('one@example.com, two@example.com, three@example.com');
$list = array('one@example.com', 'two@example.com', 'three@example.com');
$this->email->to($list);
$this->email->cc()
Задает CC адрес(а). Точно так же, как и в «to», может быть указан один адрес электронной почты, список через запятую или массив.
$this->email->bcc()
Задает BCC адрес(а). Точно так же, как и в «to», может быть указан один адрес электронной почты, список через запятую или массив:
$this->email->subject()
Устанавливает тему письма:
$this->email->subject('Это тема письма');
$this->email->message()
Устанавливает текст сообщения:
$this->email->message('Вот мое сообщение');
$this->email->set_alt_message()
Задает текст альтернативного сообщения:
$this->email->set_alt_message('Альтернативное сообщение');
Это — дополнительная строка сообщения, которая может быть использована, если вы посылаете письмо HTML-формата. Это позволяет вам определить альтернативное сообщение без HTML-формата, которое будет добавлено к строке заголовка для людей, которые не принимают письма в HTML-формате. Если Вы не установите альтернативное сообщение, CodeIgniter сам извлечет сообщение из HTML письма и удалит все теги.
$this->email->clear()
Очищает все email-переменные. Эта функция обычно используется в том случае, когда вы запускаете функцию отправки писем в цикле, и возникает необходимость сбросить значения между циклами.
foreach ($list as $name => $address)
{
$this->email->clear();
$this->email->to($address);
$this->email->from('your@your-site.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);
$this->email->send()
Функция отправки письма. Возвращает TRUE или FALSE в зависимости от успешного или неуспешного выполнения функции. Пример условного использования:
if ( ! $this->email->send())
{
// Генерация ошибки
}
$this->email->attach()
Позволяет отсылать письма с вложением. В качестве первого параметра выступает путь к файлу и его имя. Замечание: Используйте реальный путь к файлу, а не URL. Если необходимо сделать несколько вложений, то функция пишется количество раз равное количеству вложений. Например:
$this->email->attach('/path/to/photo1.jpg');
$this->email->attach('/path/to/photo2.jpg');
$this->email->attach('/path/to/photo3.jpg');
$this->email->send();
$this->email->print_debugger()
Возвращает строку, содержащую любые сообщения сервера, заголовки и содержания писем. Необходима при отладке.
Перенос слов
Если включен перенос (соблюдайте стандарт RFC 822) и в письме есть очень длинные ссылки, то они могут быть перенесены и станут нерабочими. CodeIgniter позволяет решить эту проблему:
Текст письма,
который будет перенесен как обычно.
{unwrap}http://www.example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}
Еще какой-то текст,
который будет перенесен как обычно.
Помещайте текст, который не надо переносить, между: {unwrap} {/unwrap}