Daugumai žiniatinklio programų reikia siųsti el. Jis gali būti skirtas registracijai, slaptažodžio nustatymui iš naujo, būsenos ataskaitoms, tačiau visoms rinkodaros kampanijoms, pvz., informaciniams biuleteniams ir reklamoms. Šioje mokymo programoje paaiškinama, kaip siųsti el. laiškus naudojant Node.js, tačiau sąvokos ir iššūkiai taikomi bet kokioms jūsų naudojamoms sistemoms.
Čia rasite daugybę su el. paštu susijusių modulių npm. Populiariausias yra NodeMailerkuri kiekvieną savaitę sulaukia daugiau nei trijų milijonų atsisiuntimų.
Norėdami jį naudoti, jums reikės SMTP serverio, kuris gali siųsti el. Galbūt galėsite naudotis savo el. pašto paslaugų teikėju, tačiau šios demonstracijos tikslais naudoju nemokamą WPOven Test SMTP serveris.
Sukurkite naują projekto aplanką:
mkdir emailtest
cd emailtest
Tada sukurkite naują package.json failas su šiuo JSON turiniu:
{
"name": "emailtest",
"type": "module",
"main": "index.js",
"dependencies": {
"nodemailer": "^6.0.0"
}
}
Įdiekite modulius (NodeMailer):
npm install
ir sukurkite toliau pateiktą informaciją index.js kodas:
import nodemailer from 'nodemailer';
const transporter = nodemailer.createTransport({
host: 'smtp.freesmtpservers.com',
port: 25
});
try {
const send = await transporter.sendMail({
from: '"Test Email" <test@email.com>',
to: 'someone@example.com',
subject: 'Hello!',
text: 'Hello world!',
html: '<p>Hello world!</p>',
});
console.dir(send, { depth: null, color: true });
}
catch(e) {
console.dir(e, { depth: null, color: true });
}
(Apsvarstykite galimybę pakeisti to: pašto adresą į kažką unikalaus, kad galėtumėte peržiūrėti savo bandomuosius el. laiškus!)
Paleiskite kodą. Turėtumėte pamatyti rezultatą su a 250 OK response ir a messageId:
$ node index.js
{
accepted: [ 'someone@example.com' ],
rejected: [],
ehlo: [ 'SIZE 33554432', '8BITMIME', 'SMTPUTF8', 'HELP' ],
envelopeTime: 486,
messageTime: 289,
messageSize: 595,
response: '250 OK',
envelope: {
from: 'test@email.com',
to: [ 'someone@example.com' ]
},
messageId: '<4673597e-a9e4-e422-85f7-4422edf31774@email.com>'
}
Patikrinkite gautuosius to: adresą, kurį naudojote įvesdami jį adresu WPOven Test SMTP serverio puslapis ir spustelėdami Pasiekite gautuosius. Spustelėkite „Sveiki!” pranešimą, kad ištirtų turinį.
„NodeMailer“ pagrindai
Norėdami siųsti el. laiškus, turite sukurti NodeMailer transporteris objektą paslaugos tipui apibrėžti. SMTP yra labiausiai paplitęs, bet kiti yra prieinami už alternatyvias paslaugas. Paprastai reikalingas autentifikavimo vartotojo ID ir slaptažodis:
import nodemailer from 'nodemailer';
const transporter = nodemailer.createTransport({
host: 'smtp.yourserver.com',
port: 587,
auth: {
user: 'myid@yourserver.com',
pass: 'my-password'
},
});
Naudodami transporterį galite siųsti el. laiškus vienam ar keliems gavėjams sendMail() metodas:
const send = await transporter.sendMail({
from: '"Test Email" <test@email.com>',
to: 'someone@example.com, sometwo@example.com',
cc: 'somethree@example.com',
bcc: 'somefour@example.com',
subject: 'Hello!',
text: 'Plain text version of the message',
html: '<p>HTML version of the message</p>',
});
Visos el. pašto programos palaiko paprastus tekstinius pranešimus. Taip pat galite siųsti raiškiojo formato to paties pranešimo versiją, naudojamą, kai el. pašto programa palaiko HTML (daugiau apie tai žemiau).
„NodeMailer“ suteikia daug kitas pranešimų siuntimo parinktisbet labiausiai paplitęs yra priedai. Objektų masyvas apibrėžia failų pavadinimus ir turinį. Pavyzdžiui:
const send = await transporter.sendMail({
attachments: [
{
filename: 'text1.txt',
path: '/path/to/file1.txt'
},
{
filename: 'text2.txt',
path: 'https://myserver.com/text2.txt'
},
{
filename: 'text3.txt',
content: 'This is the file content!'
},
{
filename: 'text4.txt',
path: 'data:text/plain;base64,SGVsbG8gd29ybGQh'
}
]
});
Siuntimo paslaugos
Nesunku išsiųsti paprastus vienkartinius el. laiškus, tačiau nenuvertinkite iššūkio, kai keičiasi jūsų reikalavimai.
Galbūt neturite SMTP serverio. Ne visos el. pašto paslaugos teikia SMTP („Google“ yra atšaukti pagrindinį SMTP palaikymą „Gmail“.).
Dauguma paslaugų riboja siunčiamus el. Jei siunčiate daug el. laiškų, galite pasiekti paslaugų teikėjo limitą. Tuo metu visi el. laiškai, perduodami naudojant tą pačią paslaugą, nepavyks: tai jūsų naujienlaiškis, taip pat asmeniniai ir verslo pranešimai.
Galite tapti šiukšlių siuntėju. Gavėjai gali lengvai pažymėti jūsų el. laišką kaip „šiukšlių“ – net kai to nėra. Kai tai padarys pakankamai žmonių, galite pastebėti, kad visi jūsų domeno el. laiškai yra užblokuoti internete.
Geriau naudoti specialią el. pašto paslaugą, o ne savo pašto serverį. Šios paslaugos sumažina galimas problemas, o kai kurios siūlo nemokamus planus tiems, kuriems taikomi nedideli naudojimo reikalavimai:
Asinchroninė programų architektūra
Vieno el. pašto siuntimas dažnai būna greitas, tačiau:
- SMTP serveris gali neveikti, todėl reikia bandyti pakartotinai arba
- pranešimas gali patekti į masinio naujienlaiškio paskelbimą
Užuot siuntus el. laiškus tiesiogiai savo Node.js programoje, paprastai geriau siųsti duomenis į a užduočių eilė. Galutiniam vartotojui nereikia laukti atsakymo ir jis gali toliau naudoti programą.
Kitas procesas gali stebėti el. pašto eilę, išsiųsti kitą pranešimą ir pateikti elementus į eilę, kai įvyksta gedimas.
HTML laiškų kūrimas
HTML5 ir CSS3 nuolat gerai veikia šiuolaikinėse naršyklėse. El. pašto programos yra kitas dalykas, sugrąžinantis mus į varginančius 1990-ųjų pabaigos lenteles ir eilutinius stilius.
Štai keletas problemų, su kuriomis susidursite:
Yra daugybė vietinių ir žiniatinklio el. pašto programų, įskaitant „Gmail“, „Yahoo Mail“, „Apple Mail“, „iOS Mail“, „Android Mail“, „Windows Mail“, „Outlook“, „Outlook.com“, (nauja) „Outlook“, „Thunderbird“, AOL, „Claws“, „RoundCube“ ir kt. įjungta.
Visi naudoja savo keistus ir nuostabius atvaizdavimo variklius su unikaliomis problemomis ir klaidomis. Šiek tiek keista, kad „Outlook“ nuo 2007 m. naudojo „Microsoft Word“, kad pateiktų HTML (nors naujoji peržiūros versija yra pagrįsta naršykle).
Dauguma klientų blokuoja arba riboja šriftus, vaizdus, stebėjimo priemones, medijos užklausas, iframe, vaizdo įrašus, garsą, formas ir scenarijus.
Netgi žiniatinklio el. pašto programos, veikiančios naršyklėje, turi pašalinti HTML, CSS ir JavaScript, kurie yra pavojingi arba gali turėti įtakos vartotojo sąsajos išdėstymui. Pavyzdžiui, el. laiške neturėtų būti įmanoma automatiškai spustelėti savo nuorodų arba absoliučiai padėti elemento virš trynimo mygtuko.
El. pašto programos gali iš naujo suformatuoti jūsų HTML, kad įsitikintų, jog jis yra vienas stulpelis arba atitinka vartotojo šviesaus / tamsaus režimo nuostatas.
Galima rankiniu būdu koduoti HTML laiškus bet, nebent jūsų išdėstymas yra paprastas, jis yra sudėtingas, varginantis ir linkęs į klaidas. Tolesniuose skyriuose siūlomi įrankiai ir ištekliai, kurie gali palengvinti jūsų gyvenimą.
Iš anksto sukurti el. pašto šablonai
Šiose svetainėse pateikiami nemokami ir komerciniai patikimi el. pašto šablonai, kuriuos galite peržiūrėti, atsisiųsti ir naudoti be didelių pastangų:
El. pašto šablonų kūrimo įrankiai
Šie be kodo projektavimo įrankiai leidžia sukurti savo HTML el. pašto šablonus naudojant paprastesnį WYSWYG redaktorių:
Kai kurios iš šių paslaugų taip pat teikia kodo patvirtinimo ir testavimo priemones.
El. pašto šablono konvertavimas
Išankstinis laiškas yra žiniatinklio įrankis, kuris paima puslapio URL arba įklijuotą šaltinio kodą ir paverčia jį su el. paštu suderinamais HTML ir paprasto teksto šablonais. Ten yra REST API ir Node.js premailer-api modulis jei reikia automatizuoti procesą.
Panašūs įrankiai apima:
El. pašto šablonų žymėjimo įrankiai
Cerberis, El. pašto sistema, El. pašto skeletasir Geras el. pašto kodas pateikti HTML komponentų fragmentus, kuriuos galite nukopijuoti ir pritaikyti savo šablonuose.
HEML ir MJML yra el. pašto žymėjimo kalbos. Jie yra panašūs į HTML, bet neleidžia tipinėms suderinamumo problemoms. Maizzle naudoja panašų požiūrį Tailwind CSS.
Siuntinys yra kodo rengyklė, kuri supranta el. pašto formatavimą ir gali rodyti peržiūras. Taip pat rasite daug pašto plėtiniai, skirti VS Code.
caniemail.com yra tinklalapio atitikmuo el. paštu caniuse.com ir praneša, ar tam tikra HTML arba CSS funkcija gali būti naudojama keliems klientams. Pagaliau, Prieinamas el pateikia susijusius išteklius ir nuorodas.
El. pašto testavimo įrankiai
Nors HTML el. laiškas gali veikti jūsų el. pašto programose, ar galite būti tikri, kad jis veikia kitose? Toliau pateikiami įrankiai padės, bet jokiu būdu negalima išbandyti įvairių tikrų įrenginių, OS ir el. pašto programų.
HTML el. pašto patikrinimas ir MailTrap patvirtinkite savo šaltinio kodą ir praneškite apie problemas, su kuriomis galite susidurti naudodami konkrečius klientus.
el. pašto peržiūra, Mailozaurasir El. pašto peržiūros paslaugos suteikti maketo peržiūros priemones, kad galėtumėte patikrinti, kaip jūsų dizainas atrodys įvairiems klientams.
Pagaliau, Lakmusas ir Laiškas apie rūgštį turėti daugybę įrankių, skirtų kodui patvirtinti, prieinamumui patikrinti, klientų peržiūrai, analizei įrašyti ir visoms rinkodaros kampanijoms vykdyti.
Sužinokite, kaip teisingai koduoti el
Kaip matėme aukščiau, yra daug įrankių, kurie gali padėti sukurti el. pašto maketus, kurie veiktų daugelyje el. pašto programų. Tačiau nėra nieko panašaus, kaip savarankiškai suprasti, kaip koduoti, ypač kai reikia pašalinti neišvengiamas klaidas.
Jei norite išmokti el. pašto kodavimo subtilybes (net jei tai tik atsarginė kopija), peržiūrėkite HTML el. pašto kūrimas, pateikė Rémi Parmentier. Jame aprašomos šiuolaikinės el. pašto šablonų kūrimo perspektyvos, pagrindinės geriausios praktikos, kaip pridėti el. laiškus interaktyvumo ir kaip padaryti šablonus prieinamus. Jis netgi supažindina jus su atvejo analize, kad visa tai pamatytumėte praktiškai.
Gaunamo el. pašto skaitymas
Daugeliui programų tereikia siųsti el. laiškus, tačiau gali būti atvejų, kai norėsite peržiūrėti gaunamus el. laiškus, pvz., paslaugų registraciją, prenumeratos atsisakymą, automatinį palaikymą ir pan. Nors tai nepatenka į šio mokymo programą, Node.js moduliai, tokie kaip ImapFlow leisti programai prisijungti prie IMAP gautųjų, gauti pranešimus ir apdoroti atsakymą:
import ImapFlow from 'imapflow';
const client = new ImapFlow({
host: 'imap.email',
port: 993,
secure: true,
auth: {
user: 'account@imap.email',
pass: 'mypassword'
}
});
try {
await client.connect();
const lock = await client.getMailboxLock('INBOX');
const msg = await client.fetchOne(client.mailbox.exists, { source: true });
console.log( msg.source.toString() );
lock.release();
await client.logout();
}
catch (e) {
console.log(e);
}
Išvada
El. laiškus iš Node.js žiniatinklio programų lengva siųsti. Siųsti el. laiškus, kurie atrodo gerai, patikimai veikia visose el. pašto programose, nesustabdo vartotojo ir nesukelia bėdų su šiukšlėmis, gali būti daug sunkiau.
Rekomenduoju, kad el. laiškus būtų paprasta pradėti, galbūt pasirinkti retus paprastus teksto pranešimus. Žinoma, jūsų klientai ir rinkodaros skyrius netrukus norės įmantrių spalvų ir animacijos, bet jūs galite tai pateikti rytoj!
Dažnai užduodami klausimai (DUK) apie el. laiškų siuntimą naudojant Node.js
Kaip galiu pridėti failus prie savo el. laiškų naudojant Node.js?
Failus prie el. laiškų pridėti naudojant Node.js yra gana paprasta. Pašto parinktyse galite naudoti ypatybę „priedai“. Ši nuosavybė turi daugybę priedų parinkčių. Kiekviena priedo parinktis yra objektas, kuriame yra failo pavadinimas ir kelio ypatybės. Failo pavadinimo ypatybė yra failo pavadinimas, kuris bus rodomas el. laiške, o kelio ypatybė yra failo vieta jūsų sistemoje.
Štai pavyzdys:
let mailOptions = {from: 'sender@example.com',to: 'receiver@example.com',subject: 'Hello',text: 'Hello world',attachments: [{filename: 'file.txt',path: '/path/to/file.txt'}]};
Ar galiu siųsti HTML el. laiškus naudodamas Node.js?
Taip, galite siųsti HTML el. laiškus naudodami Node.js. Užuot naudoję ypatybę „tekstas“ pašto parinktyse, naudokite ypatybę „html“. Šios nuosavybės vertė yra el. laiško HTML turinys.
Štai pavyzdys:
let mailOptions = {from: 'sender@example.com',to: 'receiver@example.com',subject: 'Hello',html: '<h1>Hello world</h1>'};
Kaip galiu išsiųsti el. laiškus keliems gavėjams?
Jei norite siųsti el. laiškus keliems gavėjams, galite pateikti kableliais atskirtų el. pašto adresų sąrašą pašto parinkčių ypatybėje „kam“.
Štai pavyzdys:
let mailOptions = {from: 'sender@example.com',to: 'receiver1@example.com, receiver2@example.com',subject: 'Hello',text: 'Hello world'};
Kaip galiu tvarkyti klaidas siunčiant el.
Galite tvarkyti klaidas siųsdami el. laiškus naudodami atgalinio skambinimo funkciją. Ši funkcija perduodama kaip antrasis argumentas „sendMail“ metodui. Atšaukimo funkcijai reikia dviejų parametrų: klaidos objekto ir informacijos objekto. Jei siunčiant laišką įvyksta klaida, klaidos objekte bus informacija apie klaidą.
Štai pavyzdys:
transporter.sendMail(mailOptions, function(error, info){if (error) { console.log(error); } else {console.log('Email sent: ' + info.response); } });
Ar galiu naudoti „Gmail“ paskyrą el. laiškams siųsti?
Taip, el. laiškams siųsti galite naudoti „Gmail“ paskyrą. Tačiau „Gmail“ paskyros nustatymuose turite įjungti „Mažiau saugias programas“. Be to, transporterio parinktyse turite naudoti „smtp.gmail.com“ kaip pagrindinį kompiuterį ir 587 kaip prievadą.
Štai pavyzdys:
let transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 587,
auth: {
user: 'your-email@gmail.com',
pass: 'your-password'
}
});Kaip galiu siųsti el. laiškus asinchroniškai?
El. laiškus galite siųsti asinchroniškai naudodami pažadus. Metodas „sendMail“ grąžina pažadą, kuris išsprendžiamas naudojant informacijos objektą, kai siunčiamas el. laiškas.
Štai pavyzdys:
transporter.sendMail(mailOptions)
.then(info => console.log('Email sent: ' + info.response))
.catch(error => console.log(error));Ar galiu naudoti pasirinktinį SMTP serverį el. laiškams siųsti?
Taip, el. laiškams siųsti galite naudoti pasirinktinį SMTP serverį. Transporterio parinktyse turite nurodyti SMTP serverio pagrindinį kompiuterį, prievadą ir autentifikavimo informaciją.
Štai pavyzdys:
let transporter = nodemailer.createTransport({
host: 'smtp.example.com',
port: 587,
auth: {
user: 'username',
pass: 'password'
}
});Kaip galiu siųsti el. laiškus su konkrečia simbolių rinkiniu?
Galite siųsti el. laiškus su konkrečia simbolių rinkiniu, naudodami pašto parinkčių ypatybę „charset“. Ši savybė nustato el. laiško simbolių rinkinį.
Štai pavyzdys:
let mailOptions = {
from: 'sender@example.com',
to: 'receiver@example.com',
subject: 'Hello',
text: 'Hello world',
charset: 'UTF-8'
};Ar galiu siųsti el. laiškus su konkretaus turinio tipu?
Taip, galite siųsti el. laiškus su konkretaus turinio tipu. Pašto parinktyse galite naudoti ypatybę „contentType“. Ši ypatybė nustato el. laiško turinio tipą.
Štai pavyzdys:
let mailOptions = {
from: 'sender@example.com',
to: 'receiver@example.com',
subject: 'Hello',
text: 'Hello world'
contentType: 'text/plain
};Kaip galiu siųsti el. laiškus su konkrečia koduote?
Galite siųsti el. laiškus su konkrečia koduote naudodami pašto parinkčių ypatybę „kodavimas“. Ši savybė nustato el. laiško kodavimą.
Štai pavyzdys:
let mailOptions = {
from: 'sender@example.com',
to: 'receiver@example.com',
subject: 'Hello',
text: 'Hello world',
encoding: 'base64'
};

