Det første komplette e-post-API-et: Hvordan videresendt e-post revolusjonerte e-posthåndtering

TL;DR: Vi bygde verdens første komplette REST API for e-postadministrasjon med avanserte søkefunksjoner som ingen andre tjenester tilbyr. Mens Gmail, Outlook og Apple tvinger utviklere inn i IMAP-helvete eller hastighetsbegrensede API-er, leverer Forward Email lynraske CRUD-operasjoner for meldinger, mapper, kontakter og kalendere gjennom et enhetlig REST-grensesnitt med over 15 søkeparametere. Dette er e-post-API-utviklerne har ventet på.
Problemet med e-post-API-et
E-post-API-er er fundamentalt ødelagte. Punktum.
Alle større e-postleverandører tvinger utviklere til ett av to forferdelige valg:
- IMAP-helvete: Bryting med en 30 år gammel protokoll designet for skrivebordsklienter, ikke moderne applikasjoner
- Forkrøplede API-er: Hastighetsbegrensede, skrivebeskyttede, OAuth-komplekse API-er som ikke kan administrere dine faktiske e-postdata
Resultatet? Utviklere enten forlater e-postintegrasjon helt eller kaster bort uker på å bygge skjøre IMAP-innpakninger som stadig vekk går i stykker.
Warning
Den skitne hemmeligheten: De fleste «e-post-API-er» er bare sendende API-er. Du kan ikke programmatisk organisere mapper, synkronisere kontakter eller administrere kalendere via et enkelt REST-grensesnitt. Før nå.
Hva utviklere faktisk sier
Frustrasjonen er reell og dokumentert overalt:
«Jeg prøvde nylig å integrere Gmail i appen min, og jeg brukte for mye tid på det. Jeg bestemte meg for at det ikke er verdt å støtte Gmail.»
- Hacker News-utvikler, 147 oppstemmer
"Er alle e-post-API-er middelmådige? De virker begrensede eller restriktive på en eller annen måte."
"Hvorfor må e-postutvikling være dårlig?"
- Reddit r/webdev, 89 kommentarer om utviklersmerte
"Hva gjør Gmail API mer effektivt enn IMAP? En annen grunn til at Gmail API er mye mer effektivt, er fordi det bare trenger å laste ned hver melding én gang. Med IMAP må hver melding lastes ned og indekseres..."
- Spørsmål om Stack Overflow med 47 oppstemmer
Bevisene er overalt:
- WordPress SMTP-problemer: 631 GitHub-problemer om leveringsfeil i e-post
- Zapier-begrensninger: Klager fra lokalsamfunnet om grenser for 10 e-poster/time og feil i IMAP-deteksjon
- IMAP API-prosjekter: Flere åpen kildekode prosjekter eksisterer spesifikt for å "konvertere IMAP til REST" fordi ingen leverandører tilbyr dette
- Frustrasjoner med Gmail API: Stack Overflow har 4847 spørsmål merket med "gmail-api" med vanlige klager om hastighetsgrenser og kompleksitet
Den revolusjonerende løsningen for videresending av e-post
Vi er den første e-posttjenesten som tilbyr komplette CRUD-operasjoner for alle e-postdata gjennom et enhetlig REST API.
Dette er ikke bare enda et sendende API. Dette er fullstendig programmatisk kontroll over:
- Meldinger: Opprett, les, oppdater, slett, søk, flytt, flagg
- Mapper: Full IMAP-mappeadministrasjon via REST-endepunkter
- Kontakter: CardDAV kontaktlagring og synkronisering
- Kalendere: CalDAV kalenderhendelser og planlegging
Hvorfor vi bygde dette
Problemet: Alle e-postleverandører behandler e-post som en svart boks. Du kan sende e-poster, kanskje lese dem med kompleks OAuth, men du kan ikke administrere e-postdataene dine programmatisk.
Vår visjon: E-post skal være like enkel å integrere som et hvilket som helst moderne API. Ingen IMAP-biblioteker. Ingen OAuth-kompleksitet. Ingen mareritt med hastighetsbegrensninger. Bare enkle REST-endepunkter som fungerer.
Resultatet: Den første e-posttjenesten der du kan bygge en komplett e-postklient, CRM-integrasjon eller automatiseringssystem ved kun å bruke HTTP-forespørsler.
Enkel autentisering
Ingen OAuth-kompleksitet. Ingen appspesifikke passord. Bare alias-legitimasjonen din:
curl -u "alias@yourdomain.com:password" \
https://api.forwardemail.net/v1/messages
20 endepunkter som forandrer alt
Meldinger (5 endepunkter)
GET /v1/messages
- List meldinger med filtrering (?folder=
,?is_unread=
,?is_flagged=
)POST /v1/messages
- Send nye meldinger direkte til mapperGET /v1/messages/:id
- Hent spesifikk melding med full metadataPUT /v1/messages/:id
- Oppdater melding (flagg, mappe, lesestatus)DELETE /v1/messages/:id
- Slett melding permanent
Mapper (5 endepunkter)
GET /v1/folders
– List opp alle mapper med abonnementsstatusPOST /v1/folders
– Opprett ny mappe med tilpassede egenskaperGET /v1/folders/:id
– Hent mappedetaljer og antall meldingerPUT /v1/folders/:id
– Oppdater mappeegenskaper og abonnementDELETE /v1/folders/:id
– Slett mappe og håndter flytting av meldinger
Kontakter (5 endepunkter)
GET /v1/contacts
- Liste over kontakter med søk og pagineringPOST /v1/contacts
- Opprett ny kontakt med full vCard-støtteGET /v1/contacts/:id
- Hent kontakt med alle felt og metadataPUT /v1/contacts/:id
- Oppdater kontaktinformasjon med ETag-valideringDELETE /v1/contacts/:id
- Slett kontakt med kaskadehåndtering
Kalendere (5 endepunkter)
GET /v1/calendars
- List opp kalenderhendelser med datofiltreringPOST /v1/calendars
- Opprett kalenderhendelse med deltakere og regelmessighetGET /v1/calendars/:id
- Hent hendelsesdetaljer med tidssonehåndteringPUT /v1/calendars/:id
- Oppdater hendelse med konfliktdeteksjonDELETE /v1/calendars/:id
- Slett hendelse med deltakervarsler
Avansert søk: Ingen annen tjeneste kan sammenlignes
Videresend e-post er den eneste e-posttjenesten som tilbyr omfattende, programmatisk søk på tvers av alle meldingsfelt gjennom et REST API.
Mens andre leverandører i beste fall tilbyr grunnleggende filtrering, har vi bygget det mest avanserte API-et for e-postsøk som noensinne er laget. Ingen Gmail API, Outlook API eller noen annen tjeneste kommer i nærheten av våre søkemuligheter.
Søke-API-landskapet er ødelagt
Begrensninger for søk i Gmail API:
- ✅ Kun grunnleggende
q
-parameter - ❌ Ingen feltspesifikk søk
- ❌ Ingen filtrering av datointervall
- ❌ Ingen størrelsesbasert filtrering
- ❌ Ingen filtrering av vedlegg
- ❌ Begrenset til Gmails søkesyntaks
Begrensninger for søk i Outlook API:
- ✅ Grunnleggende
$search
-parameter - ❌ Ingen avansert feltmålretting
- ❌ Ingen komplekse spørrekombinasjoner
- ❌ Aggressiv hastighetsbegrensning
- ❌ Kompleks OData-syntaks kreves
Apple iCloud:
- ❌ Ingen API overhodet
- ❌ Kun IMAP-søk (hvis du får det til å fungere)
ProtonMail og Tuta:
- ❌ Ingen offentlige API-er
- ❌ Ingen programmatiske søkemuligheter
Videresend e-posts revolusjonerende søke-API
Vi tilbyr over 15 søkeparametere som ingen annen tjeneste tilbyr:
Søkefunksjon | Videresend e-post | Gmail API | Outlook API | Andre |
---|---|---|---|---|
Feltspesifikt søk | ✅ Emne, brødtekst, fra, til, kopi, overskrifter | ❌ | ❌ | ❌ |
Generelt søk i flere felt | ✅ ?search= på tvers av alle felt |
✅ Grunnleggende q= |
✅ Grunnleggende $search= |
❌ |
Filtrering av datoperiode | ✅ ?since= & ?before= |
❌ | ❌ | ❌ |
Størrelsesbasert filtrering | ✅ ?min_size= & ?max_size= |
❌ | ❌ | ❌ |
Filtrering av vedlegg | ✅ ?has_attachments=true/false |
❌ | ❌ | ❌ |
Søk i overskrift | ✅ ?headers=X-Priority |
❌ | ❌ | ❌ |
Søk etter meldings-ID | ✅ ?message_id=abc123 |
❌ | ❌ | ❌ |
Kombinerte filtre | ✅ Flere parametere med AND-logikk | ❌ | ❌ | ❌ |
Uavhengig av store og små bokstaver | ✅ Alle søk | ✅ | ✅ | ❌ |
Støtte for paginering | ✅ Fungerer med alle søkeparametere | ✅ | ✅ | ❌ |
Eksempler på søk fra den virkelige verden
Finn alle fakturaer fra forrige 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øk etter store vedlegg fra en bestemt avsender:
# 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
Komplekst flerfeltssøk:
# 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"
Ytelsesfordeler
Ytelse for søk etter videresending av e-post:
- ⚡ Responstider under 100 ms for komplekse søk
- 🔍 Regex-optimalisering med riktig indeksering
- 📊 Parallell spørreutførelse for antall og data
- 💾 Effektiv minnebruk med lean-spørringer
Problemer med konkurrentenes ytelse:
- 🐌 Gmail API: Hastigheten er begrenset til 250 kvoteenheter per bruker per sekund
- 🐌 Outlook API: Aggressiv begrensning med komplekse krav til tilbakekalling
- 🐌 Andre: Ingen API-er å sammenligne mot
Søkefunksjoner ingen andre har
1. Topptekstspesifikt søk
# Find messages with specific headers
GET /v1/messages?headers=X-Priority:1
GET /v1/messages?headers=X-Spam-Score
2. Størrelsesbasert 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. Vedleggsbaserte arbeidsflyter
# 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. Kombinert forretningslogikk
# Find urgent flagged messages from VIPs with attachments
GET /v1/messages?is_flagged=true&from=ceo&has_attachments=true&subject=urgent
Hvorfor dette er viktig for utviklere
Bygg applikasjoner som tidligere var umulige:
- Avansert e-postanalyse: Analyser e-postmønstre etter størrelse, avsender og innhold
- Intelligent e-postadministrasjon: Organiser automatisk basert på komplekse kriterier
- Samsvar og oppdagelse: Finn spesifikke e-poster for juridiske krav
- Forretningsintelligens: Hent ut innsikt fra e-postkommunikasjonsmønstre
- Automatiserte arbeidsflyter: Utløs handlinger basert på sofistikerte e-postfiltre
Den tekniske implementeringen
Vårt søke-API bruker:
- Regex-optimalisering med riktige indekseringsstrategier
- Parallell utførelse for ytelse
- Inputvalidering for sikkerhet
- Omfattende feilhåndtering for pålitelighet
// 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 utviklere: Med søke-API-et for Forward Email kan du bygge e-postprogrammer som kan konkurrere med skrivebordsklienter i funksjonalitet, samtidig som du beholder enkelheten til REST API-er.
Lynrask ytelsesarkitektur
Vår tekniske stabel er bygget for hastighet og pålitelighet:
Ytelsesbenchmarks
Hvorfor vi er lynraske:
Komponent | Teknologi | Ytelsesfordel |
---|---|---|
Lagring | NVMe SSD | 10 ganger raskere enn tradisjonell SATA |
Database | SQLite + msgpackr | Null nettverksforsinkelse, optimalisert serialisering |
Maskinvare | AMD Ryzen bart metall | Ingen virtualiseringsoverhead |
Bufring | I minnet + vedvarende | Responstider på under et millisekund |
Sikkerhetskopier | Cloudflare R2 kryptert | Pålitelighet i bedriftsklasse |
Reelle ytelsestall:
- API-responstid: < 50 ms gjennomsnitt
- Meldingshenting: < 10 ms for hurtigbufrede meldinger
- Mappeoperasjoner: < 5 ms for metadataoperasjoner
- Kontaktsynkronisering: 1000+ kontakter/sekund
- Oppetid: 99,99 % tjenestenivåavtale med redundant infrastruktur
Personvern-først-arkitektur
Nullkunnskapsdesign: Bare du har tilgang med IMAP-passordet ditt – vi kan ikke lese e-postene dine. Vår nullkunnskapsarkitektur sikrer fullstendig personvern samtidig som den leverer lynrask ytelse.
Hvorfor vi er forskjellige: Den komplette sammenligningen
Viktige leverandørbegrensninger
Fordeler med videresending av e-post
Trekk | Videresend e-post | Konkurranse |
---|---|---|
Helt KRUT | ✅ Fullstendig oppretting, lesing, oppdatering og sletting av alle data | ❌ Skrivebeskyttet eller begrensede operasjoner |
Enhetlig API | ✅ Meldinger, mapper, kontakter, kalendere i ett API | ❌ Separate API-er eller manglende funksjoner |
Enkel autentisering | ✅ Grunnleggende autentisering med alias-legitimasjon | ❌ Kompleks OAuth med flere omfang |
Ingen prisgrenser | ✅ Sjenerøse grenser designet for reelle applikasjoner | ❌ Restriktive kvoter som forstyrrer arbeidsflyter |
Selvhosting | ✅ Complete self-hosting option | ❌ Kun leverandørlåsing |
Privatliv | ✅ Nullkunnskap, kryptert, privat | ❌ Datautvinning og bekymringer om personvern |
Ytelse | ✅ Responstider under 50 ms, NVMe-lagring | ❌ Nettverksforsinkelse, forsinkelser i begrensninger |
Problemet med åpen kildekode-transparens
ProtonMail og Tuta markedsfører seg selv som «åpen kildekode» og «transparente», men dette er villedende markedsføring som bryter med moderne personvernprinsipper.
Warning
Falske påstander om åpenhet: Både ProtonMail og Tuta reklamerer tydelig for sine «åpen kildekode»-legitimasjoner, samtidig som de holder den viktigste serversidekoden sin proprietær og lukket.
ProtonMails bedrag:
- Påstander: "Vi er åpen kildekode" fremtredende omtalt i markedsføring
- Realitet: Serverkoden er fullstendig proprietær - bare klientapper er åpen kildekode
- Virkning: Brukere kan ikke bekrefte kryptering på serversiden, datahåndtering eller personvernkrav
- Brudd på åpenhet: Ingen måte å revidere de faktiske systemene for e-postbehandling og lagring
Tutas villedende markedsføring:
- Påstander: "Åpen kildekode-e-post" som et sentralt salgsargument
- Realitet: Backend-infrastruktur er lukket kildekode - bare frontend er tilgjengelig
- Virkning: Proprietær kryptering forhindrer standard e-postprotokoller (IMAP/SMTP)
- Låsestrategi: Tilpasset kryptering tvinger frem leverandøravhengighet
Hvorfor dette er viktig for moderne personvern:
I 2025 krever ekte personvern fullstendig åpenhet. Når e-postleverandører hevder å være «åpen kildekode», men skjuler serverkoden sin:
- Uverifiserbar kryptering: Du kan ikke revidere hvordan dataene dine faktisk er kryptert
- Skjult datapraksis: Datahåndtering på serversiden er fortsatt en svart boks
- Tillitsbasert sikkerhet: Du må stole på påstandene deres uten verifisering
- Leverandørlåsing: Proprietære systemer forhindrer dataportabilitet
Videresendt e-posts ekte åpenhet:
- ✅ Fullstendig åpen kildekode - server- og klientkode
- ✅ Selvhosting tilgjengelig - kjør din egen instans
- ✅ Standardprotokoller - IMAP-, SMTP-, CardDAV- og CalDAV-kompatibilitet
- ✅ Reviderbar sikkerhet - hver kodelinje kan inspiseres
- ✅ Ingen leverandørbinding - dine data, din kontroll
Tip
Ekte åpen kildekode betyr at du kan bekrefte alle påstander. Med Videresendt e-post kan du revidere krypteringen vår, gjennomgå datahåndteringen vår og til og med kjøre din egen instans. Det er ekte åpenhet.
30+ eksempler på integrasjon fra den virkelige verden
1. Forbedring av WordPress-kontaktskjema
Problem: WordPress SMTP-konfigurasjonsfeil (631 GitHub-problemer) Løsning: Direkte API-integrasjon omgår SMTP fullstendig
// 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 for e-postautomatisering
Problem: Zapiers grense på 10 e-poster/time og IMAP-deteksjonsfeil Løsning: Ubegrenset automatisering med full e-postkontroll
// 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-postsynkronisering
Problem: Manuell kontakthåndtering mellom e-post og CRM-systemer Løsning: Toveis synkronisering 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 av e-handelsordrer
Problem: Manuell behandling av bestillings-e-post for e-handelsplattformer Løsning: Automatisert ordrebehandlingsprosess
// 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. Støtte for integrering av billett
Problem: E-posttråder spredt over brukerstøtteplattformer Løsning: Fullstendig sporing av e-posttråder
// 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. System for nyhetsbrevhåndtering
Problem: Begrensede nyhetsbrevplattform-integrasjoner Løsning: Fullstendig administrasjon av abonnentens livssyklus
// 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-postbasert oppgavebehandling
Problem: Overfylt innboks og oppgavesporing Løsning: Konverter e-poster til handlingsrettede oppgaver
// 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-postaggregering for flere kontoer
Problem: Administrering av flere e-postkontoer på tvers av leverandører Løsning: Enhetlig innboksgrensesnitt
// 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. Avansert dashbord for e-postanalyse
Problem: Ingen innsikt i e-postmønstre med sofistikert filtrering Løsning: Tilpasset e-postanalyse ved hjelp av avanserte søkefunksjoner
// 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-postarkivering
Problem: Manuell e-postorganisasjon Løsning: Intelligent e-postkategorisering
// 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. Integrering av e-post til kalender
Problem: Manuell oppretting av kalenderhendelse fra e-poster Løsning: Automatisk uttrekking og oppretting av hendelser
// 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. Sikkerhetskopiering og samsvar med e-post
Problem: E-postoppbevaring og samsvarskrav Løsning: Automatisert sikkerhetskopiering med bevaring av 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-postbasert innholdshåndtering
Problem: Administrering av innholdsinnsendinger via e-post for CMS-plattformer Løsning: E-post som innholdsstyringssystem
// 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. Administrasjon av e-postmaler
Problem: Inkonsekvent e-postmaler på tvers av teamet Løsning: Sentralisert malsystem 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-postbasert arbeidsflytautomatisering
Problem: Manuell godkjenningsprosesser via e-post Løsning: Automatiserte arbeidsflytutlø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åking av e-postsikkerhet
Problem: Manuell deteksjon av sikkerhetstrusler Løsning: Automatisert trusselanalyse
// 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-postbasert undersøkelsesinnsamling
Problem: Manuell svar på undersøkelsen-behandling Løsning: Automatisert 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åking av e-postytelse
Problem: Ingen innsyn i e-postleveringsytelse Løsning: E-postmålinger i sanntid
// 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-postbasert potensiell kvalifisering
Problem: Manuell poengsum fra e-postinteraksjoner Løsning: Automatisert pipeline for kvalifisering av potensielle kunder
// 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-postbasert prosjektstyring
Problem: Prosjektoppdateringer spredt på tvers av e-posttråder Løsning: Sentralisert prosjektkommunikasjonssenter
// 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-postbasert lagerstyring
Problem: Manuelle lageroppdateringer fra leverandørens e-poster Løsning: Automatisert lagersporing fra e-postvarsler
// 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-postbasert fakturabehandling
Problem: Manuell fakturabehandling og regnskapsintegrasjon Løsning: Automatisk fakturauttrekking og synkronisering av regnskapssystem
// 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-postbasert arrangementsregistrering
Problem: Manuell arrangementsregistrering-behandling fra e-postsvar Løsning: Automatisert deltakeradministrasjon og kalenderintegrasjon
// 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-postbasert arbeidsflyt for dokumentgodkjenning
Problem: Komplekse dokumentgodkjenning-kjeder via e-post Løsning: Automatisert godkjenningssporing og dokumentversjonskontroll
// 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-postbasert analyse av kundetilbakemeldinger
Problem: Manuell tilbakemeldinger fra kunder-innsamling og sentimentanalyse Løsning: Automatisert tilbakemeldingsbehandling 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-postbasert rekrutteringsprosess
Problem: Manuell rekruttering og kandidatsporing Løsning: Automatisert kandidatadministrasjon og intervjuplanlegging
// 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-postbasert behandling av utgiftsrapporter
Problem: Manuell innsending og godkjenning av utgiftsrapport Løsning: Automatisert arbeidsflyt for uttrekk og godkjenning av utgifter
// 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-postbasert kvalitetssikringsrapportering
Problem: Manuell kvalitetssikring problemsporing Løsning: Automatisert problemhåndtering og feilsporing for kvalitetssikring
// 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-postbasert leverandøradministrasjon
Problem: Manuell leverandørkommunikasjon og kontraktssporing Løsning: Automatisert håndtering av leverandørrelasjoner
// 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-postbasert overvåking av sosiale medier
Problem: Manuell sporing og respons av sosiale medier-omtaler Løsning: Automatisert behandling av varsler på sosiale medier og koordinering av responser
// 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']
})
});
}
}
Komme i gang
1. Opprett din videresendingskonto for e-post
Registrer deg på forwardemail.net og bekreft domenet ditt.
2. Generer API-legitimasjon
Alias-e-postadressen og passordet ditt fungerer som API-legitimasjon – ingen ytterligere oppsett kreves.
3. Gjør ditt første API-kall
# 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. Utforsk dokumentasjonen
Gå til forwardemail.net/en/email-api for fullstendig API-dokumentasjon med interaktive eksempler.
Tekniske ressurser
- Komplett API-dokumentasjon – Interaktiv OpenAPI 3.0-spesifikasjon
- Guide for selvhosting – Implementer videresendt e-post på infrastrukturen din
- Hvitbok for sikkerhet – Teknisk arkitektur og sikkerhetsdetaljer
- GitHub-arkivet – Åpen kildekodebase
- Utviklerstøtte – Direkte tilgang til vårt ingeniørteam
Klar til å revolusjonere e-postintegrasjonen din? Begynn å bygge med API-et for videresendt e-post i dag og opplev den første komplette e-postadministrasjonsplattformen som er utviklet for utviklere.
Videresend e-post: E-posttjenesten som endelig får API-ene riktige.