Nosūtīt e-pastu
`emails.send`: viens ziņojums, tagad vai vēlāk.
emails.send
const email = await openemail.emails.send({ from: { email: '[email protected]', name: 'Acme Billing' }, to: ['[email protected]', 'Grace <[email protected]>'], cc: '[email protected]', bcc: [{ email: '[email protected]' }], replyTo: '[email protected]', subject: 'Your September invoice', html: '<p>Invoice attached.</p>', text: 'Invoice attached.', headers: { 'X-Campaign': 'invoices' }, attachments: [{ filename: 'invoice.pdf', content: pdfBytes }], threadId: 'thread_…', scheduledAt: 'PT1H', tags: { order: '4021' }, tracking: { opens: true, clicks: true },})to, cc un bcc pieņem vienu adresātu vai vairākus, un vienu pašu ietin jūsu vietā. Katrs var būt kaila adrese, Name <addr@host> vai { email, name }.
Parametri
fromRecipientInputobligāts- Sūtītājs. Tikai adrese, `Name <addr@host>` vai objekts. Tai jābūt tādai, kuras vārdā šī atslēga drīkst sūtīt. Rezerves sūtītāja nav, jo rezerve būtu darbvietas noklusējuma adrese, kas mainās, adresēm nākot un ejot.
toRecipientInput | RecipientInput[]obligāts- Viens adresāts vai vairāki; vienu pašu ietin jūsu vietā. Ne vairāk kā 50 laukos to, cc un bcc kopā.
ccRecipientInput | RecipientInput[]- Ieskaitās 50 adresātu ierobežojumā.
bccRecipientInput | RecipientInput[]- Nekad nav nosaukts baitos, ko saņem kāds cits, jo katram adresātam tiek pārraidīta sava aploksne.
replyToRecipientInput- Viena adrese, kas tiek sūtīta kā Reply-To galvene.
subjectstring- Ne vairāk kā 998 rakstzīmes, kas ir RFC 5322 rindas ierobežojums. Pēc noklusējuma tukšs.
htmlstring- Ir vajadzīgs viens no html, text, draftId vai template. HTML ir tas, ko adresāti redz, kad doti gan html, gan text.
textstring- Vienkārša teksta daļa.
template{ id, version?, props?, slots? }- Atveido saglabātu veidni servera pusē. `version` piesaista versiju; izlaidiet to, lai izmantotu to, kas ir publicēts pieprasījuma pieņemšanas brīdī. Nezināms vai trūkstošs prop ir 422, nevis tukša vieta ziņojumā.
draftIdstring- Nosūtiet saglabātu melnrakstu ar šo aploksni.
headersRecord<string, string>- `X-*`, `List-*`, Reply-To, Precedence, Auto-Submitted, Importance, Priority un Feedback-Id. Viss, ko transports iestata pats, tiek atteikts, nevis klusi nomests.
attachmentsAttachmentInput[]- `{ filename, content, contentType? }` vai `{ fileId }`, kas nosauc darbvietā jau esošu failu. Padodiet saturam baitus, un tie tiek base64 iekodēti jūsu vietā. 20 faili, ar iekļautajiem failiem kopā līdz 5 MB pēc atkodēšanas. Saglabāts fails var būt lielāks un ceļo kā lejupielādes saite.
attachmentDeliveryAttachmentDeliveryMode- `mime`, `link` vai `auto`. `auto` nes failus kā lejupielādes saites, tiklīdz tie pārsniedz 2 MB uz domēna ar aktīvu failu domēnu, un citādi — ziņojuma iekšienē. Ja izlaists, tiek piemērots pastkastes iestatījums, un tas pēc noklusējuma ir `auto`.
threadIdstring- Atbilde esošā pavedienā. Transports uzraksta In-Reply-To un References.
scheduledAtDate | string- Date, ISO-8601 brīdis vai ilgums, piemēram, `PT1H`. Līdz gadam uz priekšu, nekad pagātnē. Nevar apvienot ar cancellableForSeconds.
cancellableForSecondsnumber- No 0 līdz 900. Atsaukšanas logs tūlītējam sūtījumam: rakstīšanas loga atsaukšanas mehānisms, padarīts pieejams, nevis iekodēts.
tagsRecord<string, string>- Līdz 10 birkām, atspoguļotas atpakaļ un filtrējamas. Nekad netiek interpretētas.
signatureboolean- Vai šis ziņojums nes tās adreses parakstu, no kuras tas tiek sūtīts, proti, šīs adreses pašas parakstu vai citādi to, kas iestatīts Visām adresēm. Pēc noklusējuma true, jo paraksts pieder adresei, nevis tam klientam, kas ziņojumu nosūtīja. Iestatiet `false` pastam, ko programma sūta kāda vārdā, piemēram, kvītij, paroles atiestatīšanai vai kopsavilkumam, no kuriem nevienam nevajag cilvēka parakstu apakšā.
tracking{ opens?, clicks? }- Vai šim ziņojumam pievienot atvēršanas pikseli un pārrakstīt saites. Ieslēgts, ja vien darbvietas īpašnieks nav izslēdzis izsekošanu adresei, no kuras tas tiek sūtīts, vai Visām adresēm, un jebkurš šeit norādīts lauks izšķir šo vienu ziņojumu neatkarīgi no tā, kā iestatīta adrese.
translate{ to, from?, subject?, includeOriginal? }- Sūtiet to adresāta valodā. `to` pieņem kodu, angļu nosaukumu vai pašas valodas nosaukumu; `subject` un `includeOriginal` abi pēc noklusējuma ir true. Atrisināts, kad pieprasījums tiek pieņemts, tāpēc plānots ziņojums nes tos vārdus, kas tika apstiprināti. Atteikts līdzās `draftId`.
Atbilde
idstring- Sūtījuma id, `msg_…`. Izmantojiet to izsaukumiem `get`, `cancel`, `reschedule` un `getTracking`.
statusEmailStatus- queued, scheduled, sending, sent, partial, cancelled vai failed. Lasiet šo, nevis paļaujieties uz to, ka solījums atrisinājās. `partial` ir atsevišķs stāvoklis: daži adresāti to ir saņēmuši, un nosūtīšanu nevar atsaukt, tāpēc atkārtot ir nepareizi, bet ziņot par neveiksmi ir meli.
mode'live' | 'test'- Kāda veida atslēga to nosūtīja. Testa sūtījums tiek reģistrēts un nekad netiek pārraidīts.
fromstring- Adrese, kas patiešām tika autorizēta un nosūtīta tīklā, un tā ne vienmēr ir tā, kura tika prasīta.
subjectstring | null- Kā nosūtīts.
messageIdstring | null- RFC 5322 Message-ID. Null, kamēr MIME nepastāv. Sūtīšanas pakalpojums galveni ceļā pārraksta, tāpēc neviena atteikuma vēstule vai piegādes atskaite šo vērtību nenes. `id` ir tas, ar ko atgriežas notikums.
threadIdstring | null- Pavediens, kurā tas nonāca.
transportstring | null- Kā ziņojums aizgāja. Null līdz nosūtīšanai.
attemptsnumber- Cik reižu nosūtīšana ir mēģināta.
lastErrorstring | null- Kāpēc pēdējais mēģinājums neizdevās, burtiski.
scheduledAtstring | null- ISO brīdis, kad tam jāaiziet.
cancellableUntilstring | null- Kamēr pašreizējais brīdis ir pirms šī, atcelšana vēl darbojas.
sentAtstring | null- ISO brīdis, kad tas aizgāja.
tagsRecord<string, string>- Tas, ko nosūtījāt, atspoguļots atpakaļ.
sourceEmailSource- composer, api, mcp, ai vai queue: kura virsma pieprasīja. `api` ir šis klients.
createdAtstring- ISO brīdis, kad ieraksts tika izveidots.
replayedboolean- True, kad Idempotency-Key sakrita ar jau esošu sūtījumu. Nekas jauns netika nosūtīts, un šis ir sākotnējais ziņojums.
translationEmailTranslationResource | undefined- Klāt tikai ziņojumam, kas tika tulkots, un tikai tur, kur tiek nests viss saglabātais pieprasījums: šajā atbildē un `get`. `{ language, languageName, detectedSourceLanguage, subject, includeOriginal }`, visur kodi, nevis valodu rindas. Saraksta rindā tā nekad nav, tāpēc tās neesamība tur neko nepasaka.
Adresāta valodā
translate uzraksta ziņojumu kāda cita valodā, pirms tas aiziet. Pamatteksts un, ja vien to neizslēdzat, arī temats tiek iztulkots, kad API pieprasījumu pieņem, un aiziet tieši tas, kas iznāca: tulkojums, ko nevarēja izveidot, sūtījumu atsaka, nevis izsūta to valodā, kurā rakstījāt.
const email = await openemail.emails.send({ from: '[email protected]', to: '[email protected]', subject: 'Your September invoice', html: '<p>Invoice attached. Payment is due on the 14th.</p>', translate: { to: 'de' },}) console.log(email.translation)// { language: 'de', languageName: 'German', detectedSourceLanguage: 'en', subject: true, includeOriginal: true }Neviens to neizlasīja, pirms tas aizgāja. emails.translate ir tas pats gājiens, apturēts vienu soli agrāk. Parādiet rezultātu cilvēkam, ļaujiet to izmainīt un tad nosūtiet apstiprināto, izsaukumā translate vairs nenorādot. Tā norādīšana vēlreiz tulkotu otrreiz un izmestu cilvēka labojumus.
const preview = await openemail.emails.translate({ subject: 'Your September invoice', html: '<p>Invoice attached. Payment is due on the 14th.</p>', to: 'de',}) console.log(preview.language.native, preview.detectedSourceLanguage) const approved = await showToSomebody(preview) await openemail.emails.send({ from: '[email protected]', to: '[email protected]', subject: approved.subject, html: approved.html,})import { LANGUAGES, isRtlLanguage, languageByCode, openemail, resolveLanguage } from '@openemail/sdk' LANGUAGES.length // 200 const current = await openemail.languages.list() resolveLanguage('Deutsch')?.code // 'de'resolveLanguage('zh-TW')?.code // 'zh-Hant'languageByCode('DE')?.native // 'Deutsch'isRtlLanguage('ar') // trueTabula ir iekļauta pakotnē atlasītāja secībā, tāpēc atlasītāju var aizpildīt jau pirms pirmā pieprasījuma. languages.list() atrisinās par tām pašām rindām no tīkla kā vienkāršs masīvs tam, kurš labāk grib pašreizējās, nevis tās, ar kurām šī versija tika izlaista. resolveLanguage pieņem kodu, angļu nosaukumu, endonīmu vai aizstājvārdu (zh-TW ir aizstājvārds kodam, kas vairs nav sarakstā), languageByCode sakrīt ar precīzu kodu neatkarīgi no reģistra, un sešpadsmit no rindām ir rakstāmas no labās uz kreiso. Meklējiet native, label un code kopā, rādiet native pirmo un glabājiet kodu.
emails.translate netiek atkārtots automātiski. Tas tērē modeļa izsaukumus un neko neraksta, tāpēc nav ko padarīt idempotentu, un atkārtojums pēc neatbildēta pieprasījuma tikai nopirktu to pašu atbildi divreiz.
- Valoda, kas neatrisinās ne uz ko, ir
validation_erroruztranslate.to, pirms kaut kas ir nosūtīts. translation_too_longvirs 30 000 rakstzīmēm,translation_not_configured, kad instalācijai nav konfigurēts AI,translation_failed, kad piegādātājs neatbildēja. Neviens no tiem kā rezerves variantu neizsūta ziņojumu neiztulkotu.- Darbojas ar
template: tiek tulkots ATVEIDOTAIS rezultāts, tāpēc viens saglabāts pamatteksts kalpo katrai valodai, kurā lasa jūsu klienti. Veidne, kas atveido veselu dokumentu, patur savu doctype,<style>blokus un@font-facenoteikumus: modelim aiziet tikai pamatteksts, un pārējais tiek uzlikts atpakaļ apkārt. Tās<title>tiek atstāts neskarts, un to tāpat nekas nerāda. - Atkārtojums neko papildus nemaksā. Tulkojums nav daļa no idempotences nospieduma (pieprasījums gan ir, ieskaitot
translate), tāpēc neatbildēta sūtījuma atkārtošana ar to pašuIdempotency-Keyatkārto jau esošo ziņojumu, nevis tulko un sūta otru. - Tulkots ziņojums, kas ir rindā vai ieplānots, ir iesaldēts pret formulējuma izmaiņām.
emails.rescheduleto joprojām pārvieto; mainīt tā saturu nozīmē atcelt un sūtīt no jauna.
Pielikumi
content tīklā ir base64. Padodiet baitus, un tie tiek iekodēti jūsu vietā.
attachments: [ { filename: 'invoice.pdf', content: pdfBytes, contentType: 'application/pdf' },]toBase64 ir eksportēts, ja tas vajadzīgs kur citur. Tas apstrādā pa gabaliem, ko btoa(String.fromCharCode(...bytes)) nedara. Tas izgāžas uz jebko lielāku par aptuveni 100 kB, un tas izgāžas uz īstā faila, nevis uz tā, ar kuru testējāt.