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 existantUn 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