De eerste complete e-mail-API: hoe Forward Email e-mailbeheer revolutioneerde

TL;DR: We hebben 's werelds eerste complete REST API voor e-mailbeheer gebouwd met geavanceerde zoekmogelijkheden die geen enkele andere dienst biedt. Terwijl Gmail, Outlook en Apple ontwikkelaars dwingen tot IMAP-hel of API's met beperkte snelheid, biedt Forward Email razendsnelle CRUD-bewerkingen voor berichten, mappen, contacten en agenda's via een uniforme REST-interface met meer dan 15 zoekparameters. Dit is de e-mail API waar ontwikkelaars op hebben gewacht.
Het e-mail API-probleem
E-mail-API's zijn fundamenteel defect. Punt.
Elke grote e-mailprovider dwingt ontwikkelaars tot een van de twee verschrikkelijke keuzes:
- IMAP Hell: worstelen met een 30 jaar oud protocol, ontworpen voor desktopclients, niet voor moderne applicaties
- Verminkte API's: API's met beperkte snelheid, alleen-lezen en OAuth-complexe API's die je e-mailgegevens niet kunnen beheren
Het resultaat? Ontwikkelaars laten e-mailintegratie volledig links liggen of verspillen weken aan het bouwen van kwetsbare IMAP-wrappers die voortdurend vastlopen.
Warning
Het vuile geheim: De meeste "e-mail-API's" zijn gewoon verzend-API's. Je kunt mappen niet programmatisch ordenen, contacten synchroniseren of agenda's beheren via een eenvoudige REST-interface. Tot nu toe.
Wat ontwikkelaars eigenlijk zeggen
De frustratie is reëel en overal gedocumenteerd:
"Ik heb onlangs geprobeerd Gmail in mijn app te integreren, maar ik heb er te veel tijd in gestoken. Ik heb besloten dat het de moeite niet waard is om Gmail te ondersteunen."
- Hacker News-ontwikkelaar, 147 upvotes
"Zijn alle e-mail-API's middelmatig? Ze lijken op de een of andere manier beperkt of beperkend."
"Waarom is e-mailontwikkeling zo slecht?"
- Reddit r/webdev, 89 reacties over ontwikkelaarsproblemen
"Wat maakt de Gmail API efficiënter dan IMAP? Een andere reden waarom de Gmail API veel efficiënter is, is dat elk bericht maar één keer hoeft te worden gedownload. Met IMAP moet elk bericht worden gedownload en geïndexeerd..."
- Stack Overflow-vraag met 47 upvotes
Het bewijs is overal:
- WordPress SMTP-problemen: 631 GitHub-problemen over mislukte e-mailbezorging
- Zapier-beperkingen: Klachten van de gemeenschap over limieten van 10 e-mails/uur en mislukte IMAP-detectie
- IMAP API-projecten: Meervoudig open source projecten bestaan specifiek om "IMAP naar REST te converteren", omdat geen enkele provider dit aanbiedt
- Frustraties met de Gmail API: Stapeloverloop heeft 4847 vragen met de tag "gmail-api" met veelvoorkomende klachten over snelheidslimieten en complexiteit
De revolutionaire oplossing van Forward Email
Wij zijn de eerste e-mailservice die complete CRUD-bewerkingen voor alle e-mailgegevens aanbiedt via een uniforme REST API.
Dit is niet zomaar een verzendende API. Dit is volledige programmatische controle over:
- Berichten: Maken, lezen, bijwerken, verwijderen, zoeken, verplaatsen, markeren
- Mappen: Volledig IMAP-mapbeheer via REST-eindpunten
- Contacten: KaartDAV contactopslag en -synchronisatie
- Agenda's: CalDAV agenda-afspraken en planning
Waarom we deze {#why-we-built-this} hebben gebouwd
Het probleem: Elke e-mailprovider behandelt e-mail als een black box. Je kunt e-mails versturen en misschien lezen met complexe OAuth, maar je kunt je e-mailgegevens niet echt programmatisch beheren.
Onze visie: E-mail moet net zo eenvoudig te integreren zijn als elke moderne API. Geen IMAP-bibliotheken. Geen OAuth-complexiteit. Geen nachtmerries over snelheidslimieten. Gewoon eenvoudige REST-eindpunten die werken.
Het resultaat: De eerste e-mailservice waarmee u een complete e-mailclient, CRM-integratie of automatiseringssysteem kunt bouwen met alleen HTTP-verzoeken.
Eenvoudige authenticatie
Geen OAuth-complexiteit. Geen app-specifieke wachtwoorden. Alleen uw aliasgegevens:
curl -u "alias@yourdomain.com:password" \
https://api.forwardemail.net/v1/messages
20 eindpunten die alles veranderen
Berichten (5 eindpunten)
GET /v1/messages
- Berichten weergeven met filtering (?folder=
,?is_unread=
,?is_flagged=
)POST /v1/messages
- Nieuwe berichten rechtstreeks naar mappen sturenGET /v1/messages/:id
- Specifiek bericht ophalen met volledige metadataPUT /v1/messages/:id
- Bericht bijwerken (vlaggen, map, leesstatus)DELETE /v1/messages/:id
- Bericht permanent verwijderen
Mappen (5 eindpunten)
GET /v1/folders
- Alle mappen met abonnementsstatus weergevenPOST /v1/folders
- Nieuwe map aanmaken met aangepaste eigenschappenGET /v1/folders/:id
- Mapdetails en berichtenaantallen ophalenPUT /v1/folders/:id
- Mapeigenschappen en abonnement bijwerkenDELETE /v1/folders/:id
- Map verwijderen en berichten verplaatsen
Contacten (5 eindpunten)
GET /v1/contacts
- Contacten weergeven met zoekfunctie en pagineringPOST /v1/contacts
- Nieuw contact aanmaken met volledige vCard-ondersteuningGET /v1/contacts/:id
- Contact ophalen met alle velden en metadataPUT /v1/contacts/:id
- Contactgegevens bijwerken met ETag-validatieDELETE /v1/contacts/:id
- Contact verwijderen met cascadeverwerking
Kalenders (5 eindpunten)
GET /v1/calendars
- Agenda-evenementen weergeven met datumfilteringPOST /v1/calendars
- Agenda-evenement aanmaken met deelnemers en herhalingGET /v1/calendars/:id
- Evenementdetails ophalen met tijdzonebeheerPUT /v1/calendars/:id
- Evenement bijwerken met conflictdetectieDELETE /v1/calendars/:id
- Evenement verwijderen met deelnemersmeldingen
Geavanceerd zoeken: Geen andere service is vergelijkbaar met
Forward Email is de enige e-mailservice die via een REST API een uitgebreide, programmatische zoekopdracht in alle berichtvelden biedt.
Terwijl andere providers hooguit basisfiltering bieden, hebben wij de meest geavanceerde e-mailzoek-API ooit ontwikkeld. Geen enkele Gmail API, Outlook API of andere dienst komt in de buurt van onze zoekmogelijkheden.
Het zoek-API-landschap is kapot
Beperkingen van Gmail API-zoekopdrachten:
- ✅ Alleen de basisparameter
q
- ❌ Geen veldspecifieke zoekopdracht
- ❌ Geen filtering op datumbereik
- ❌ Geen filtering op basis van grootte
- ❌ Geen filtering op bijlagen
- ❌ Beperkt tot de zoeksyntaxis van Gmail
Beperkingen van Outlook API-zoekopdrachten:
- ✅ Basisparameter
$search
- ❌ Geen geavanceerde veldtargeting
- ❌ Geen complexe querycombinaties
- ❌ Agressieve snelheidsbeperking
- ❌ Complexe OData-syntaxis vereist
Apple iCloud:
- ❌ Geen enkele API
- ❌ Alleen IMAP-zoekfunctie (als je het werkend krijgt)
ProtonMail en Tuta:
- ❌ Geen openbare API's
- ❌ Geen programmatische zoekmogelijkheden
Revolutionaire zoek-API van Forward Email
Wij bieden meer dan 15 zoekparameters die geen enkele andere service biedt:
Zoekmogelijkheid | E-mail doorsturen | Gmail API | Outlook API | Anderen |
---|---|---|---|---|
Veldspecifieke zoekopdracht | ✅ Onderwerp, hoofdtekst, van, aan, cc, kopteksten | ❌ | ❌ | ❌ |
Algemene zoekopdracht met meerdere velden | ✅ ?search= in alle velden |
✅ Basis q= |
✅ Basis $search= |
❌ |
Datumbereikfiltering | ✅ ?since= & ?before= |
❌ | ❌ | ❌ |
Filtering op basis van grootte | ✅ ?min_size= & ?max_size= |
❌ | ❌ | ❌ |
Bijlagefiltering | ✅ ?has_attachments=true/false |
❌ | ❌ | ❌ |
Koptekst zoeken | ✅ ?headers=X-Priority |
❌ | ❌ | ❌ |
Bericht-ID zoeken | ✅ ?message_id=abc123 |
❌ | ❌ | ❌ |
Gecombineerde filters | ✅ Meerdere parameters met EN-logica | ❌ | ❌ | ❌ |
Hoofdlettergevoelig | ✅ Alle zoekopdrachten | ✅ | ✅ | ❌ |
Ondersteuning voor pagina-indeling | ✅ Werkt met alle zoekparameters | ✅ | ✅ | ❌ |
Voorbeelden van zoekopdrachten in de echte wereld
Vind alle facturen van het afgelopen kwartaal:
# 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
Zoeken naar grote bijlagen van een specifieke afzender:
# 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
Complexe zoekopdracht in meerdere velden:
# 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"
Prestatievoordelen
Prestaties van doorstuur-e-mailzoekopdrachten:
- ⚡ Responstijden onder de 100 ms voor complexe zoekopdrachten
- 🔍 Regex-optimalisatie met correcte indexering
- 📊 Parallelle query-uitvoering voor tellingen en gegevens
- 💾 Efficiënt geheugengebruik met lean query's
Problemen met de prestaties van concurrenten:
- 🐌 Gmail API: Snelheid beperkt tot 250 quota-eenheden per gebruiker per seconde
- 🐌 Outlook API: Agressieve throttling met complexe backoff-vereisten
- 🐌 Overige: Geen API's om mee te vergelijken
Zoekfuncties die niemand anders heeft
1. Header-specifieke zoekopdracht
# Find messages with specific headers
GET /v1/messages?headers=X-Priority:1
GET /v1/messages?headers=X-Spam-Score
2. Op grootte gebaseerde intelligentie
# 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. Op bijlagen gebaseerde workflows
# 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. Gecombineerde bedrijfslogica
# Find urgent flagged messages from VIPs with attachments
GET /v1/messages?is_flagged=true&from=ceo&has_attachments=true&subject=urgent
Waarom dit belangrijk is voor ontwikkelaars
Bouw applicaties die voorheen onmogelijk waren:
- Geavanceerde e-mailanalyse: Analyseer e-mailpatronen op basis van grootte, afzender en inhoud
- Intelligent e-mailbeheer: Organiseer automatisch op basis van complexe criteria
- Compliance en detectie: Vind specifieke e-mails die voldoen aan wettelijke vereisten
- Business intelligence: Haal inzichten uit e-mailcommunicatiepatronen
- Geautomatiseerde workflows: Activeer acties op basis van geavanceerde e-mailfilters
De technische implementatie
Onze zoek-API maakt gebruik van:
- Regex-optimalisatie met de juiste indexeringsstrategieën
- Parallelle uitvoering voor prestaties
- Invoervalidatie voor beveiliging
- Uitgebreide foutverwerking voor betrouwbaarheid
// 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
Ontwikkelaarsvoordeel: Met de zoek-API van Forward Email kunt u e-mailapplicaties bouwen die qua functionaliteit concurreren met desktopclients, terwijl u de eenvoud van REST API's behoudt.
Razendsnelle prestatie-architectuur
Onze technische stack is gebouwd voor snelheid en betrouwbaarheid:
Prestatiebenchmarks
Waarom we razendsnel zijn:
Onderdeel | Technologie | Prestatievoordeel |
---|---|---|
Opslag | NVMe SSD | 10x sneller dan traditionele SATA |
Databank | SQLite + msgpackr | Geen netwerklatentie, geoptimaliseerde serialisatie |
Hardware | AMD Ryzen blank metaal | Geen virtualisatie-overhead |
Cachen | In het geheugen + persistent | Responstijden van minder dan een milliseconde |
Back-ups | Cloudflare R2 gecodeerd | Betrouwbaarheid op ondernemingsniveau |
Echte prestatiecijfers:
- API-responstijd: gemiddeld < 50 ms
- Berichtophaling: < 10 ms voor gecachte berichten
- Mapbewerkingen: < 5 ms voor metadatabewerkingen
- Contactsynchronisatie: meer dan 1000 contacten/seconde
- Uptime: 99,99% SLA met redundante infrastructuur
Privacy-eerste architectuur
Zero-Knowledge Design: Alleen jij hebt toegang met je IMAP-wachtwoord - wij kunnen je e-mails niet lezen. Onze zero-knowledge architectuur garandeert volledige privacy en levert tegelijkertijd razendsnelle prestaties.
Waarom wij anders zijn: de volledige vergelijking
Belangrijke beperkingen voor aanbieders
Voordelen van doorsturen van e-mail
Functie | E-mail doorsturen | Concurrentie |
---|---|---|
Volledige CRUD | ✅ Volledig aanmaken, lezen, bijwerken en verwijderen voor alle gegevens | ❌ Alleen-lezen of beperkte bewerkingen |
Geünificeerde API | ✅ Berichten, mappen, contacten, agenda's in één API | ❌ Afzonderlijke API's of ontbrekende functies |
Eenvoudige autorisatie | ✅ Basisverificatie met alias-inloggegevens | ❌ Complexe OAuth met meerdere scopes |
Geen tarieflimieten | ✅ Ruime limieten ontworpen voor echte toepassingen | ❌ Beperkende quota's die workflows verstoren |
Zelfhosting | ✅ Complete self-hosting option | ❌ Alleen leveranciersbinding |
Privacy | ✅ Zero-knowledge, gecodeerd, privé | ❌ Data mining en privacyproblemen |
Prestatie | ✅ Reacties van minder dan 50 ms, NVMe-opslag | ❌ Netwerklatentie, vertragingen door throttling |
Het probleem van open-source transparantie
ProtonMail en Tuta profileren zichzelf als "open source" en "transparant", maar dit is misleidende marketing die in strijd is met de moderne privacybeginselen.
Warning
Onjuiste transparantieclaims: Zowel ProtonMail als Tuta adverteren prominent met hun "open source"-referenties, terwijl hun belangrijkste server-side code eigendom en gesloten blijft.
ProtonMail's Bedrog:
- Claims: "Wij zijn open source" prominent in marketing
- Realiteit: De servercode is volledig eigendom - alleen client-apps zijn open source
- Impact: Gebruikers kunnen server-side encryptie, gegevensverwerking of privacyclaims niet verifiëren
- Transparantieschending: Geen manier om de daadwerkelijke e-mailverwerkings- en opslagsystemen te controleren
Tuta's misleidende marketing:
- Claims: "Open source e-mail" als belangrijk verkoopargument
- Realiteit: Backend-infrastructuur is gesloten bron - alleen frontend is beschikbaar
- Impact: Eigen encryptie voorkomt standaard e-mailprotocollen (IMAP/SMTP)
- Lock-in-strategie: Aangepaste encryptie dwingt tot leveranciersafhankelijkheid
Waarom dit belangrijk is voor moderne privacy:
In 2025 vereist echte privacy volledige transparantie. Wanneer e-mailproviders "open source" claimen, maar hun servercode verbergen:
- Onverifieerbare encryptie: U kunt niet controleren hoe uw gegevens daadwerkelijk zijn versleuteld
- Verborgen datapraktijken: Server-side dataverwerking blijft een black box
- Op vertrouwen gebaseerde beveiliging: U moet hun beweringen zonder verificatie vertrouwen
- Leverancierslock-in: Eigen systemen verhinderen dataportabiliteit
Echte transparantie van Forward Email:
- ✅ Volledig open source - server- en clientcode
- ✅ Zelfhosting beschikbaar - voer uw eigen instance uit
- ✅ Standaardprotocollen - IMAP, SMTP, CardDAV, CalDAV-compatibiliteit
- ✅ Controleerbare beveiliging - elke regel code kan worden gecontroleerd
- ✅ Geen vendor lock-in - uw gegevens, uw controle
Tip
Echte open source betekent dat u elke claim kunt verifiëren. Met Forward Email kunt u onze encryptie controleren, onze gegevensverwerking bekijken en zelfs uw eigen instance uitvoeren. Dat is échte transparantie.
30+ Real-world integratievoorbeelden
1. Verbetering van WordPress-contactformulier
Probleem: WordPress SMTP-configuratiefouten (631 GitHub-problemen) Oplossing: Directe API-integratie omzeilt SMTP volledig
// 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. Zapier-alternatief voor e-mailautomatisering
Probleem: Zapier's limiet van 10 e-mails/uur en IMAP-detectiefouten Oplossing: Onbeperkte automatisering met volledige e-mailcontrole
// 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. CRM-e-mailsynchronisatie
Probleem: Handmatig contactbeheer tussen e-mail en CRM-systemen Oplossing: Tweerichtingssynchronisatie met de contact-API van KaartDAV
// 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. E-commerce orderverwerking
Probleem: Handmatige orderverwerking via e-mail voor e-commerceplatforms Oplossing: Geautomatiseerde orderbeheerpijplijn
// 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. Integratie van supporttickets
Probleem: E-mailthreads verspreid over helpdeskplatforms Oplossing: Volledige e-mailthreadtracking
// 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. Nieuwsbriefbeheersysteem
Probleem: Beperkte nieuwsbriefplatform-integraties Oplossing: Volledig beheer van de levenscyclus van abonnees
// 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. E-mailgebaseerd takenbeheer
Probleem: Overvolle inbox en taakregistratie Oplossing: E-mails omzetten in uitvoerbare taken
// 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. E-mailaggregatie voor meerdere accounts
Probleem: meerdere e-mailaccounts beheren voor meerdere providers Oplossing: Geïntegreerde inboxinterface
// 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. Geavanceerd dashboard voor e-mailanalyse
Probleem: Geen inzicht in e-mailpatronen met geavanceerde filtering Oplossing: Aangepaste e-mailanalyse met geavanceerde zoekmogelijkheden
// 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. Slimme e-mailarchivering
Probleem: Handmatige e-mailorganisatie Oplossing: Intelligente e-mailcategorisering
// 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. Integratie van e-mail naar agenda
Probleem: Handmatige aanmaak van kalendergebeurtenis vanuit e-mails Oplossing: Automatische extractie en aanmaak van gebeurtenissen
// 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. E-mailback-up en naleving
Probleem: E-mailbehoud en nalevingsvereisten Oplossing: Geautomatiseerde back-up met behoud van metadata
// 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. E-mailgebaseerd contentbeheer
Probleem: Het beheren van contentinzendingen via e-mail voor CMS-platformen Oplossing: E-mail als contentmanagementsysteem
// 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. Beheer van e-mailsjablonen
Probleem: Inconsistente e-mailsjablonen binnen het team Oplossing: Gecentraliseerd templatesysteem met 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. E-mailgebaseerde workflowautomatisering
Probleem: Handmatige goedkeuringsprocessen via e-mail Oplossing: Geautomatiseerde workflowtriggers
// 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. E-mailbeveiligingsbewaking
Probleem: Handmatige detectie van beveiligingsbedreigingen Oplossing: Geautomatiseerde bedreigingsanalyse
// 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. E-mailgebaseerde enquêteverzameling
Probleem: Handmatige verwerking van enquêterespons Oplossing: Geautomatiseerde responsaggregatie
// 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. E-mailprestatiebewaking
Probleem: Geen inzicht in e-mailbezorgingsprestaties Oplossing: Realtime e-mailstatistieken
// 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. E-mailgebaseerde leadkwalificatie
Probleem: Handmatige lead scoring vanuit e-mailinteracties Oplossing: Geautomatiseerde leadkwalificatiepijplijn
// 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. E-mailgebaseerd projectbeheer
Probleem: Projectupdates verspreid over e-mailthreads Oplossing: Gecentraliseerde projectcommunicatiehub
// 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. E-mailgebaseerd voorraadbeheer
Probleem: Handmatige voorraadupdates vanuit e-mails van leveranciers Oplossing: Geautomatiseerde voorraadregistratie vanuit e-mailmeldingen
// 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. E-mailgebaseerde factuurverwerking
Probleem: Handmatige integratie van factuurverwerking en boekhoudsysteem Oplossing: Geautomatiseerde factuurextractie en synchronisatie met boekhoudsystemen
// 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. E-mailgebaseerde evenementregistratie
Probleem: Handmatige verwerking van evenementregistratie vanuit e-mailreacties Oplossing: Geautomatiseerd deelnemersbeheer en agenda-integratie
// 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. E-mailgebaseerde workflow voor documentgoedkeuring
Probleem: Complexe documentgoedkeuring-ketens via e-mail Oplossing: Geautomatiseerde goedkeuringsregistratie en documentversiebeheer
// 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. E-mailgebaseerde klantfeedbackanalyse
Probleem: Handmatige verzameling van feedback van klanten en sentimentanalyse Oplossing: Geautomatiseerde feedbackverwerking en sentimenttracking
// 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. E-mailgebaseerde wervingspijplijn
Probleem: Handmatige werving en kandidatentracking Oplossing: Geautomatiseerd kandidatenbeheer en interviewplanning
// 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. E-mailgebaseerde verwerking van onkostennota's
Probleem: Handmatige indiening en goedkeuring van onkostennota Oplossing: Geautomatiseerde workflow voor het extraheren en goedkeuren van onkosten
// 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. E-mailgebaseerde kwaliteitsborgingsrapportage
Probleem: Handmatige kwaliteitsborging issue tracking Oplossing: Geautomatiseerd QA issue management en bug tracking
// 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. E-mailgebaseerd leveranciersbeheer
Probleem: Handmatige leverancierscommunicatie en contracttracking Oplossing: Geautomatiseerd leveranciersrelatiebeheer
// 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. E-mailgebaseerde monitoring van sociale media
Probleem: Handmatige tracking en reactie van sociale media-vermeldingen Oplossing: Geautomatiseerde verwerking van social media-meldingen en coördinatie van reacties
// 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']
})
});
}
}
Aan de slag
1. Maak uw doorstuur-e-mailaccount
Meld u aan op forwardemail.net en verifieer uw domein.
2. API-referenties genereren
Uw alias-e-mailadres en wachtwoord dienen als API-inloggegevens. Er is geen aanvullende installatie vereist.
3. Maak uw eerste API-aanroep
# 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. Verken de documentatie
Bezoek forwardemail.net/en/email-api voor volledige API-documentatie met interactieve voorbeelden.
Technische bronnen
- Volledige API-documentatie - Interactieve OpenAPI 3.0-specificatie
- Zelfhostinggids - Implementeer Forward Email op uw infrastructuur
- Beveiligingswhitepaper - Technische architectuur en beveiligingsdetails
- GitHub-repository - Open-source codebase
- Ontwikkelaarsondersteuning - Directe toegang tot ons engineeringteam
Klaar om uw e-mailintegratie te revolutioneren? Begin vandaag nog met bouwen met de API van Forward Email en ervaar het eerste complete e-mailbeheerplatform dat speciaal is ontworpen voor ontwikkelaars.
Forward Email: De e-mailservice die eindelijk API's op orde heeft.