E-mail

Elgg a la capacité d’envoyer des e-mails. Cela peut être fait directement en utilisant des fonctions comme elgg_send_email() et notify_user() ou indirectement via le système de notifications. Voici un aperçu des fonctionnalités du système de messagerie.

Courrier HTML

En tant qu’administrateur, vous pouvez configurer votre site pour que tous les e-mails sortants soient des e-mails HTML ou simplement des e-mails en texte brut. Les e-mails HTML sont activés par défaut. Lorsqu’il est activé, le contenu de l’e-mail sera enveloppé dans des éléments HTML et du CSS sera appliqué. Cela permet aux développeurs de thèmes de styliser les e-mails.

Les vues appropriées pour formater et styliser les e-mails peuvent être trouvées dans views/default/email.

Le CSS sera automatiquement intégré afin qu’il fonctionne dans la plupart des clients de messagerie. Si votre e-mail contient des images, ces images peuvent être converties en images encodées en base64 (par défaut) ou en pièces jointes. Les images converties sont le meilleur moyen d’afficher les images de manière cohérente dans divers clients.

Au lieu de convertir automatiquement le message en HTML, vous pouvez également fournir votre propre html_message dans les params d’une notification. Le message_html peut être un Elgg\Email\HtmlPart ou une string. S’il s’agit d’une string, Elgg essaiera automatiquement d’insérer le CSS fourni présent dans le paramètre css. Si vous ne voulez pas insérer de CSS, vous devrez définir le paramètre convert_css sur false. Ci-dessous un exemple de partie HTML personnalisée.

elgg_send_email(\Elgg\Email::factory([
        '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;}'
        ],
]));

Pièces jointes

notify_user() ou les notifications mises en file d’attente prennent en charge les pièces jointes pour les notifications par e-mail si elles sont fournies dans $params. Pour ajouter une ou plusieurs pièces jointes, ajoutez une clef attachments dans $params, avec pour valeur un tableau des pièces jointes. Une pièce jointe doit être dans l’un des formats suivants :

  • Un ElggFile qui pointe vers un fichier existant

  • Un tableau avec le contenu du fichier

  • Un tableau avec le chemin

// this example is for 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>',
];

notify_user($to_guid, $from_guid, $subject, $body, $params);

Formatage des adresses e-mail

Elgg dispose d’une classe d’aide pour récupérer des adresses e-mail formatées : \Elgg\Email\Address.

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

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

// to change the name use:
$address->setName('New Example');

// to change the e-mail address use:
$address->setEmail('example2@elgg.org');

Il existe plusieurs fonctions d’aide disponibles

  • \Elgg\Email\Address::fromString($string) Va retourner une classe \Elgg\Email\Address avec le nom et l’e-mail définis, à partir d’une chaîne formatée (par ex. Exemple <example@elgg.org>)

  • \Elgg\Email\Address::fromEntity($entity) Va renvoyer une classe \Elgg\Email\Address avec l’e-mail et le nom définis en fonction de l’entité

  • \Elgg\Email\Address::getFormattedEmailAddress($email, $name) Va retourner une chaîne formatée à partir d’une adresse e-mail, et d’un nom optionnel