Ես կառուցում եմ մի կայք, որն ունի կոնտակտային հնարավորություն: Այն ստանդարտ կոնտակտային ձև է, որտեղ օգտվողները կարող են մուտքագրել իրենց անունը, էլ. հասցեն և կարճ հաղորդագրություն: Տվյալները պետք է ուղարկվեն էլփոստի հասցեով, որպեսզի ընկերության սեփականատերը կարողանա ստանալ հաղորդագրությունը և պատասխանել իր օգտատերերին:

Կույտը 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 })
  }

Հուսով եմ, որ սա օգնում է: Եթե ​​դուք ունեք հարցեր, ազատ զգալ մեկնաբանել ստորեւ.