Content Management Framework. Easy. Convenient. Free.
Навигация
Новости
DLTFM!
Отныне документация доступна и в формате для скачивания.
1 февраля 2010 | Подробнее...
Новая документация
Первые разделы Руководства уже на сайте.
20 января 2010 | Подробнее...
Онлайн-поддержка
Теперь вы можете задать свои вопросы через ICQ.
11 января 2010 | Подробнее...
Новая версия ACMS!
Итак, спустя два с лишним года, вышла новая версия движка.
5 января 2010 | Подробнее...
Больше плагинов!
Два новых плагина появились за прошедшие пару дней.
16 марта 2008 | Подробнее...
Сравнение версий
Еще один плагин, полезный для разработчиков.
9 декабря 2007 | Подробнее...
Долгожданный плагин
Появился плагин поддержки пользователей и прав.
23 ноября 2007 | Подробнее...

Методы класса MailSystem

Класс MailSystem предназначен для отправки писем с сервера − как обычных, так и содержащих файлы-вложения. По умолчанию все письма рассылаются в текстовом формате (MIME-тип text/plain), но поддерживается возможность отправки писем и в формате HTML. Все методы класса предназначены для отправки одного письма, одному адресату. Если вам нужно отправить несколько однотипных писем, вызовите соответствующий метод несколько раз, но будьте осторожны − чем больше писем сервер отправит в течение короткого интервала времени, тем больше у него шансов оказаться в черных списках за спам.

Экземпляр класса MailSystem создается в движке автоматически и доступен через глобальную переменную $mailSystem. В пакетах эта переменная доступна автоматически, ее не нужно никак объявлять. В функциях и методах классов ее нужно предварительно объявить командой:

global $mailSystem;

Все письма отправляются при помощи стандартной функции mail. Если письма не отправляются или отправляются с ошибками − обратитесь к вашему хостеру по поводу настройки локального почтового сервера и установки правильных параметров для функции mail. Настроить работу почтовой службы может только администратор сервера.

Класс также поддерживает возможность удобной отладки при отправке писем, особенно при локальной разработке проекта. Создайте в корневом каталоге сайта каталог mail, переключите стандартную константу MailDebuggerEnabled в true, и отныне все письма, рассылаемые через класс MailSystem, не будут отправляться на почтовый сервер, а будут сохраняться в виде текстовых файлов в папке mail.

Рассмотрим методы класса более подробно.

sendMail

bool sendMail ( string sender, string recipient, string subject, string message [, bool html] )

Метод отправляет письмо с заголовком subject и телом (текстом) message на адрес recipient. В качестве обратного адреса используется значение параметра sender. По умолчанию письмо отправляется в текстовом формате и с MIME-типом text/plain, если вам нужен формат HTML и MIME-тип text/html − укажите необязательному параметру html значение true. Разумеется, в этом случае и параметр message также должен иметь вид HTML-файла.

Хорошей практикой считается использование шаблонов ACMS для формирования заголовков и текстов отправляемых писем. Это особенно удобно для писем, в содержимое которых вставляются динамические данные, например, код активации аккаунта или имя пользователя. При использовании шаблонов для таких вставок достаточно использовать стандартные теги <var:...>. При этом, однако, нужно помнить следующее:

  • Если вы используете plain-формат писем, то есть письма в обычном текстовом формате, то при подстановке значений переменных в тексты нужно отключать фильтрацию специальных символов. Например, вместо <var:username> в шаблоне письма нужно писать <var:username nofilter>.
  • При компиляции шаблона ACMS автоматически удаляет из него все пустые строки. Для HTML-шаблонов это удобно, но при обработке обычного текста строки могут "слипаться" друг с другом. Повлиять на этот механизм нельзя, он является частью компилятора, поэтому, чтобы обойти эту оптимизацию, используйте один или несколько пробелов вместо пустых строк в текстах писем.
  • Наконец, для сборки шаблона ему нужно предварительно передать список доступных переменных, ибо по умолчанию "область видимости" шаблона пуста. Как это сделать − см. в примере ниже. Список переменных шаблона собирается в специальной переменной $scope при помощи стандартной функции compact, и затем просто передается методу captureTemplate в качестве второго параметра.

Метод возвращает значение true, если письмо было успешно отправлено, и false в противном случае.

Пример:

// Отправка приветственного письма на адрес $email, пользователю $username
// Для сборки письма используются шаблоны mailWelcomeSubject и mailWelcomeMessage
// 1. Подготовка списка переменных для шаблона (логин, пароль, e-mail адрес)
$scope=compact("username","password","email");
// 2. Сборка заголовка и текста письма
$subject=$compiler->captureTemplate("mailWelcomeSubject",$scope);
$message=$compiler->captureTemplate("mailWelcomeMessage",$scope);
// 3. Собственно отправка письма
$success=$mailSystem->sendMail($settings["siteAdminEmail"],$email,$subject,$message);
if($success) echo "Письмо отправлено успешно.";

sendMailAttachments

bool sendMailAttachments ( string sender, string recipient, string subject, string message [, array attachments [, bool html]] )

Данный метод отличается от предыдущего лишь тем, что позволяет вкладывать в текст письма одно или более файлов-вложений. Вложения оформляются в формате Disposition=attachment, с MIME-типом application/octet-stream. Это наиболее безопасный и наименее "подозрительный" способ передачи файлов в письмах.

Список вложений указывается параметром attachments. Он имеет вид ассоциативного массива, ключи которого − имена файлов, под которыми вложения будут добавлены в письмо, а значения − содержимое файлов-вложений. Обратите внимание, что содержимое вложений указывается напрямую, в виде бинарных строк. Они не обязаны быть предварительно сохранены в файловой системе сервера. Их содержимое может быть как прочитано из файла, так и сформировано "на лету" − как вам удобнее.

Метод возвращает значение true, если письмо было успешно отправлено, и false в противном случае.

Пример:

// Отправка прайса и оферты на адрес $email
// 1. Подготовка заголовка и текста письма
$subject="Прайс и оферта";
$message="Получайте ваши документы.";
// 2. Подготовка вложений
$attachments=array(
  "Прайс-лист.doc"=>$fileSystem->openFile("/files/documents/price.dat"),
  "Договор-оферта.doc"=>$fileSystem->openFile("/files/documents/agreement.dat"));
// 3. Отправка письма
$success=$mailSystem->sendMailAttachments(
  $settings["siteAdminEmail"],$email,$subject,$message,$attachments);
if($success) echo "Письмо отправлено успешно.";
Документация
Лучшие сайты на ACMS
Наши друзья
Другие интересные CMF
Помогите проекту!
WMZ: Z111111111111
WMR: R111111111111
Онлайн-поддержка
Техподдержка сайтов,
Разработка модулей
ICQ: 555555555