> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dexnotify.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Envoyer par SMTP

> Brancher une application qui sait déjà envoyer des e-mails, sans une ligne de code.

WordPress, un ERP, un CRM, une imprimante, un script existant : tout ce qui envoie déjà par SMTP envoie par DexNotify en changeant quatre réglages. Les envois suivent les règles de l’API — [domaine vérifié](https://docs.dexnotify.com/email/domaines.md), quotas de l’offre, liste de suppression — et apparaissent dans le journal avec la source « SMTP ».

| Réglage | Valeur |
| - | - |
| Serveur | `smtp.dexnotify.com` |
| Port | `587` avec STARTTLS, ou `465` en TLS |
| Identifiant | `dexnotify` |
| Mot de passe | une [clé API](https://docs.dexnotify.com/authentification.md) qui porte la portée `email:send` |

Une clé `dxn_stag_` envoie en staging : rien ne part, tout se lit dans le journal. Une clé `dxn_prod_` envoie pour de vrai.

## Exemples

```js Node (nodemailer) theme={null}
import nodemailer from 'nodemailer';

const transport = nodemailer.createTransport({
  host: 'smtp.dexnotify.com',
  port: 587,
  auth: { user: 'dexnotify', pass: process.env.DEXNOTIFY_API_KEY },
});

await transport.sendMail({
  from: 'Boutique <bonjour@votremarque.sn>',
  to: 'awa@client.sn',
  subject: 'Votre commande est confirmée',
  html: '<p>Merci pour votre commande.</p>',
});
```

```python Python theme={null}
import os, smtplib
from email.message import EmailMessage

message = EmailMessage()
message["From"] = "Boutique <bonjour@votremarque.sn>"
message["To"] = "awa@client.sn"
message["Subject"] = "Votre commande est confirmée"
message.set_content("Merci pour votre commande.")

with smtplib.SMTP("smtp.dexnotify.com", 587) as smtp:
    smtp.starttls()
    smtp.login("dexnotify", os.environ["DEXNOTIFY_API_KEY"])
    smtp.send_message(message)
```

```php PHP (PHPMailer) theme={null}
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.dexnotify.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = 'dexnotify';
$mail->Password = getenv('DEXNOTIFY_API_KEY');
$mail->setFrom('bonjour@votremarque.sn', 'Boutique');
$mail->addAddress('awa@client.sn');
$mail->Subject = 'Votre commande est confirmée';
$mail->Body = 'Merci pour votre commande.';
$mail->send();
```

## Ce que le relais fait du message

* **Destinataires** : ceux de l’enveloppe (`RCPT TO`) font foi. Ceux qui n’apparaissent ni dans `To` ni dans `Cc` partent en copie cachée. 50 au plus par message.
* **Corps et pièces jointes** : HTML, texte, et jusqu’à 10 pièces jointes ; 20 Mo au plus par message.
* **En-têtes** : vos en-têtes `X-…` sont conservés. `X-DexNotify-Tags: commande=1234, type=facture` pose des étiquettes, retrouvées dans le journal et les [webhooks](https://docs.dexnotify.com/webhooks.md).
* **Rejeu** : un message renvoyé avec le même `Message-ID` après une coupure n’est envoyé qu’une fois.

## Les réponses du serveur

| Code | Sens | Que faire |
| - | - | - |
| `250` | accepté : le message est en file | rien |
| `535` | clé API refusée, ou sans la portée `email:send` | vérifier la clé |
| `550` | refus définitif : domaine non vérifié, adresse supprimée, message invalide | corriger, ne pas renvoyer tel quel |
| `552` | message trop lourd, ou trop de pièces jointes | alléger |
| `451`, `452`, `454` | refus temporaire : débit, quota, maintenance | le client SMTP réessaie seul |

> [!NOTE]
>
> Les images intégrées par `cid:` sont jointes, pas affichées dans le corps. Pour une image dans un e-mail, préférez une adresse publique — celles de la médiathèque, par exemple.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.