# Extensibilité EmailSender

### Ce que c’est

Utilisez ce point d’extensibilité lorsque vous voulez que The Wallet Crew envoie des e‑mails via un fournisseur que vous contrôlez. Il s’agit d’une intégration au niveau du script. Elle vous permet de conserver les modèles et la logique de rendu de Wallet Crew, tout en déléguant l’« envoi » final à vos propres appels d’API.

Ce concept sépare le rendu de la livraison. Cela rend votre couche d’e‑mail plus facile à tester et plus simple à remplacer. Cela rend aussi la gestion des cultures explicite, car l’appelant décide quelles cultures existent et comment les modèles sont résolus.

### Comment `SendEmail` fonctionne

La plateforme appelle `runtime.scriptable.emailEngine.SendEmail` lorsqu’elle doit envoyer un e‑mail et que le fournisseur d’e‑mail est défini sur `script`. La fonction reçoit l’adresse du destinataire, le nom du modèle, une charge utile de données et la liste des cultures prises en charge.

Le dernier paramètre, `buildEmail`, est un rappel fourni par la plateforme. Votre fournisseur l’appelle pour obtenir le contenu rendu final. Ce rappel retourne un objet avec un `Objet` et un `Corps`. Une fois que vous avez cette charge utile, votre script est responsable de l’envoi.

### Implémentation de référence (signature)

```js
/**
 * @typedef {Object} EmailData
 * @property {string} Subject - Ligne d’objet rendue.
 * @property {string} Body - Contenu du corps rendu.
 */

/**
 * Envoyer un e‑mail en utilisant le nom de modèle et les données fournis.
 * L’appelant fournit les cultures prises en charge et un rappel
 * pour construire le contenu de l’e‑mail rendu.
 *
 * @param {string} recipient - Adresse e‑mail cible.
 * @param {string} emailTemplate - Nom du modèle à rendre.
 * @param {Object.<string, any>} data - Données du modèle passées au script.
 * @param {string[]} cultures - Noms des cultures disponibles fournis par le fournisseur de cultures.
 * @param {(templateName: string) => Promise<EmailData>} buildEmail
 * Rappel qui retourne le contenu final de l’e‑mail rendu.
 *
 * @returns {Promise<void>}
 */
async function sendEmail(recipient, emailTemplate, data, cultures, buildEmail){
   // appeler n’importe quelle API pour envoyer l’e‑mail
}

export default function(context) {
  context.register('runtime.scriptable.emailEngine', {
    SendEmail: sendEmail 
  })
}
```

### Activer le fournisseur d’e‑mail par script

Basculer vers le fournisseur d’e‑mail script est un changement de configuration. Cela indique à The Wallet Crew d’appeler votre `SendEmail` implémentation pour les e‑mails sortants.

{% stepper %}
{% step %}

#### Edit `/server/emails.yml`

Ouvrez l’éditeur de configuration avancée, puis créez ou modifiez `/server/emails.yml`. Définissez le type de fournisseur sur `script`. Conservez `resources` pointant vers votre répertoire de modèles d’e‑mail.
{% endstep %}
{% endstepper %}

```yaml
provider:
  type: script
resources:
  - /locales/emails/

```

### Remarques sur les modèles et les cultures

Les modèles d’e‑mail sont chargés à partir des chemins listés sous `resources`. Gardez cela aligné avec l’emplacement de vos modèles HTML, car le rappel de rendu utilise ces modèles.

La gestion des cultures fait partie du contrat. La plateforme passe un `cultures` tableau, mais votre fournisseur décide comment l’utiliser. En pratique, la plupart des configurations choisissent soit une seule culture par destinataire, soit reviennent à une culture par défaut lorsqu’aucun modèle spécifique n’existe.

### Dépannage

Si les e‑mails cessent d’être envoyés après l’activation du fournisseur script, commencez par confirmer que `/server/emails.yml` est un YAML valide et enregistré dans le bon locataire. Puis confirmez que votre script est effectivement enregistré sous `runtime.scriptable.emailEngine` et exporte `SendEmail`.

Si vous voyez des erreurs côté fournisseur, consignez le nom du modèle et les choix de culture, mais évitez de consigner les corps rendus en entier. Le contenu des e‑mails peut contenir des données personnelles.

### FAQ

<details>

<summary><strong>S’agit‑il d’un point de terminaison HTTP public ?</strong></summary>

Non. Cette page documente une interface d’exécution de script que votre script de locataire implémente. Si vous voulez appeler une API HTTP externe, faites‑le depuis l’intérieur de `SendEmail`.

</details>

<details>

<summary><strong>Où vivent les modèles d’e‑mail ?</strong></summary>

Ils se trouvent sous les répertoires listés dans `resources`. Par défaut, cela pointe vers `/locales/emails/`.

</details>

<details>

<summary><strong>Pouvons‑nous mélanger un fournisseur script avec SendGrid ou Mailchimp ?</strong></summary>

Pas en même temps pour un locataire donné. Le fournisseur actif est sélectionné dans `/server/emails.yml`.

</details>

<details>

<summary><strong>Que devons‑nous retourner depuis <code>SendEmail</code>?</strong></summary>

Retournez normalement lorsque l’e‑mail est accepté par votre fournisseur. Lancez une erreur lorsque l’envoi échoue, afin que la plateforme puisse la remonter.

</details>

<details>

<summary><strong>Quel est le moyen le plus rapide pour valider la configuration ?</strong></summary>

Activez le `script` fournisseur, déclenchez un seul e‑mail transactionnel, puis vérifiez les journaux de votre fournisseur pour l’événement d’envoi.

</details>
