Den første komplette e-mail-API: Hvordan videresendt e-mail revolutionerede e-mailhåndtering

TL;DR: Vi byggede verdens første komplette REST API til e-mailhåndtering med avancerede søgefunktioner, som ingen anden tjeneste tilbyder. Mens Gmail, Outlook og Apple tvinger udviklere ind i IMAP-helvede eller API'er med begrænsede hastigheder, leverer Forward Email lynhurtige CRUD-operationer til beskeder, mapper, kontakter og kalendere via en samlet REST-grænseflade med over 15 søgeparametre. Dette er den e-mail API-udviklere, som har ventet på.
Problemet med e-mail-API'et
E-mail-API'er er fundamentalt ødelagte. Punktum.
Alle større e-mailudbydere tvinger udviklere til et af to forfærdelige valg:
- IMAP-helvede: Brydning med en 30 år gammel protokol designet til desktopklienter, ikke moderne applikationer
- Forstyrrede API'er: Hastighedsbegrænsede, skrivebeskyttede, OAuth-komplekse API'er, der ikke kan administrere dine faktiske e-maildata
Resultatet? Udviklere enten opgiver e-mailintegration helt eller spilder uger på at bygge skrøbelige IMAP-wrappers, der konstant går i stykker.
Warning
Den beskidte hemmelighed: De fleste "e-mail-API'er" er blot afsendelses-API'er. Du kan ikke programmatisk organisere mapper, synkronisere kontakter eller administrere kalendere via en simpel REST-grænseflade. Indtil nu.
Hvad udviklere rent faktisk siger
Frustrationen er reel og dokumenteret overalt:
"Jeg prøvede for nylig at integrere Gmail i min app, og jeg brugte for meget tid på det. Jeg besluttede, at det ikke er værd at understøtte Gmail."
- Hacker News-udvikler, 147 upvotes
"Er alle e-mail-API'er middelmådige? De virker begrænsede eller restriktive på en eller anden måde."
"Hvorfor skal e-mailudvikling være elendig?"
- Reddit r/webdev, 89 kommentarer om udviklersmerter
"Hvad gør Gmail API mere effektiv end IMAP? En anden grund til, at Gmail API er meget mere effektiv, er, at den kun behøver at downloade hver besked én gang. Med IMAP skal hver besked downloades og indekseres..."
- Stack Overflow-spørgsmål med 47 opvotes
Beviserne er overalt:
- WordPress SMTP-problemer: 631 GitHub-problemer om leveringsfejl i e-mails
- Zapier-begrænsninger: Klager fra lokalsamfundet om grænser for 10 e-mails/time og IMAP-detektionsfejl
- IMAP API-projekter: Flere open source projekter eksisterer specifikt for at "konvertere IMAP til REST", fordi ingen udbyder tilbyder dette
- Gmail API-frustrationer: Stakoverløb har 4.847 spørgsmål tagget "gmail-api" med almindelige klager over hastighedsgrænser og kompleksitet
Videresend e-mails revolutionerende løsning
Vi er den første e-mailtjeneste, der tilbyder komplette CRUD-operationer for alle e-maildata via et samlet REST API.
Dette er ikke bare endnu en afsendelses-API. Dette er fuld programmatisk kontrol over:
- Beskeder: Opret, læs, opdater, slet, søg, flyt, marker
- Mapper: Fuld IMAP-mappehåndtering via REST-slutpunkter
- Kontakter: CardDAV kontaktlagring og synkronisering
- Kalendere: CalDAV kalenderbegivenheder og planlægning
Hvorfor vi byggede dette
Problemet: Alle e-mailudbydere behandler e-mail som en sort boks. Du kan sende e-mails, måske læse dem med kompleks OAuth, men du kan ikke rigtig administrere dine e-maildata programmatisk.
Vores vision: E-mail skal være lige så nem at integrere som ethvert moderne API. Ingen IMAP-biblioteker. Ingen OAuth-kompleksitet. Ingen mareridt med hastighedsgrænser. Bare simple REST-slutpunkter, der fungerer.
Resultatet: Den første e-mailtjeneste, hvor du kan bygge en komplet e-mailklient, CRM-integration eller automatiseringssystem udelukkende ved hjælp af HTTP-anmodninger.
Simpel godkendelse
Ingen OAuth-kompleksitet. Ingen app-specifikke adgangskoder. Kun dine aliasoplysninger:
curl -u "alias@yourdomain.com:password" \
https://api.forwardemail.net/v1/messages
20 slutpunkter, der ændrer alt
Beskeder (5 slutpunkter)
GET /v1/messages
- Vis beskeder med filtrering (?folder=
,?is_unread=
,?is_flagged=
)POST /v1/messages
- Send nye beskeder direkte til mapperGET /v1/messages/:id
- Hent specifik besked med fulde metadataPUT /v1/messages/:id
- Opdater besked (flag, mappe, læsestatus)DELETE /v1/messages/:id
- Slet besked permanent
Mapper (5 slutpunkter)
GET /v1/folders
- Vis alle mapper med abonnementsstatusPOST /v1/folders
- Opret ny mappe med brugerdefinerede egenskaberGET /v1/folders/:id
- Hent mappeoplysninger og beskedantalPUT /v1/folders/:id
- Opdater mappeegenskaber og abonnementDELETE /v1/folders/:id
- Slet mappe og håndter beskedflytning
Kontakter (5 slutpunkter)
GET /v1/contacts
- Liste over kontakter med søgning og pagineringPOST /v1/contacts
- Opret ny kontakt med fuld vCard-understøttelseGET /v1/contacts/:id
- Hent kontakt med alle felter og metadataPUT /v1/contacts/:id
- Opdater kontaktoplysninger med ETag-valideringDELETE /v1/contacts/:id
- Slet kontakt med kaskadehåndtering
Kalendere (5 slutpunkter)
GET /v1/calendars
- Vis kalenderbegivenheder med datofiltreringPOST /v1/calendars
- Opret kalenderbegivenhed med deltagere og gentagelseGET /v1/calendars/:id
- Hent begivenhedsdetaljer med tidszonehåndteringPUT /v1/calendars/:id
- Opdater begivenhed med konfliktdetektionDELETE /v1/calendars/:id
- Slet begivenhed med deltagernotifikationer
Avanceret søgning: Ingen anden tjeneste kan sammenlignes
Videresend e-mail er den eneste e-mailtjeneste, der tilbyder omfattende, programmatisk søgning på tværs af alle meddelelsesfelter via en REST API.
Mens andre udbydere i bedste fald tilbyder grundlæggende filtrering, har vi bygget den mest avancerede e-mail-søge-API nogensinde. Ingen Gmail API, Outlook API eller nogen anden tjeneste kommer i nærheden af vores søgemuligheder.
Søge-API-landskabet er i stykker
Søgebegrænsninger i Gmail API:
- ✅ Kun den grundlæggende
q
-parameter - ❌ Ingen feltspecifik søgning
- ❌ Ingen filtrering af datointerval
- ❌ Ingen størrelsesbaseret filtrering
- ❌ Ingen filtrering af vedhæftede filer
- ❌ Begrænset til Gmails søgesyntaks
Begrænsninger for søgning i Outlook API:
- ✅ Grundlæggende
$search
parameter - ❌ Ingen avanceret feltmålretning
- ❌ Ingen komplekse forespørgselskombinationer
- ❌ Aggressiv hastighedsbegrænsning
- ❌ Kompleks OData-syntaks kræves
Apple iCloud:
- ❌ Ingen API overhovedet
- ❌ Kun IMAP-søgning (hvis du kan få det til at virke)
ProtonMail og Tuta:
- ❌ Ingen offentlige API'er
- ❌ Ingen programmatiske søgefunktioner
Videresend e-mails revolutionerende søge-API
Vi tilbyder 15+ søgeparametre, som ingen anden tjeneste tilbyder:
Søgefunktion | Videresend e-mail | Gmail API | Outlook API | Andre |
---|---|---|---|---|
Feltspecifik søgning | ✅ Emne, brødtekst, fra, til, cc, overskrifter | ❌ | ❌ | ❌ |
Generel søgning i flere felter | ✅ ?search= på tværs af alle felter |
✅ Grundlæggende q= |
✅ Grundlæggende $search= |
❌ |
Filtrering af datointerval | ✅ ?since= & ?before= |
❌ | ❌ | ❌ |
Størrelsesbaseret filtrering | ✅ ?min_size= & ?max_size= |
❌ | ❌ | ❌ |
Filtrering af vedhæftede filer | ✅ ?has_attachments=true/false |
❌ | ❌ | ❌ |
Søgning i overskrift | ✅ ?headers=X-Priority |
❌ | ❌ | ❌ |
Søgning efter besked-ID | ✅ ?message_id=abc123 |
❌ | ❌ | ❌ |
Kombinerede filtre | ✅ Flere parametre med AND-logik | ❌ | ❌ | ❌ |
Uafhængig af store og små bogstaver | ✅ Alle søgninger | ✅ | ✅ | ❌ |
Understøttelse af paginering | ✅ Fungerer med alle søgeparametre | ✅ | ✅ | ❌ |
Eksempler på søgninger fra den virkelige verden
Find alle fakturaer fra sidste kvartal:
# 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
Søg efter store vedhæftede filer fra en specifik afsender:
# 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
Kompleks søgning i flere felter:
# 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"
Ydelsesfordele
Ydeevne ved søgning efter videresendelse af e-mail:
- ⚡ Responstider under 100 ms for komplekse søgninger
- 🔍 Regex-optimering med korrekt indeksering
- 📊 Parallel forespørgselsudførelse for antal og data
- 💾 Effektiv hukommelsesudnyttelse med lean-forespørgsler
Problemer med konkurrenternes præstation:
- 🐌 Gmail API: Hastigheden er begrænset til 250 kvotenheder pr. bruger pr. sekund
- 🐌 Outlook API: Aggressiv begrænsning med komplekse backoff-krav
- 🐌 Andre: Ingen API'er at sammenligne med
Søgefunktioner som ingen andre har
1. Headerspecifik søgning
# Find messages with specific headers
GET /v1/messages?headers=X-Priority:1
GET /v1/messages?headers=X-Spam-Score
2. Størrelsesbaseret intelligens
# 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. Vedhæftede arbejdsgange
# 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. Kombineret forretningslogik
# Find urgent flagged messages from VIPs with attachments
GET /v1/messages?is_flagged=true&from=ceo&has_attachments=true&subject=urgent
Hvorfor dette er vigtigt for udviklere
Byg applikationer, der tidligere var umulige:
- Avanceret e-mailanalyse: Analysér e-mailmønstre efter størrelse, afsender og indhold
- Intelligent e-mailhåndtering: Organiser automatisk baseret på komplekse kriterier
- Compliance og registrering: Find specifikke e-mails i henhold til juridiske krav
- Business Intelligence: Uddrag indsigt fra e-mailkommunikationsmønstre
- Automatiserede arbejdsgange: Udløs handlinger baseret på sofistikerede e-mailfiltre
Den tekniske implementering
Vores søge-API bruger:
- Regex-optimering med korrekte indekseringsstrategier
- Parallel udførelse for ydeevne
- Inputvalidering for sikkerhed
- Omfattende fejlhåndtering for pålidelighed
// 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
Fordel for udviklere: Med Forward Emails søge-API kan du bygge e-mail-applikationer, der kan konkurrere med desktopklienter i funktionalitet, samtidig med at du bevarer enkelheden ved REST API'er.
Lynhurtig ydeevnearkitektur
Vores tekniske stak er bygget til hastighed og pålidelighed:
Ydelsesbenchmarks
Hvorfor vi er lynhurtige:
Komponent | Teknologi | Ydelsesfordel |
---|---|---|
Opbevaring | NVMe SSD | 10 gange hurtigere end traditionel SATA |
Database | SQLite + msgpackr | Nul netværkslatens, optimeret serialisering |
Hardware | AMD Ryzen bart metal | Ingen virtualiseringsoverhead |
Caching | In-memory + persistent | Svartider på under et millisekund |
Sikkerhedskopier | Cloudflare R2 krypteret | Pålidelighed i virksomhedsklassen |
Faktiske præstationstal:
- API-svartid: < 50 ms i gennemsnit
- Hentning af beskeder: < 10 ms for cachelagrede beskeder
- Mappehandlinger: < 5 ms for metadatahandlinger
- Kontaktsynkronisering: 1000+ kontakter/sekund
- Oppetid: 99,99 % SLA med redundant infrastruktur
Arkitektur med fokus på privatliv
Zero-Knowledge Design: Kun du har adgang med din IMAP-adgangskode - vi kan ikke læse dine e-mails. Vores nul-vidensarkitektur sikrer fuldstændig privatliv og leverer samtidig en fremragende ydeevne.
Hvorfor vi er anderledes: Den komplette sammenligning
Vigtigste udbyderbegrænsninger
Fordele ved videresendelse af e-mail
Funktion | Videresend e-mail | Konkurrence |
---|---|---|
Komplet CRUD | ✅ Fuld oprettelse, læsning, opdatering og sletning af alle data | ❌ Skrivebeskyttet eller begrænsede operationer |
Ensartet API | ✅ Beskeder, mapper, kontakter, kalendere i én API | ❌ Separate API'er eller manglende funktioner |
Simpel godkendelse | ✅ Grundlæggende godkendelse med aliasoplysninger | ❌ Kompleks OAuth med flere scopes |
Ingen takstgrænser | ✅ Generøse grænser designet til virkelige anvendelser | ❌ Restriktive kvoter, der forstyrrer arbejdsgange |
Selvhosting | ✅ Complete self-hosting option | ❌ Kun leverandørlåsning |
Privatliv | ✅ Nulviden, krypteret, privat | ❌ Data mining og bekymringer om privatlivets fred |
Præstation | ✅ Responstider på under 50 ms, NVMe-lagring | ❌ Netværkslatenstid, forsinkelser i begrænsninger |
Problemet med gennemsigtighed i open source
ProtonMail og Tuta markedsfører sig selv som "open source" og "transparente", men dette er vildledende markedsføring, der overtræder moderne privatlivsprincipper.
Warning
Falske påstande om gennemsigtighed: Både ProtonMail og Tuta reklamerer tydeligt for deres "open source"-legitimationsoplysninger, mens de holder deres mest kritiske serversidekode proprietær og lukket.
ProtonMails bedrag:
- Påstande: "Vi er open source" fremtrædende omtalt i markedsføring
- Realitet: Serverkode er fuldstændig proprietær - kun klientapps er open source
- Virkning: Brugere kan ikke verificere serversidekryptering, datahåndtering eller privatlivskrav
- Overtrædelse af gennemsigtighed: Ingen mulighed for at revidere de faktiske e-mailbehandlings- og lagringssystemer
Tutas vildledende markedsføring:
- Påstande: "Open source e-mail" som et centralt salgsargument
- Realitet: Backend-infrastruktur er lukket kildekode - kun frontend er tilgængelig
- Virkning: Proprietær kryptering forhindrer standard e-mailprotokoller (IMAP/SMTP)
- Låsningsstrategi: Brugerdefineret kryptering tvinger leverandørafhængighed frem
Hvorfor dette er vigtigt for moderne privatliv:
I 2025 kræver ægte privatliv fuldstændig gennemsigtighed. Når e-mailudbydere hævder at være "open source", men skjuler deres serverkode:
- Uverificerbar kryptering: Du kan ikke kontrollere, hvordan dine data rent faktisk er krypteret
- Skjulte datapraksis: Datahåndtering på serversiden forbliver en sort boks
- Tillidsbaseret sikkerhed: Du skal stole på deres påstande uden verifikation
- Leverandørlåsning: Proprietære systemer forhindrer dataportabilitet
Videresendt e-mails sande gennemsigtighed:
- ✅ Fuldstændig open source - server- og klientkode
- ✅ Selvhosting tilgængelig - kør din egen instans
- ✅ Standardprotokoller - IMAP-, SMTP-, CardDAV- og CalDAV-kompatibilitet
- ✅ Sikkerhed, der kan kontrolleres - hver linje kode kan inspiceres
- ✅ Ingen leverandørbinding - dine data, din kontrol
Tip
Ægte open source betyder, at du kan verificere alle påstande. Med Videresend Email kan du revidere vores kryptering, gennemgå vores datahåndtering og endda køre din egen instans. Det er ægte gennemsigtighed.
30+ eksempler på integration fra den virkelige verden
1. Forbedring af WordPress-kontaktformular
Problem: WordPress SMTP-konfigurationsfejl (631 GitHub-problemer) Løsning: Direkte API-integration omgår SMTP fuldstændigt
// 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-alternativ til e-mailautomatisering
Problem: Zapiers grænse på 10 e-mails/time og IMAP-detektionsfejl Løsning: Ubegrænset automatisering med fuld kontrol over e-mail
// 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-mailsynkronisering
Problem: Manuel kontakthåndtering mellem e-mail og CRM-systemer Løsning: Tovejssynkronisering med CardDAV kontakt-API
// 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. Behandling af e-handelsordrer
Problem: Manuel ordrebehandling via e-mail for e-handelsplatforme Løsning: Automatiseret ordrehåndteringspipeline
// 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. Support af billetintegration
Problem: E-mailtråde spredt ud over helpdesk-platforme Løsning: Fuld sporing af e-mailtråde
// 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. Nyhedsbrevsstyringssystem
Problem: Begrænsede nyhedsbrevsplatform integrationer Løsning: Komplet administration af abonnentens livscyklus
// 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-mail-baseret opgavestyring
Problem: Overbelastning af indbakken og opgavesporing Løsning: Konverter e-mails til handlingsrettede opgaver
// 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. Aggregering af e-mails med flere konti
Problem: Administration af flere e-mailkonti på tværs af udbydere Løsning: Ensartet indbakkegrænseflade
// 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. Avanceret e-mailanalysedashboard
Problem: Ingen indsigt i e-mailmønstre med sofistikeret filtrering Løsning: Brugerdefineret e-mailanalyse ved hjælp af avancerede søgefunktioner
// 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. Smart e-mailarkivering
Problem: Manuel e-mailorganisation Løsning: Intelligent e-mailkategorisering
// 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. Integration af e-mail til kalender
Problem: Manuel oprettelse af kalenderbegivenhed fra e-mails Løsning: Automatisk udtrækning og oprettelse af hændelser
// 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-mail-backup og overholdelse af regler
Problem: E-mailopbevaring og overholdelse af regler Løsning: Automatiseret sikkerhedskopiering med bevarelse af 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-mail-baseret indholdsstyring
Problem: Administration af indholdsindsendelser via e-mail for CMS-platforme Løsning: E-mail som indholdsstyringssystem
// 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. Administration af e-mailskabeloner
Problem: Inkonsekvent e-mailskabeloner på tværs af teamet Løsning: Centraliseret skabelonsystem med 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-mail-baseret workflowautomatisering
Problem: Manuel godkendelsesprocesser via e-mail Løsning: Automatiserede arbejdsgangsudløsere
// 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. Overvågning af e-mailsikkerhed
Problem: Manuel detektion af sikkerhedstrusler Løsning: Automatiseret trusselsanalyse
// 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. Indsamling af e-mailbaserede undersøgelser
Problem: Manuel svar på undersøgelsen-behandling Løsning: Automatiseret svaraggregering
// 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. Overvågning af e-mail-ydeevne
Problem: Ingen indsigt i e-mail leveringsevne Løsning: E-mail-målinger i realtid
// 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-mailbaseret kundeemnekvalificering
Problem: Manuel lead scoring fra e-mailinteraktioner Løsning: Automatiseret pipeline til kvalificering af leads
// 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-mailbaseret projektstyring
Problem: Projektopdateringer spredt ud over e-mailtråde Løsning: Centraliseret projektkommunikationshub
// 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-mail-baseret lagerstyring
Problem: Manuelle lageropdateringer fra leverandør-e-mails Løsning: Automatiseret lageropfølgning fra e-mailnotifikationer
// 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-mailbaseret fakturabehandling
Problem: Manuel fakturabehandling og regnskabsintegration Løsning: Automatisk fakturaudtrækning og synkronisering af regnskabssystem
// 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-mailbaseret begivenhedsregistrering
Problem: Manuel tilmelding til begivenhed-behandling fra e-mailsvar Løsning: Automatiseret deltagerstyring og kalenderintegration
// 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-mail-baseret arbejdsgang til dokumentgodkendelse
Problem: Komplekse dokumentgodkendelse-kæder via e-mail Løsning: Automatiseret godkendelsessporing og dokumentversionering
// 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-mailbaseret kundefeedbackanalyse
Problem: Manuel kundefeedback-indsamling og sentimentanalyse Løsning: Automatiseret feedbackbehandling og sentimentsporing
// 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-mailbaseret rekrutteringspipeline
Problem: Manuel rekruttering og kandidatsporing Løsning: Automatiseret kandidatstyring og interviewplanlægning
// 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-mailbaseret behandling af udgiftsrapporter
Problem: Manuel indsendelse og godkendelse af udgiftsrapport Løsning: Automatiseret arbejdsgang til udtræk og godkendelse af udgifter
// 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-mailbaseret kvalitetssikringsrapportering
Problem: Manuel kvalitetssikring problemsporing Løsning: Automatiseret QA-problemhåndtering og fejlsporing
// 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-mail-baseret leverandørstyring
Problem: Manuel leverandørkommunikation og kontraktsporing Løsning: Automatiseret styring af leverandørrelationer
// 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-mailbaseret overvågning af sociale medier
Problem: Manuel sporing og svar af sociale medier omtaler Løsning: Automatiseret behandling af sociale medier-advarsler og koordinering af svar
// 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']
})
});
}
}
Introduktion
1. Opret din konto til videresendelse af e-mails
Tilmeld dig på forwardemail.net og bekræft dit domæne.
2. Generer API-legitimationsoplysninger
Din alias-e-mail og adgangskode fungerer som API-legitimationsoplysninger – ingen yderligere opsætning kræves.
3. Foretag dit første API-kald
# 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. Udforsk dokumentationen
Besøg forwardemail.net/en/email-api for at få komplet API-dokumentation med interaktive eksempler.
Tekniske ressourcer
- Komplet API-dokumentation - Interaktiv OpenAPI 3.0-specifikation
- Guide til selvhosting - Implementer videresendt e-mail på din infrastruktur
- Hvidbog om sikkerhed - Teknisk arkitektur og sikkerhedsdetaljer
- GitHub-arkivet - Open source-kodebase
- Udviklersupport - Direkte adgang til vores ingeniørteam
Klar til at revolutionere din e-mailintegration? Begynd at bygge med Forward Emails API i dag og oplev den første komplette e-mailadministrationsplatform designet til udviklere.
Videresend e-mail: E-mailtjenesten, der endelig får API'erne til at fungere korrekt.