La première API de messagerie complète : comment Forward Email a révolutionné la gestion des e-mails

TL;DR : Nous avons développé la première API REST complète au monde pour la gestion des e-mails, avec des fonctionnalités de recherche avancées qu'aucun autre service n'offre. Alors que Gmail, Outlook et Apple obligent les développeurs à se tourner vers l'enfer IMAP ou des API à débit limité, Forward Email offre des opérations CRUD ultra-rapides pour les messages, les dossiers, les contacts et les calendriers via une interface REST unifiée avec plus de 15 paramètres de recherche. C'est l'API de messagerie qu'attendaient les développeurs.
Le problème de l'API de messagerie
Les API de messagerie sont fondamentalement défectueuses. Point final.
Chaque grand fournisseur de messagerie électronique oblige les développeurs à faire l'un des deux choix terribles suivants :
- IMAP Hell : Un protocole vieux de 30 ans conçu pour les clients de bureau, et non pour les applications modernes
- API paralysées : Des API à débit limité, en lecture seule et complexes avec OAuth, incapables de gérer vos données de messagerie.
Résultat ? Soit les développeurs abandonnent complètement l'intégration des e-mails, soit ils perdent des semaines à développer des wrappers IMAP fragiles et constamment défaillants.
Warning
Le secret caché : la plupart des « API de messagerie » ne sont que des API d'envoi. Il est impossible d'organiser des dossiers, de synchroniser des contacts ou de gérer des calendriers par programmation via une simple interface REST. Jusqu'à présent.
Ce que disent réellement les développeurs
La frustration est réelle et documentée partout :
« J'ai récemment essayé d'intégrer Gmail à mon application, et j'y ai consacré trop de temps. J'ai décidé que la prise en charge de Gmail n'en valait pas la peine. »
- Développeur de Hacker News, 147 votes positifs
« Les API de messagerie sont-elles toutes médiocres ? Elles semblent limitées ou restrictives d'une certaine manière. »
« Pourquoi le développement d'e-mails est-il forcément pénible ? »
- Reddit r/webdev, 89 commentaires de difficultés de développement
« Qu'est-ce qui rend l'API Gmail plus efficace qu'IMAP ? L'API Gmail est également bien plus performante car elle ne télécharge chaque message qu'une seule fois. Avec IMAP, chaque message doit être téléchargé et indexé… »
- Question Stack Overflow avec 47 votes positifs
Les preuves sont partout :
- Problèmes SMTP WordPress : 631 problèmes GitHub concernant les échecs de distribution des e-mails
- Limites Zapier : Plaintes de la communauté concernant la limite de 10 e-mails/heure et les échecs de détection IMAP
- Projets API IMAP : Multiple, open source et projets existent spécifiquement pour « convertir IMAP en REST », car aucun fournisseur ne propose cette option
- Frustrations liées à l'API Gmail : Débordement de pile a 4 847 questions étiquetées « gmail-api » avec des plaintes courantes concernant les limites de débit et la complexité
La solution révolutionnaire de transfert d'e-mails
Nous sommes le premier service de messagerie à proposer des opérations CRUD complètes pour toutes les données de messagerie via une API REST unifiée.
Il ne s'agit pas d'une simple API d'envoi. Il s'agit d'un contrôle programmatique complet sur :
- Messages : Créer, lire, mettre à jour, supprimer, rechercher, déplacer, signaler
- Dossiers : Gestion complète des dossiers IMAP via des points de terminaison REST
- Contacts : Stockage et synchronisation des contacts CardDAV
- Calendriers : Événements et planification du calendrier CalDAV
Pourquoi nous avons construit ceci
Le problème : Tous les fournisseurs de messagerie traitent les e-mails comme une boîte noire. Vous pouvez envoyer des e-mails, voire les lire avec un protocole OAuth complexe, mais vous ne pouvez pas réellement gérer vos données de messagerie par programmation.
Notre vision : La messagerie électronique doit être aussi simple à intégrer que n'importe quelle API moderne. Pas de bibliothèques IMAP. Pas de complexité OAuth. Pas de problèmes de limitation de débit. Juste des points de terminaison REST simples et fonctionnels.
Le résultat : Le premier service de messagerie électronique où vous pouvez créer un client de messagerie électronique complet, une intégration CRM ou un système d'automatisation en utilisant uniquement des requêtes HTTP.
Authentification simple
Pas de Complexité OAuth. Pas de mots de passe spécifiques à l'application. Juste vos identifiants d'alias :
curl -u "alias@yourdomain.com:password" \
https://api.forwardemail.net/v1/messages
20 points de terminaison qui changent tout
Messages (5 points de terminaison)
GET /v1/messages
- Liste des messages avec filtrage (?folder=
,?is_unread=
,?is_flagged=
)POST /v1/messages
- Envoi des nouveaux messages directement vers les dossiersGET /v1/messages/:id
- Récupération d'un message spécifique avec métadonnées complètesPUT /v1/messages/:id
- Mise à jour du message (indicateurs, dossier, statut de lecture)DELETE /v1/messages/:id
- Supprimer définitivement le message
Dossiers (5 points de terminaison)
GET /v1/folders
- Liste de tous les dossiers avec statut d'abonnementPOST /v1/folders
- Création d'un dossier avec des propriétés personnaliséesGET /v1/folders/:id
- Obtention des détails du dossier et du nombre de messagesPUT /v1/folders/:id
- Mise à jour des propriétés du dossier et de l'abonnementDELETE /v1/folders/:id
- Suppression du dossier et gestion du déplacement des messages
Contacts (5 points de terminaison)
GET /v1/contacts
- Liste des contacts avec recherche et paginationPOST /v1/contacts
- Création d'un contact avec prise en charge complète de vCardGET /v1/contacts/:id
- Récupération du contact avec tous les champs et métadonnéesPUT /v1/contacts/:id
- Mise à jour des informations de contact avec validation ETagDELETE /v1/contacts/:id
- Suppression du contact avec gestion en cascade
Calendriers (5 points de terminaison)
GET /v1/calendars
- Liste des événements du calendrier avec filtrage par datePOST /v1/calendars
- Création d'un événement du calendrier avec participants et récurrenceGET /v1/calendars/:id
- Consultation des détails de l'événement avec gestion des fuseaux horairesPUT /v1/calendars/:id
- Mise à jour de l'événement avec détection des conflitsDELETE /v1/calendars/:id
- Suppression d'un événement avec notifications aux participants
Recherche avancée : aucun autre service comparable
Forward Email est le seul service de messagerie qui offre une recherche programmatique complète dans tous les champs de message via une API REST.
Alors que d'autres fournisseurs proposent au mieux un filtrage basique, nous avons développé l'API de recherche d'e-mails la plus avancée jamais créée. Aucune API Gmail, Outlook ou tout autre service n'égale nos capacités de recherche.
Le paysage de l'API de recherche est brisé
Limites de recherche de l'API Gmail :
- ✅ Paramètre de base
q
uniquement - ❌ Aucune recherche par champ
- ❌ Aucun filtrage par plage de dates
- ❌ Aucun filtrage par taille
- ❌ Aucun filtrage des pièces jointes
- ❌ Limité à la syntaxe de recherche de Gmail
Limites de recherche de l'API Outlook :
- ✅ Paramètre
$search
de base - ❌ Pas de ciblage de champ avancé
- ❌ Pas de combinaisons de requêtes complexes
- ❌ Limitation de débit agressive
- ❌ Syntaxe OData complexe requise
Apple iCloud :
- ❌ Aucune API
- ❌ Recherche IMAP uniquement (si vous parvenez à la faire fonctionner)
ProtonMail et Tuta :
- ❌ Aucune API publique
- ❌ Aucune fonctionnalité de recherche programmatique
API de recherche révolutionnaire de Forward Email
Nous proposons plus de 15 paramètres de recherche qu'aucun autre service ne propose :
Capacité de recherche | Transférer un e-mail | API Gmail | API Outlook | Autres |
---|---|---|---|---|
Recherche spécifique au domaine | ✅ Objet, corps, de, à, cc, en-têtes | ❌ | ❌ | ❌ |
Recherche générale multi-champs | ✅ ?search= dans tous les champs |
✅ q= de base |
✅ $search= de base |
❌ |
Filtrage de plage de dates | ✅ ?since= & ?before= |
❌ | ❌ | ❌ |
Filtrage basé sur la taille | ✅ ?min_size= & ?max_size= |
❌ | ❌ | ❌ |
Filtrage des pièces jointes | ✅ ?has_attachments=true/false |
❌ | ❌ | ❌ |
Recherche d'en-tête | ✅ ?headers=X-Priority |
❌ | ❌ | ❌ |
Recherche d'ID de message | ✅ ?message_id=abc123 |
❌ | ❌ | ❌ |
Filtres combinés | ✅ Plusieurs paramètres avec logique ET | ❌ | ❌ | ❌ |
Insensible à la casse | ✅ Toutes les recherches | ✅ | ✅ | ❌ |
Prise en charge de la pagination | ✅ Fonctionne avec tous les paramètres de recherche | ✅ | ✅ | ❌ |
Exemples de recherche dans le monde réel
Rechercher toutes les factures du dernier trimestre :
# Forward Email - Simple and powerful
GET /v1/messages?subject=invoice&since=2024-01-01T00:00:00Z&before=2024-04-01T00:00:00Z
# Gmail API - Impossible with their limited search
# No date range filtering available
# Outlook API - Complex OData syntax, limited functionality
GET /me/messages?$search="invoice"&$filter=receivedDateTime ge 2024-01-01T00:00:00Z
Rechercher des pièces jointes volumineuses provenant d'un expéditeur spécifique :
# Forward Email - Comprehensive filtering
GET /v1/messages?from=finance@company.com&has_attachments=true&min_size=1000000
# Gmail API - Cannot filter by size or attachments programmatically
# Outlook API - No size filtering available
# Others - No APIs available
Recherche multi-champs complexe :
# Forward Email - Advanced query capabilities
GET /v1/messages?body=quarterly&from=manager&is_flagged=true&folder=Reports
# Gmail API - Limited to basic text search only
GET /gmail/v1/users/me/messages?q=quarterly
# Outlook API - Basic search without field targeting
GET /me/messages?$search="quarterly"
Avantages de performance de
Performances de recherche d'e-mails transférés :
- ⚡ Temps de réponse inférieurs à 100 ms pour les recherches complexes
- 🔍 Optimisation des expressions régulières avec indexation appropriée
- 📊 Exécution de requêtes parallèles pour les comptages et les données
- 💾 Utilisation efficace de la mémoire avec des requêtes simplifiées
Problèmes de performances des concurrents :
- 🐌 API Gmail : Débit limité à 250 unités de quota par utilisateur et par seconde
- 🐌 API Outlook : Limitation agressive avec exigences de délai complexes
- 🐌 Autres : Aucune API de comparaison
Fonctionnalités de recherche que personne d'autre n'a
1. Recherche spécifique à l'en-tête
# Find messages with specific headers
GET /v1/messages?headers=X-Priority:1
GET /v1/messages?headers=X-Spam-Score
2. Intelligence basée sur la taille
# Find newsletter emails (typically large)
GET /v1/messages?min_size=50000&from=newsletter
# Find quick replies (typically small)
GET /v1/messages?max_size=1000&to=support
3. Flux de travail basés sur les pièces jointes
# Find all documents sent to legal team
GET /v1/messages?to=legal&has_attachments=true&body=contract
# Find emails without attachments for cleanup
GET /v1/messages?has_attachments=false&before=2023-01-01T00:00:00Z
4. Logique métier combinée
# Find urgent flagged messages from VIPs with attachments
GET /v1/messages?is_flagged=true&from=ceo&has_attachments=true&subject=urgent
Pourquoi cela est important pour les développeurs
Créer des applications qui étaient auparavant impossibles :
- Analyse avancée des e-mails : Analysez les modèles d'e-mails par taille, expéditeur et contenu
- Gestion intelligente des e-mails : Organisation automatique selon des critères complexes
- Conformité et découverte : Recherche d'e-mails spécifiques pour les exigences légales
- Business Intelligence : Extrayez des informations à partir des modèles de communication par e-mail
- Flux de travail automatisés : Déclenchez des actions grâce à des filtres d'e-mails sophistiqués
L'implémentation technique
Notre API de recherche utilise :
- Optimisation des expressions régulières avec des stratégies d'indexation appropriées
- Exécution parallèle pour les performances
- Validation des entrées pour la sécurité
- Gestion complète des erreurs pour la fiabilité
// Example: Complex search implementation
const searchConditions = [];
if (ctx.query.subject) {
searchConditions.push({
subject: { $regex: ctx.query.subject, $options: 'i' }
});
}
if (ctx.query.from) {
searchConditions.push({
$or: [
{ 'from.address': { $regex: ctx.query.from, $options: 'i' } },
{ 'from.name': { $regex: ctx.query.from, $options: 'i' } }
]
});
}
// Combine with AND logic
if (searchConditions.length > 0) {
query.$and = searchConditions;
}
Tip
Avantage développeur : grâce à l'API de recherche de Forward Email, vous pouvez créer des applications de messagerie qui rivalisent avec les clients de bureau en termes de fonctionnalités, tout en conservant la simplicité des API REST.
Architecture de performances ultra-rapide
Notre pile technique est conçue pour la vitesse et la fiabilité :
Benchmarks de performance
Pourquoi nous sommes ultra-rapides :
Composant | Technologie | Avantage de performance |
---|---|---|
Stockage | NVMe SSD | 10 fois plus rapide que le SATA traditionnel |
Base de données | SQLite + msgpackr | Latence réseau nulle, sérialisation optimisée |
Matériel | AMD Ryzen métal nu | Aucune surcharge de virtualisation |
Mise en cache | En mémoire + persistant | Temps de réponse inférieurs à la milliseconde |
Sauvegardes | Cloudflare R2 crypté | Fiabilité de niveau entreprise |
Chiffres de performance réels :
- Temps de réponse de l'API : < 50 ms en moyenne
- Récupération des messages : < 10 ms pour les messages en cache
- Opérations sur les dossiers : < 5 ms pour les opérations sur les métadonnées
- Synchronisation des contacts : Plus de 1 000 contacts/seconde
- Disponibilité : 99,99 % SLA avec infrastructure redondante
Architecture axée sur la confidentialité
Conception à connaissance nulle : vous seul avez accès à vos e-mails grâce à votre mot de passe IMAP ; nous ne pouvons pas les lire. Notre architecture à connaissance nulle garantit une confidentialité totale tout en offrant des performances exceptionnelles.
Pourquoi nous sommes différents : la comparaison complète
Principales limitations du fournisseur
Avantages du transfert d'e-mails
Fonctionnalité | Transférer un e-mail | Concours |
---|---|---|
CRUD complet | ✅ Création, lecture, mise à jour et suppression complètes de toutes les données | ❌ Opérations en lecture seule ou limitées |
API unifiée | ✅ Messages, dossiers, contacts, calendriers dans une seule API | ❌ API séparées ou fonctionnalités manquantes |
Authentification simple | ✅ Authentification de base avec des informations d'identification d'alias | ❌ OAuth complexe avec plusieurs portées |
Aucune limite de débit | ✅ Limites généreuses conçues pour des applications réelles | ❌ Des quotas restrictifs qui perturbent les flux de travail |
Auto-hébergement | ✅ Complete self-hosting option | ❌ Verrouillage du fournisseur uniquement |
Confidentialité | ✅ Zéro connaissance, crypté, privé | ❌ Exploration de données et préoccupations en matière de confidentialité |
Performance | ✅ Réponses inférieures à 50 ms, stockage NVMe | ❌ Latence du réseau, délais de limitation |
Le problème de la transparence de l'open source
ProtonMail et Tuta se présentent comme « open source » et « transparents », mais il s'agit d'un marketing trompeur qui viole les principes modernes de confidentialité.
Warning
Fausses déclarations de transparence : ProtonMail et Tuta vantent tous deux haut et fort leurs atouts « open source » tout en conservant leur code côté serveur le plus critique comme propriétaire et fermé.
La tromperie de ProtonMail :
- Allégations : « Nous sommes open source » est mis en avant dans les campagnes marketing
- Réalité : Le code du serveur est entièrement propriétaire : seules les applications clientes sont open source
- Impact : Les utilisateurs ne peuvent pas vérifier le chiffrement côté serveur, le traitement des données ni les déclarations de confidentialité
- Violation de la transparence : Impossible de vérifier les systèmes de traitement et de stockage des e-mails
Le marketing trompeur de Tuta :
- Allégations : « Courriel open source » comme argument de vente principal
- Réalité : L'infrastructure backend est à source fermée : seul le frontend est disponible
- Impact : Le chiffrement propriétaire empêche l'utilisation des protocoles de messagerie standard (IMAP/SMTP)
- Stratégie de verrouillage : Le chiffrement personnalisé impose une dépendance vis-à-vis du fournisseur
Pourquoi cela est important pour la confidentialité moderne :
En 2025, une véritable confidentialité exige une transparence totale. Lorsque les fournisseurs de messagerie se revendiquent « open source » mais cachent le code de leur serveur :
- Chiffrement invérifiable : Impossible de vérifier le cryptage de vos données.
- Pratiques de données cachées : Le traitement des données côté serveur reste une boîte noire.
- Sécurité basée sur la confiance : Vous devez faire confiance à leurs affirmations sans vérification.
- Lien fournisseur : Les systèmes propriétaires empêchent la portabilité des données.
La véritable transparence du transfert d'e-mails :
- ✅ Open source complet - Code serveur et client
- ✅ Auto-hébergement disponible - Exécutez votre propre instance
- ✅ Protocoles standards - Compatibilité IMAP, SMTP, CardDAV, CalDAV
- ✅ Sécurité auditable - Chaque ligne de code est inspectable
- ✅ Pas de dépendance fournisseur - Vos données, votre contrôle
Tip
L'open source véritable vous permet de vérifier chaque affirmation. Avec Forward Email, vous pouvez auditer notre chiffrement, examiner notre gestion des données et même exécuter votre propre instance. C'est la véritable transparence.
Plus de 30 exemples d'intégration concrets
1. Amélioration du formulaire de contact WordPress
Problème : Échecs de configuration SMTP de WordPress (631 problèmes GitHub) Solution : L'intégration directe de l'API contourne entièrement SMTP
// WordPress contact form that saves to Sent folder
await fetch('https://api.forwardemail.net/v1/messages', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa('contact@site.com:password'),
'Content-Type': 'application/json'
},
body: JSON.stringify({
to: [{ address: 'owner@site.com' }],
subject: 'Contact Form: ' + formData.subject,
text: formData.message,
folder: 'Sent'
})
});
2. Alternative à Zapier pour l'automatisation des e-mails
Problème : La limite de 10 e-mails/heure de Zapier et Échecs de détection IMAP Solution : Automatisation illimitée avec contrôle total des e-mails
// Auto-organize emails by sender domain
const messages = await fetch('/v1/messages?folder=INBOX');
for (const message of messages) {
const domain = message.from.split('@')[1];
await fetch(`/v1/messages/${message.id}`, {
method: 'PUT',
body: JSON.stringify({ folder: `Clients/${domain}` })
});
}
3. Synchronisation des e-mails CRM
Problème : Gestion manuelle des contacts entre l'adresse e-mail et systèmes CRM Solution : Synchronisation bidirectionnelle avec l'API de contact CardDAV
// Sync new email contacts to CRM
const newContacts = await fetch('/v1/contacts');
for (const contact of newContacts) {
await crmAPI.createContact({
name: contact.name,
email: contact.email,
source: 'email_api'
});
}
4. Traitement des commandes de commerce électronique
Problème : Traitement manuel des e-mails de commande pour plateformes de commerce électronique Solution : Pipeline de gestion automatisée des commandes
// Process order confirmation emails
const orders = await fetch('/v1/messages?folder=Orders');
const orderEmails = orders.filter(msg =>
msg.subject.includes('Order Confirmation')
);
for (const order of orderEmails) {
const orderData = parseOrderEmail(order.text);
await updateInventory(orderData);
await fetch(`/v1/messages/${order.id}`, {
method: 'PUT',
body: JSON.stringify({ folder: 'Orders/Processed' })
});
}
5. Intégration des tickets d'assistance
Problème : Fils de discussion dispersés sur plateformes d'assistance Solution : Suivi complet des fils de discussion
// Create support ticket from email thread
const messages = await fetch('/v1/messages?folder=Support');
const supportEmails = messages.filter(msg =>
msg.to.some(addr => addr.includes('support@'))
);
for (const email of supportEmails) {
const ticket = await supportSystem.createTicket({
subject: email.subject,
from: email.from,
body: email.text,
timestamp: email.date
});
}
6. Système de gestion des newsletters
Problème : Intégrations limitées de plateforme de newsletter Solution : Gestion complète du cycle de vie des abonnés
// Auto-manage newsletter subscriptions
const messages = await fetch('/v1/messages?folder=Newsletter');
const unsubscribes = messages.filter(msg =>
msg.subject.toLowerCase().includes('unsubscribe')
);
for (const msg of unsubscribes) {
await removeSubscriber(msg.from);
await fetch(`/v1/messages/${msg.id}`, {
method: 'PUT',
body: JSON.stringify({ folder: 'Newsletter/Unsubscribed' })
});
}
7. Gestion des tâches par e-mail
Problème : Boîte de réception surchargée et suivi des tâches Solution : Convertir les e-mails en tâches exploitables
// Create tasks from flagged emails
const messages = await fetch('/v1/messages?is_flagged=true');
for (const email of messages) {
await taskManager.createTask({
title: email.subject,
description: email.text,
assignee: email.to[0].address,
dueDate: extractDueDate(email.text)
});
}
8. Agrégation de courrier électronique multi-comptes
Problème : Gestion de plusieurs comptes de messagerie entre les fournisseurs Solution : Interface de boîte de réception unifiée
// Aggregate emails from multiple accounts
const accounts = ['work@domain.com', 'personal@domain.com'];
const allMessages = [];
for (const account of accounts) {
const messages = await fetch('/v1/messages', {
headers: { 'Authorization': getAuth(account) }
});
allMessages.push(...messages.map(m => ({ ...m, account })));
}
9. Tableau de bord d'analyse avancée des e-mails
Problème : Aucune information sur modèles de courrier électronique avec un filtrage sophistiqué Solution : Analyse personnalisée des e-mails grâce à des fonctionnalités de recherche avancées
// Generate comprehensive email analytics using advanced search
const analytics = {};
// Analyze email volume by sender domain
const messages = await fetch('/v1/messages');
analytics.senderDomains = analyzeSenderDomains(messages);
// Find large attachments consuming storage
const largeAttachments = await fetch('/v1/messages?has_attachments=true&min_size=1000000');
analytics.storageHogs = largeAttachments.map(msg => ({
subject: msg.subject,
from: msg.from,
size: msg.size
}));
// Analyze communication patterns with VIPs
const vipEmails = await fetch('/v1/messages?from=ceo@company.com');
const urgentVipEmails = await fetch('/v1/messages?from=ceo@company.com&subject=urgent');
analytics.vipCommunication = {
total: vipEmails.length,
urgent: urgentVipEmails.length,
urgencyRate: (urgentVipEmails.length / vipEmails.length) * 100
};
// Find unread emails by date range for follow-up
const lastWeek = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
const unreadRecent = await fetch(`/v1/messages?is_unread=true&since=${lastWeek}`);
analytics.followUpNeeded = unreadRecent.length;
// Analyze email sizes for optimization
const smallEmails = await fetch('/v1/messages?max_size=1000');
const mediumEmails = await fetch('/v1/messages?min_size=1000&max_size=50000');
const largeEmails = await fetch('/v1/messages?min_size=50000');
analytics.sizeDistribution = {
small: smallEmails.length,
medium: mediumEmails.length,
large: largeEmails.length
};
// Search for compliance-related emails
const complianceEmails = await fetch('/v1/messages?body=confidential&has_attachments=true');
analytics.complianceReview = complianceEmails.length;
10. Archivage intelligent des e-mails
Problème : Manuel organisation du courrier électronique Solution : Catégorisation intelligente des e-mails
// Auto-archive old emails by category
const messages = await fetch('/v1/messages');
const oldEmails = messages.filter(email =>
isOlderThan(email.date, 90) // 90 days
);
for (const email of oldEmails) {
const category = categorizeEmail(email);
await fetch(`/v1/messages/${email.id}`, {
method: 'PUT',
body: JSON.stringify({ folder: `Archive/${category}` })
});
}
11. Intégration e-mail-calendrier
Problème : Création manuelle de événement du calendrier à partir des e-mails Solution : Extraction et création automatiques d'événements
// Extract meeting details from emails
const messages = await fetch('/v1/messages?folder=Meetings');
const meetingEmails = messages.filter(email =>
email.subject.toLowerCase().includes('meeting')
);
for (const email of meetingEmails) {
const meetingData = extractMeetingInfo(email.text);
if (meetingData.date && meetingData.time) {
await fetch('/v1/calendars', {
method: 'POST',
body: JSON.stringify({
title: email.subject,
start: meetingData.datetime,
attendees: [email.from, ...email.to]
})
});
}
}
12. Sauvegarde et conformité des e-mails
Problème : Conservation des e-mails et exigences de conformité Solution : Sauvegarde automatique avec conservation des métadonnées
// Backup emails with full metadata
const allMessages = await fetch('/v1/messages');
const backup = {
timestamp: new Date(),
messages: allMessages.map(msg => ({
id: msg.id,
subject: msg.subject,
from: msg.from,
to: msg.to,
date: msg.date,
flags: msg.flags
}))
};
await saveToComplianceStorage(backup);
13. Gestion de contenu par e-mail
Problème : Gestion des soumissions de contenu par e-mail pour Plateformes CMS Solution : E-mail comme système de gestion de contenu
// Process content submissions from email
const messages = await fetch('/v1/messages?folder=Submissions');
const submissions = messages.filter(msg =>
msg.to.some(addr => addr.includes('submit@'))
);
for (const submission of submissions) {
const content = parseSubmission(submission.text);
await cms.createDraft({
title: submission.subject,
content: content.body,
author: submission.from
});
}
14. Gestion des modèles d'e-mails
Problème : modèles d'e-mails incohérent au sein de l'équipe Solution : Système de modèles centralisé avec API
// Send templated emails with dynamic content
const template = await getEmailTemplate('welcome');
await fetch('/v1/messages', {
method: 'POST',
body: JSON.stringify({
to: [{ address: newUser.email }],
subject: template.subject.replace('{{name}}', newUser.name),
html: template.html.replace('{{name}}', newUser.name),
folder: 'Sent'
})
});
15. Automatisation du flux de travail par e-mail
Problème : processus d'approbation manuel par e-mail Solution : Déclencheurs de workflow automatisés
// Process approval emails
const messages = await fetch('/v1/messages?folder=Approvals');
const approvals = messages.filter(msg =>
msg.subject.includes('APPROVAL')
);
for (const approval of approvals) {
const decision = parseApprovalDecision(approval.text);
await workflow.processApproval({
requestId: extractRequestId(approval.subject),
decision: decision,
approver: approval.from
});
}
16. Surveillance de la sécurité des e-mails
Problème : détection des menaces de sécurité manuel Solution : Analyse automatisée des menaces
// Monitor for suspicious emails
const recentEmails = await fetch('/v1/messages');
for (const email of recentEmails) {
const threatScore = analyzeThreat(email);
if (threatScore > 0.8) {
await fetch(`/v1/messages/${email.id}`, {
method: 'PUT',
body: JSON.stringify({ folder: 'Security/Quarantine' })
});
await alertSecurityTeam(email);
}
}
17. Collecte d'enquêtes par courrier électronique
Problème : Traitement manuel de réponse à l'enquête Solution : Agrégation automatique des réponses
// Collect and process survey responses
const messages = await fetch('/v1/messages?folder=Surveys');
const responses = messages.filter(msg =>
msg.subject.includes('Survey Response')
);
const surveyData = responses.map(email => ({
respondent: email.from,
responses: parseSurveyData(email.text),
timestamp: email.date
}));
await updateSurveyResults(surveyData);
18. Surveillance des performances des e-mails
Problème : Aucune visibilité sur performances de livraison des e-mails Solution : Mesures des e-mails en temps réel
// Monitor email delivery performance
const sentEmails = await fetch('/v1/messages?folder=Sent');
const deliveryStats = {
sent: sentEmails.length,
bounces: await countBounces(),
deliveryRate: calculateDeliveryRate()
};
await updateDashboard(deliveryStats);
19. Qualification des prospects par e-mail
Problème : notation des prospects manuel à partir des interactions par e-mail Solution : Pipeline de qualification automatisé des prospects
// Score leads based on email engagement
const prospects = await fetch('/v1/contacts');
for (const prospect of prospects) {
const messages = await fetch('/v1/messages');
const emails = messages.filter(msg =>
msg.from.includes(prospect.email)
);
const score = calculateEngagementScore(emails);
await crm.updateLeadScore(prospect.id, score);
}
20. Gestion de projet par e-mail
Problème : Mises à jour du projet dispersé dans les fils de discussion Solution : Plateforme de communication de projet centralisée
// Extract project updates from emails
const messages = await fetch('/v1/messages?folder=Projects');
const projectEmails = messages.filter(msg =>
msg.subject.includes('Project Update')
);
for (const email of projectEmails) {
const update = parseProjectUpdate(email.text);
await projectManager.addUpdate({
project: update.projectId,
author: email.from,
content: update.content
});
}
21. Gestion des stocks par e-mail
Problème : Mises à jour manuelles des stocks à partir des e-mails des fournisseurs Solution : Suivi automatisé des stocks à partir des notifications par e-mail
// Process inventory updates from supplier emails
const messages = await fetch('/v1/messages?folder=Suppliers');
const inventoryEmails = messages.filter(msg =>
msg.subject.includes('Inventory Update') || msg.subject.includes('Stock Alert')
);
for (const email of inventoryEmails) {
const inventoryData = parseInventoryUpdate(email.text);
await inventory.updateStock({
sku: inventoryData.sku,
quantity: inventoryData.quantity,
supplier: email.from,
timestamp: email.date
});
// Move to processed folder
await fetch(`/v1/messages/${email.id}`, {
method: 'PUT',
body: JSON.stringify({ folder: 'Suppliers/Processed' })
});
}
22. Traitement des factures par e-mail
Problème : traitement des factures manuel et intégration comptable Solution : Extraction automatique des factures et synchronisation du système comptable
// Extract invoice data from email attachments
const messages = await fetch('/v1/messages?folder=Invoices');
const invoiceEmails = messages.filter(msg =>
msg.subject.toLowerCase().includes('invoice') && msg.attachments.length > 0
);
for (const email of invoiceEmails) {
const invoiceData = await extractInvoiceData(email.attachments[0]);
await accounting.createInvoice({
vendor: email.from,
amount: invoiceData.total,
dueDate: invoiceData.dueDate,
items: invoiceData.lineItems
});
// Flag as processed
await fetch(`/v1/messages/${email.id}`, {
method: 'PUT',
body: JSON.stringify({ flags: ['\\Seen', '\\Flagged'] })
});
}
23. Inscription à un événement par e-mail
Problème : Traitement manuel de inscription à l'événement à partir des réponses par e-mail Solution : Gestion automatisée des participants et intégration du calendrier
// Process event registration emails
const messages = await fetch('/v1/messages?folder=Events');
const registrations = messages.filter(msg =>
msg.subject.includes('Registration') || msg.subject.includes('RSVP')
);
for (const registration of registrations) {
const attendeeData = parseRegistration(registration.text);
// Add to attendee list
await events.addAttendee({
event: attendeeData.eventId,
name: attendeeData.name,
email: registration.from,
dietary: attendeeData.dietaryRestrictions
});
// Create calendar event for attendee
await fetch('/v1/calendars', {
method: 'POST',
body: JSON.stringify({
title: attendeeData.eventName,
start: attendeeData.eventDate,
attendees: [registration.from]
})
});
}
24. Flux de travail d'approbation de documents par courrier électronique
Problème : Chaînes approbation des documents complexes par e-mail Solution : Suivi automatisé des approbations et gestion des versions des documents
// Track document approval workflow
const messages = await fetch('/v1/messages?folder=Approvals');
const approvalEmails = messages.filter(msg =>
msg.subject.includes('Document Approval')
);
for (const email of approvalEmails) {
const approval = parseApprovalEmail(email.text);
await documentSystem.updateApproval({
documentId: approval.documentId,
approver: email.from,
status: approval.decision, // 'approved', 'rejected', 'needs_changes'
comments: approval.comments,
timestamp: email.date
});
// Check if all approvals complete
const document = await documentSystem.getDocument(approval.documentId);
if (document.allApprovalsComplete) {
await documentSystem.finalizeDocument(approval.documentId);
}
}
25. Analyse des commentaires des clients par e-mail
Problème : Collecte manuelle des données commentaires des clients et analyse des sentiments Solution : Traitement automatisé des commentaires et suivi des sentiments
// Analyze customer feedback from emails
const messages = await fetch('/v1/messages?folder=Feedback');
const feedbackEmails = messages.filter(msg =>
msg.to.some(addr => addr.includes('feedback@'))
);
for (const email of feedbackEmails) {
const sentiment = await analyzeSentiment(email.text);
const category = categorizeFeeback(email.text);
await feedback.recordFeedback({
customer: email.from,
content: email.text,
sentiment: sentiment.score, // -1 to 1
category: category, // 'bug', 'feature', 'complaint', 'praise'
priority: calculatePriority(sentiment, category),
timestamp: email.date
});
// Auto-escalate negative feedback
if (sentiment.score < -0.5) {
await escalateToSupport(email);
}
}
26. Pipeline de recrutement par e-mail
Problème : recrutement manuel et suivi des candidats Solution : Gestion automatisée des candidats et planification des entretiens
// Process job application emails
const messages = await fetch('/v1/messages?folder=Careers');
const applications = messages.filter(msg =>
msg.subject.toLowerCase().includes('application') && msg.attachments.length > 0
);
for (const application of applications) {
const resume = await parseResume(application.attachments[0]);
const candidate = await ats.createCandidate({
name: resume.name,
email: application.from,
skills: resume.skills,
experience: resume.experience,
position: extractPosition(application.subject)
});
// Auto-schedule screening if qualified
if (candidate.qualificationScore > 0.7) {
await calendar.scheduleInterview({
candidateId: candidate.id,
type: 'phone_screening',
duration: 30
});
}
}
27. Traitement des notes de frais par courrier électronique
Problème : Soumission et approbation manuelles de rapport de dépenses Solution : Extraction et approbation automatisées des dépenses
// Process expense report emails
const messages = await fetch('/v1/messages?folder=Expenses');
const expenseEmails = messages.filter(msg =>
msg.subject.includes('Expense') && msg.attachments.length > 0
);
for (const email of expenseEmails) {
const receipts = await processReceipts(email.attachments);
const expenseReport = await expenses.createReport({
employee: email.from,
expenses: receipts.map(receipt => ({
amount: receipt.total,
category: receipt.category,
date: receipt.date,
merchant: receipt.merchant
})),
totalAmount: receipts.reduce((sum, r) => sum + r.total, 0)
});
// Auto-approve small amounts
if (expenseReport.totalAmount < 100) {
await expenses.approve(expenseReport.id);
} else {
await expenses.sendForApproval(expenseReport.id);
}
}
28. Rapports d'assurance qualité par e-mail
Problème : Suivi manuel des problèmes assurance qualité Solution : Gestion automatisée des problèmes d'assurance qualité et suivi des bugs
// Process QA bug reports from email
const messages = await fetch('/v1/messages?folder=QA');
const bugReports = messages.filter(msg =>
msg.subject.includes('Bug Report') || msg.subject.includes('QA Issue')
);
for (const report of bugReports) {
const bugData = parseBugReport(report.text);
const ticket = await bugTracker.createIssue({
title: report.subject,
description: bugData.description,
severity: bugData.severity,
steps: bugData.stepsToReproduce,
reporter: report.from,
attachments: report.attachments
});
// Auto-assign based on component
const assignee = await getComponentOwner(bugData.component);
await bugTracker.assign(ticket.id, assignee);
// Create calendar reminder for follow-up
await fetch('/v1/calendars', {
method: 'POST',
body: JSON.stringify({
title: `Follow up on ${ticket.id}`,
start: addDays(new Date(), 3),
attendees: [assignee]
})
});
}
29. Gestion des fournisseurs par e-mail
Problème : communication avec les fournisseurs manuel et suivi des contrats Solution : Gestion automatisée des relations fournisseurs
// Track vendor communications and contracts
const messages = await fetch('/v1/messages?folder=Vendors');
const vendorEmails = messages.filter(msg =>
isVendorEmail(msg.from)
);
for (const email of vendorEmails) {
const vendor = await vendors.getByEmail(email.from);
// Log communication
await vendors.logCommunication({
vendorId: vendor.id,
type: 'email',
subject: email.subject,
content: email.text,
timestamp: email.date
});
// Check for contract-related keywords
if (email.text.includes('contract') || email.text.includes('renewal')) {
await vendors.flagForContractReview({
vendorId: vendor.id,
emailId: email.id,
priority: 'high'
});
// Create task for procurement team
await tasks.create({
title: `Review contract communication from ${vendor.name}`,
assignee: 'procurement@company.com',
dueDate: addDays(new Date(), 2)
});
}
}
30. Surveillance des médias sociaux par e-mail
Problème : Suivi manuel des mentions réseaux sociaux et réponse Solution : Traitement automatisé des alertes sur les réseaux sociaux et coordination des réponses
// Process social media alerts from email notifications
const messages = await fetch('/v1/messages?folder=Social');
const socialAlerts = messages.filter(msg =>
msg.from.includes('alerts@') || msg.subject.includes('Social Mention')
);
for (const alert of socialAlerts) {
const mention = parseSocialMention(alert.text);
await socialMedia.recordMention({
platform: mention.platform,
author: mention.author,
content: mention.content,
sentiment: mention.sentiment,
reach: mention.followerCount,
url: mention.url
});
// Auto-escalate negative mentions with high reach
if (mention.sentiment < -0.5 && mention.followerCount > 10000) {
await socialMedia.escalateToTeam({
mentionId: mention.id,
priority: 'urgent',
assignee: 'social-media-manager@company.com'
});
// Create calendar reminder for immediate response
await fetch('/v1/calendars', {
method: 'POST',
body: JSON.stringify({
title: `Urgent: Respond to negative social mention`,
start: addMinutes(new Date(), 30),
attendees: ['social-media-manager@company.com']
})
});
}
}
Mise en route
1. Créez votre compte de transfert de courrier électronique
Inscrivez-vous sur forwardemail.net et vérifiez votre domaine.
2. Générer les informations d'identification de l'API
Votre e-mail d'alias et votre mot de passe servent d'identifiants API - aucune configuration supplémentaire n'est requise.
3. Effectuez votre premier appel API
# List your messages
curl -u "your-alias@domain.com:password" \
https://api.forwardemail.net/v1/messages
# Create a new contact
curl -u "your-alias@domain.com:password" \
-X POST \
-H "Content-Type: application/json" \
-d '{"fullName":"John Doe","emails":[{"value":"john@example.com"}]}' \
https://api.forwardemail.net/v1/contacts
4. Explorez la documentation
Visitez forwardemail.net/en/email-api pour une documentation API complète avec des exemples interactifs.
Ressources techniques
- Documentation complète de l'API - Spécification OpenAPI 3.0 interactive
- Guide d'auto-hébergement - Déploiement de Forward Email sur votre infrastructure
- Livre blanc sur la sécurité - Architecture technique et détails de sécurité
- Dépôt GitHub - Code source ouvert
- Assistance aux développeurs - Accès direct à notre équipe d'ingénierie
Prêt à révolutionner votre intégration de messagerie ? Commencez à créer avec l'API de Forward Email dès aujourd'hui et découvrez la première plateforme complète de gestion de messagerie conçue pour les développeurs.
Forward Email : Le service de messagerie qui maîtrise enfin les API.