Email

Elgg имеет возможность отправлять электронные письма. Это можно сделать напрямую, используя такие функции, как elgg_send_email() и elgg_notify_user(), или косвенно через систему уведомлений. Ниже обзор функций системы электронной почты.

HTML-письма

Как администратор, вы можете настроить ваш сайт так, чтобы все исходящие письма были HTML-письмами или просто текстовыми письмами. HTML-письма включены по умолчанию. При включении содержимое письма будет обёрнуто в элементы HTML, и будет применён некоторый CSS. Это позволяет разработчикам тем стилизовать письма.

Соответствующие представления для форматирования и стилизации писем можно найти в views/default/email.

CSS будет встроено автоматически, поэтому оно будет работать в большинстве почтовых клиентов. Если ваше письмо содержит изображения, эти изображения могут быть преобразованы во встроенные изображения с кодировкой base64 (по умолчанию) или вложения. Преобразованные изображения — это лучший способ обеспечить согласованное отображение изображений в различных клиентах.

Вместо автоматического преобразования сообщения в HTML вы также можете предоставить своё собственное html_message в params уведомления. html_message должно быть строкой. Elgg автоматически попытается встроить предоставленный CSS, присутствующий в параметре css. Если вы не хотите встраивать CSS, вам нужно установить параметр convert_css в false. Ниже пример пользовательской HTML-части.

elgg_send_email([
        'from' => 'from@elgg.org',
        'to' => 'to@elgg.org',
        'subject' => 'Test Email',
        'body' => 'Welcome to the site',
        'params' => [
                'html_message' => '
                        <p>Welcome to the site</p>
                        <img src="site_logo.png"/>
                ',
                'convert_css' => true,
                'css' => 'p { padding: 10px;}'
        ],
]);

Вложения

elgg_notify_user() или поставленные в очередь уведомления поддерживают вложения для уведомлений по электронной почте, если они предоставлены в $params. Чтобы добавить одно или несколько вложений, добавьте ключ attachments в $params, который является массивом вложений. Вложение должно быть в одном из следующих форматов:

  • ElggFile, который указывает на существующий файл

  • Массив с содержимым файла

  • Массив с путём к файлу

    // this example is for elgg_notify_user()
    $params['attachments'] = [];

    // Example of an ElggFile attachment
    $file = new \ElggFile();
    $file->owner_guid = <some owner_guid>;
    $file->setFilename('<some filename>');

    $params['attachments'][] = $file;

    // Example of array with content
    $params['attachments'][] = [
            'content' => 'The file content',
            'filename' => 'test_file.txt',
            'type' => 'text/plain',
    ];

    // Example of array with filepath
    // 'filename' can be provided, if not basename() of filepath will be used
    // 'type' can be provided, if not will try a best guess
    $params['attachments'][] = [
            'filepath' => '<path to a valid file>',
    ];

$recipient->notify('some_action', $on_some_object, $params);
// or
elgg_notify_user($recipient, 'some_action', $on_some_object, $params);

Форматирование адреса электронной почты

Elgg использует библиотеку Symfony для помощи в форматировании адресов электронной почты: \Symfony\Component\Mime\Address.

// the constructor takes two variables
// first is the email address, this is REQUIRED
// second is the name, this is optional
$address = new \Symfony\Component\Mime\Address('example@elgg.org', 'Example');

// this will result in 'Example <example@elgg.org>'
echo $address->toString();

Доступны некоторые вспомогательные функции

  • \Symfony\Component\Mime\Address::create($string) вернёт класс \Symfony\Component\Mime\Address с установленными email и именем, при условии предоставления отформатированной строки (например, Example <example@elgg.org>)