Guide pratique
Pièces jointes
Joignez des fichiers aux e-mails envoyés par l’API en base64 ou depuis une URL, intégrez des images avec un Content-ID, et respectez les types de fichiers autorisés et les limites de taille.
Cette page explique comment joindre des fichiers aux e-mails que vous envoyez avec POST /emails, soit en contenu encodé en base64, soit en laissant Emailit les télécharger depuis une URL. Elle traite aussi des images intégrées, des types de fichiers autorisés et des limites de taille.
Champs des pièces jointes
Transmettez un tableau attachments. Chaque élément est un objet avec ces champs :
filenamestringobligatoirecontentstringcontent, soit url, pas les deux.urlstringhttp:// ou https:// depuis laquelle Emailit télécharge le fichier. Utilisez soit content, soit url, pas les deux.content_typestringapplication/pdf. Obligatoire avec content. Avec url, vaut par défaut le Content-Type renvoyé par le serveur.content_idstringcid:.encodingstringpar défaut : base64content. Laissez base64 sauf si vous avez une raison de le changer.Joindre un fichier en base64
Lisez le fichier, encodez-le en base64 et envoyez-le avec son type MIME.
curl https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"from\": \"Acme Billing <billing@acme.com>\",
\"to\": \"ada@example.com\",
\"subject\": \"Invoice INV-1042\",
\"text\": \"Your invoice is attached.\",
\"attachments\": [{
\"filename\": \"INV-1042.pdf\",
\"content\": \"$(base64 < INV-1042.pdf | tr -d '\n')\",
\"content_type\": \"application/pdf\"
}]
}"import { readFile } from 'node:fs/promises';
import { Emailit } from '@emailit/node';
const emailit = new Emailit(process.env.EMAILIT_API_KEY);
const pdf = await readFile('INV-1042.pdf');
await emailit.emails.send({
from: 'Acme Billing <billing@acme.com>',
to: 'ada@example.com',
subject: 'Invoice INV-1042',
text: 'Your invoice is attached.',
attachments: [
{
filename: 'INV-1042.pdf',
content: pdf.toString('base64'),
content_type: 'application/pdf',
},
],
});import base64
import os
from emailit import EmailitClient
client = EmailitClient(os.environ["EMAILIT_API_KEY"])
with open("INV-1042.pdf", "rb") as f:
pdf = base64.b64encode(f.read()).decode("ascii")
client.emails.send({
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Invoice INV-1042",
"text": "Your invoice is attached.",
"attachments": [{
"filename": "INV-1042.pdf",
"content": pdf,
"content_type": "application/pdf",
}],
})$emailit = Emailit::client(getenv('EMAILIT_API_KEY'));
$emailit->emails()->send([
'from' => 'Acme Billing <billing@acme.com>',
'to' => 'ada@example.com',
'subject' => 'Invoice INV-1042',
'text' => 'Your invoice is attached.',
'attachments' => [[
'filename' => 'INV-1042.pdf',
'content' => base64_encode(file_get_contents('INV-1042.pdf')),
'content_type' => 'application/pdf',
]],
]);Joindre un fichier depuis une URL
Au lieu d’encoder le fichier vous-même, fournissez une url à Emailit. Emailit télécharge le fichier pendant qu’il construit le message : la requête dure donc aussi longtemps que le téléchargement.
{
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Invoice INV-1042",
"text": "Your invoice is attached.",
"attachments": [
{
"filename": "INV-1042.pdf",
"url": "https://files.acme.com/invoices/INV-1042.pdf"
}
]
}L’URL doit respecter ces règles, sinon la requête échoue avec 422 et Attachment error :
- Elle utilise
httpouhttpset pointe vers un hôte public. Les adresses privées et internes sont refusées. - Elle renvoie directement le fichier avec un statut
2xx. Les redirections ne sont pas suivies. - Le téléchargement se termine en 30 secondes au maximum.
- Le fichier ne dépasse pas 25 Mo, d’après son en-tête
Content-Length.
Emailit construit une copie distincte du message pour chaque destinataire et télécharge les pièces jointes par URL pour chaque copie. Assurez-vous que les URL signées ou à durée limitée restent valides pendant toute la requête, et que l’hébergeur du fichier peut supporter un téléchargement par destinataire.
Intégrer des images
Pour afficher une image dans le corps HTML plutôt que comme pièce jointe séparée, donnez-lui un content_id et faites référence à cet ID avec cid: dans une balise img.
{
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Your weekly report",
"html": "<p><img src=\"cid:chart-week-40\" alt=\"Weekly signups\" width=\"600\"></p>",
"attachments": [
{
"filename": "chart.png",
"content": "iVBORw0KGgoAAAANSUhEUgAA...",
"content_type": "image/png",
"content_id": "chart-week-40"
}
]
}Le content_id de la pièce jointe et la valeur après cid: doivent correspondre exactement. Les images intégrées alourdissent le message pour chaque destinataire : pour les logos et les autres images communes, une URL d’image hébergée dans le HTML est généralement le meilleur choix.
Limites de taille
| Limite | Valeur |
|---|---|
| Message complet, après encodage | 40 Mo. Les messages plus volumineux échouent avec 413 Message too large. |
Une pièce jointe téléchargée depuis url |
25 Mo |
Timeout de téléchargement pour url |
30 secondes |
| Corps de la requête JSON | 50 Mo |
L’encodage base64 grossit les fichiers d’environ un tiers, et la limite de 40 Mo s’applique au message encodé. En pratique, gardez la taille totale de vos fichiers sous 29 Mo environ. Au-delà, déposez le fichier sur votre propre stockage et envoyez un lien.
Types de fichiers autorisés
filename doit se terminer par l’une de ces extensions. Toute autre extension, ou un nom sans extension, fait échouer la validation avec 400.
| Catégorie | Extensions |
|---|---|
| Texte | .txt, .csv, .log, .css, .ics, .xml |
| Images | .jpg, .jpe, .jpeg, .gif, .png, .bmp, .psd, .tif, .tiff, .svg, .indd, .ai, .eps |
| Documents | .doc, .docx, .rtf, .odt, .ott, .pdf, .pub, .pages, .mobi, .epub |
| Audio | .mp3, .m4a, .m4v, .wma, .ogg, .flac, .wav, .aif, .aifc, .aiff |
| Vidéo | .mp4, .mov, .avi, .mkv, .mpeg, .mpg, .wmv |
| Tableurs | .xls, .xlsx, .ods, .numbers |
| Présentations | .odp, .ppt, .pptx, .pps, .key |
| Archives et contacts | .zip, .vcf |
.eml |
|
| Signatures et chiffrement | .p7c, .p7m, .p7s, .pgp, .asc, .sig |
Les fichiers exécutables et les scripts ne figurent pas dans la liste et ne peuvent pas être joints.
Lire les pièces jointes d’un e-mail envoyé
Lister les pièces jointes (GET /emails/{id}/attachments) renvoie chaque pièce jointe avec son filename, son content_type, sa size, son content_id, sa content_disposition (attachment ou inline) et son content en base64. Cet endpoint nécessite une clé Full Access. Les pièces jointes sont supprimées en même temps que le contenu des messages à la fin de votre période de conservation des données.
Dépannage
| Erreur | À vérifier |
|---|---|
Attachment at index 0 missing content_type (required when using 'content') |
Ajoutez content_type à chaque pièce jointe en base64. |
Attachment 'report.exe' has unsupported file type '.exe' |
Utilisez une extension autorisée, ou placez le fichier dans un .zip. |
Attachment at index 0 cannot have both 'content' and 'url' |
Envoyez l’un des deux. |
Attachment error avec Failed to fetch attachment |
L’URL a renvoyé un statut d’erreur, a redirigé, a expiré (timeout) ou n’est pas publique. Ouvrez-la depuis un serveur extérieur à votre réseau pour vérifier. |
Attachment error avec Attachment too large (max 25MB) |
Hébergez le fichier et envoyez plutôt un lien. |
413 Message too large |
Réduisez la taille totale des pièces jointes. |
Voir aussi
- Envoyer un e-mail
- Envoyer un e-mail dans la référence de l’API
- Conservation des données