Ես կառուցում եմ մի կայք, որն ունի կոնտակտային հնարավորություն: Այն ստանդարտ կոնտակտային ձև է, որտեղ օգտվողները կարող են մուտքագրել իրենց անունը, էլ. հասցեն և կարճ հաղորդագրություն: Տվյալները պետք է ուղարկվեն էլփոստի հասցեով, որպեսզի ընկերության սեփականատերը կարողանա ստանալ հաղորդագրությունը և պատասխանել իր օգտատերերին:
Կույտը Next.js + TypeScript է: Որոշ արագ Google-ից հետո փաթեթները, ինչպիսիք են EmailJS
-ը, հանրաճանաչ լուծումներ են, բայց պահանջում են վճարում որոշակի սահմանաչափերը գերազանցելուց հետո: Սա իդեալական չէ, քանի որ իմ հաճախորդը նախընտրում է չվճարել: Հետո ես հանդիպեցի nodemailer
-ին, որն անվճար, բաց կոդով նախագիծ է և, ըստ երևույթին, հանրաճանաչ ընտրություն է հանգույցների նախագծերում նամակներ ուղարկելու համար:
Սկսելու համար այն օգտագործելը պարզ է, դուք կարող եք հետևել նրա npm էջի հրահանգներին: Ես կկենտրոնանամ այն խոչընդոտների վրա, որոնց հանդիպեցի՝ օգտագործելով այս փաթեթը նախագծում:
1. Օգտագործեք Nodemailer-ը TypeScript-ով
Nodemailer-ը միայն պաշտոնապես աջակցում է JavaScript-ին, այնպես որ, երբ ես ներմուծեցի մոդուլը, TyeScript-ն ինձ սխալներ տվեց nodemailer
-ի տիպի սահմանումների բացակայության պատճառով: Լուծումը պարզ է. Ինչ-որ մեկը արդեն գրել է տիպի սահմանումները, և դուք կարող եք դրանք օգտագործել՝ տեղադրելով @types/nodemailer
փաթեթը:
npm install --save @types/nodemailer
2. Օգտագործեք Nodemailer-ը Gmail-ի հետ
Ըստ երևույթին, սովորական է խնդիրներ ունենալ, երբ փորձում եք այն օգտագործել Gmail-ով, նույնիսկNodemailer-ն ունի հատուկ էջ, թե ինչու չպետք է օգտագործել Gmail-ը:
Չնայած Gmail-ը նամակներ ուղարկելու ամենաարագ ճանապարհն է, այն ոչ մի կերպ նախընտրելի լուծում չէ, քանի դեռ չեք օգտագործում OAuth2 նույնականացում: Gmail-ն ակնկալում է, որ օգտատերը լինի իրական օգտատեր, այլ ոչ թե ռոբոտ, ուստի այն գործարկում է բազմաթիվ էվրիստիկա յուրաքանչյուր մուտքի փորձի համար և արգելափակում է այն ամենը, ինչը կասկածելի է թվում՝ օգտատիրոջը հաշիվը գողանալու փորձերից պաշտպանելու համար:
Մինչև 2022 թվականի մայիսը, շատերի լուծումը Gmail-ի տրամադրած պակաս ապահով գործառույթից օգտագործելն էր։ Սակայն դա արդեն այդպես չէ։ Այն շրջանցելու եղանակներից մեկը Հավելվածի գաղտնաբառ օգտագործելն է: Այս տեսանյութը բավականին լավ բացատրում է դա, այնպես որ ես չեմ փորձի վերահայտնագործել անիվները այստեղ:
Եվ վերջ, ես կարողացա իմ կոդից նամակներ ուղարկել Gmail-ի հաշիվներին:
Նմուշ կոդ
const transporter = nodemailer.createTransport({ service: 'gmail', host: 'smtp.gmail.com', secure: false, // true for 465, false for other ports auth: { user: process.env.GMAIL_FROM, pass: process.env.GMAIL_APP_PASSWORD } }) try { await transporter.sendMail({ from: '"Message bot"<[email protected]>', // sender address to: '[email protected]', // list of receivers subject: `Message from ${body.firstName} ${body.lastName}`, // Subject line text: JSON.stringify(message), // plain text body html: emailHtml // html body }) return NextResponse.json({ status: 200 }) } catch (err) { console.log(err) return NextResponse.json({ status: 500 }) }
Հուսով եմ, որ սա օգնում է: Եթե դուք ունեք հարցեր, ազատ զգալ մեկնաբանել ստորեւ.