ฟังก์ชัน Yandex ส่งจดหมาย

ฟังก์ชัน Yandex ส่งจดหมาย

วันนี้เราจะมาสร้างสิ่งที่เรียกว่า ฟังก์ชันยานเดกซ์ (ชื่อเป็นทางการ ฟังก์ชั่นยานเดกซ์คลาวด์) ซึ่งสมรู้ร่วมคิดกับบริการไปรษณีย์ SendGrid จะส่ง “สบู่” ไปให้ผู้ใช้ที่นอนหลับอย่างสงบ (ล้อเล่น - ฉันรู้ว่าเราทุกคนต่อต้านสแปม)

ฉันยังเป็นคู่ต่อสู้ (แต่ไม่มีความคลั่งไคล้) ของเซิร์ฟเวอร์แบบดั้งเดิมและเป็นผู้สนับสนุนสิ่งที่เรียกว่า serverless โซลูชัน (ไร้เซิร์ฟเวอร์) เพราะฉันไม่ชอบ (และฉันไม่รู้วิธี) จัดการเซิร์ฟเวอร์ และยิ่งกว่านั้นคือต้องจ่ายเงินตามเวลาที่ไม่ได้โหลด อีกสิ่งหนึ่งคือฟังก์ชั่น มีคนให้บริการโดยไม่มีฉัน และฉันจ่ายเฉพาะค่าโทรเท่านั้น เมื่อต้นเดือนตุลาคม 2019 Yandex นำเสนอ ฟังก์ชั่นยานเดกซ์คลาวด์ - ดูเหมือนจะเป็นแห่งแรกในสหพันธรัฐรัสเซีย serverless. และสิ่งที่ดีเป็นพิเศษก็คือทักษะของอลิซโดยทั่วไปนั้นเป็นอิสระ ดังนั้นทักษะเหล่านี้จึงอยู่ในการมองเห็นของฉันตั้งแต่นั้นเป็นต้นมา แต่มาเริ่มกันเลย

ลองจินตนาการถึงสถานการณ์นี้ ใบสมัครของคุณ (เช่น ทักษะของอลิซ จำและลืม ซึ่งยังไงก็ยังใช้ได้ผลอยู่ ฟังก์ชั่นยานเดกซ์) เชิญชวนให้ผู้ใช้ซื้อผลิตภัณฑ์ดิจิทัล เช่น ตัวเลือกเพิ่มเติม และผู้ใช้ชำระเงิน ระบบการชำระเงินบางประเภท (คล้ายกับสับสนกับ Yandex) ประมวลผลการชำระเงินและส่งไปยังที่อยู่ที่คุณให้ไว้ (และเราจะมีลิงก์สำหรับโทรติดต่อ) ฟังก์ชันยานเดกซ์) HTTP-คำขอที่มีรายละเอียดการชำระเงิน เช่น จำนวนเงิน ชื่อนามสกุล หมายเลขโทรศัพท์ และอีเมลของผู้ชำระเงิน เราต้องการประมวลผลข้อมูลนี้ด้วยวิธีใดวิธีหนึ่ง เช่น ตรวจสอบจำนวนเงิน จัดทำรายการที่เหมาะสมในฐานข้อมูล ส่งให้กับผู้ใช้ SMS и อีเมลล์ พร้อมการยืนยันการรับการชำระเงินและคำแนะนำเพิ่มเติม ดังนั้นตัวคุณเอง ไมโครเซอร์วิส.

เกี่ยวกับ วิธีการ จาก ฟังก์ชั่นยานเดกซ์ ทำรายการในฐานข้อมูล คลาวด์ไฟร์สโตร์ เราได้ดูไปแล้วในบทช่วยสอน อลิซจำทุกอย่างได้ (และในอนาคตผมคิดว่าเราจะพิจารณาตัวอย่างสำหรับฐานข้อมูลอื่น - ฐานข้อมูลยานเดกซ์). เกี่ยวกับวิธีการส่งให้กับผู้ใช้ SMS และรวมแอปพลิเคชันของเราเข้ากับ ยานเดกซ์เงิน — เราจะจัดเรียงมันออกในอนาคตอันใกล้นี้ ตอนนี้เรามาจัดการกับการส่งจดหมายกันดีกว่า

1. สร้างบัญชีใน SendGrid

หมายเหตุSendGrid เป็นเพียงตัวเลือกของฉัน ซึ่งฉันทำด้วยเหตุผลหลายประการ เหตุผลหลักคือพวกเขามี SDK สำเร็จรูปสำหรับ Node.js คุณสามารถเลือกบริการส่งไปรษณีย์อื่น ๆ ได้

เราผ่าน สู่หน้าลงทะเบียนบัญชี และกรอกแบบฟอร์มลงทะเบียนที่นั่น แล้วเราก็ไป Dashboardในแผงการนำทาง ให้เลือก API อีเมล -> คู่มือการรวมระบบและบนแผงหลัก - เว็บ API และกดปุ่ม Choose. ทุกอย่างเป็นไปตามภาพ:

ฟังก์ชัน Yandex ส่งจดหมาย

ในขั้นตอนถัดไปเราเลือก Node.js:

ฟังก์ชัน Yandex ส่งจดหมาย

ต่อไปเรามากับของเรา API-ชื่อคีย์ (จะแสดงเฉพาะในคอนโซลในรายการคีย์และไม่เกี่ยวข้องกับโค้ดในอนาคตของเรา ฉันพบสิ่งที่ไม่เสื่อมคลาย สาธิต API คีย์) แล้วกดปุ่ม สร้างคีย์:

ฟังก์ชัน Yandex ส่งจดหมาย

คีย์จะถูกสร้างขึ้น เราจะคัดลอกและเก็บไว้เป็นความลับอย่างสุดซึ้ง และเราจะมีหน้าจอที่มีปุ่ม ตรวจสอบการรวมระบบดังภาพด้านล่าง แต่เราจะไม่คลิกมัน แต่มาเขียนโค้ดกันต่อ:

ฟังก์ชัน Yandex ส่งจดหมาย

2. การเขียนโค้ด

แต่อย่างที่คุณเห็นโค้ดนั้นมีขนาดเล็กมาก - 22 บรรทัด!

ฟังก์ชัน Yandex ส่งจดหมาย

ในสาย #8 อีเมลของฉันเป็นแบบฮาร์ดโค้ด (และซ่อนไว้อย่างเขินอาย) - โปรดระบุอีเมลของคุณ ในชีวิตจริงเราจะได้รับข้อมูลทั้งหมด (รวมถึง อีเมล) จากวัตถุ เหตุการณ์. เช่นถ้าวิธีการ POST วัตถุถูกส่งไปยังฟังก์ชันของเรา ผู้ใช้งาน พร้อมสนาม (ทรัพย์สิน) อีเมลสามารถรับค่าของฟิลด์นี้ได้ดังนี้:

const { user } = event;
const email = user.email;

และหากที่อยู่อีเมลถูกส่งผ่านไปยังฟังก์ชันโดยใช้วิธีการ GETตัวอย่างเช่น: https://functions.yandexcloud.net/123abc?[email protected]
ค่าพารามิเตอร์ อีเมล คุณสามารถได้สิ่งนี้:

const email = event.queryStringParameters.email;

เพื่อดูว่ามีอะไรอยู่ในวัตถุกันแน่ เหตุการณ์คุณสามารถสร้างสิ่งที่ง่ายที่สุดได้ ฟังก์ชันยานเดกซ์ และบิดมันด้วยคำถาม:

module.exports.handler = async function (event) {
  return {
   'statusCode': 200, 
   'body': JSON.stringify(event)
  };
};

มีการกล่าวถึงรายละเอียดเพิ่มเติม (แต่ไม่ชัดเจน) ในเอกสารอย่างเป็นทางการ ที่นี่.

ดังนั้นให้สร้างไดเร็กทอรีโปรเจ็กต์ (เช่น จดหมาย) ไปที่มัน เริ่มต้นโปรเจ็กต์ ติดตั้งการขึ้นต่อกัน:

mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv

ที่นี่ต้องใช้แพ็คเกจเท่านั้น @sendgrid/เมล. ถุงพลาสติก เครื่องมือตรวจสอบอีเมล ตรวจสอบความถูกต้องของที่อยู่อีเมล (ฉันไม่เดาทันทีได้อย่างไร) แต่ถ้าเราแน่ใจ (ตรวจสอบมานานแล้วโดยไม่มีเรา) เราก็ไม่จำเป็นต้องติดตั้ง (และของ แน่นอนเราไม่ต้องตรวจสอบในโค้ด) ถุงพลาสติก โดเทน ออกแบบมาเพื่ออ่านบันทึกจากไฟล์ .env เป็นตัวแปรรันไทม์ แต่ใน ฟังก์ชั่นยานเดกซ์ คุณสามารถวางตัวแปรเหล่านี้ลงในสภาพแวดล้อมรันไทม์ได้โดยตรง ยังไง? - ฉันจะแสดงมันด้านล่าง. ดังนั้นแพ็คเกจ โดเทน คุณยังไม่สามารถติดตั้งและไฟล์ได้ .env - อย่าสร้างและในขณะเดียวกันก็มีโค้ดอยู่ในไฟล์ index.js ห้ามเปลี่ยน. แต่ที่นี่เราได้ติดตั้งแพ็คเกจนี้แล้ว ดังนั้นเราจึงสร้างไฟล์ขึ้นมา index.js и .env:

touch index.js
touch .env

ในไฟล์ index.js เขียนโค้ด 22 บรรทัดที่แสดงในภาพหน้าจอด้านบน (เฉพาะในบรรทัดเท่านั้น) #8 เปลี่ยนอีเมลของคุณ) และในไฟล์ .env - (ไม่มีเครื่องหมายคำพูดหรือเครื่องหมายวรรคตอน) ระบุคู่ - ชื่อคีย์/ค่า APIซึ่งเราเพิ่งได้รับในคอนโซล SendGrid:
SENDGRID_API_KEY=คีย์ sendgrid-api-key ที่เป็นความลับของคุณ

และหากคุณต้องการงานน้อยลง ให้โคลนพื้นที่เก็บข้อมูลและติดตั้งแพ็คเกจ:

git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i

ในไฟล์ index.js, ในบรรทัด #8 เปลี่ยนอีเมล สร้างไฟล์ในไดเร็กทอรีราก .envและในนั้นระบุชื่อ/ค่าของคีย์ APIดังที่แสดงไว้ด้านบน

3. ปรับใช้

ไม่มากก็น้อยชัดเจนและมีรายละเอียดเกี่ยวกับ Yandex.Cloud และวิธีการวางไว้ตรงนั้น ฟังก์ชันยานเดกซ์ อธิบายไว้ในบทความของฉัน อลิซในดินแดนแห่ง Bitrix - ฉันส่งคนโง่เขลาไปยังประเทศนี้และสำหรับคนอื่น ๆ (และผู้ที่กลับมา) - จากนั้นเป็นหนังสือการ์ตูนเล่มเล็ก (เช่น ชุดรูปภาพและข้อความ)

สร้าง ไปรษณีย์-archive (ลองเรียกมันว่าตัวอย่างเช่น mailer.zip) ซึ่งเรารวมไดเร็กทอรีไว้ด้วย node_modules และไฟล์ .env, index.js - ทุกอย่างจากแค็ตตาล็อกโครงการของเรา:

ฟังก์ชัน Yandex ส่งจดหมาย

เราสร้างฟังก์ชั่นที่มีชื่อ... อย่างถูกต้อง - จดหมายในเมนูนำทางด้านซ้ายที่เราเข้าไป บรรณาธิการกรอกข้อมูลในช่องที่ต้องกรอก แล้วสลับไปที่แท็บ ไฟล์ ZIP ดาวน์โหลดไฟล์เก็บถาวรของเรา mailer.zip:

ฟังก์ชัน Yandex ส่งจดหมาย

และนี่คือตัวเลือกการดาวน์โหลดที่กล่าวถึงก่อนหน้านี้ คีย์เอพีไอ โดยตรงที่นี่ แทนที่จะสร้างไฟล์ในโครงการ .envและไม่ต้องติดตั้งแพ็คเกจ โดเทน. แต่เราได้ทำทั้งหมดนี้แล้ว ดังนั้นผมจึงแสดงไว้เพื่อเป็นข้อมูลเท่านั้น นั่นคือไม่จำเป็นต้องทำซ้ำ!

ฟังก์ชัน Yandex ส่งจดหมาย

ตอนนี้ที่มุมขวาบนให้คลิกปุ่ม สร้างเวอร์ชันและรอสองสามวินาที เมื่อทุกอย่างพร้อมเราจะไปที่ส่วนนั้นโดยอัตโนมัติ ทบทวน. ที่นั่นเราจะเปิดใช้งานตัวเลือก ฟังก์ชั่นสาธารณะเพื่อให้คุณสามารถโต้ตอบกับมันจากโลกภายนอกได้

ฟังก์ชัน Yandex ส่งจดหมาย

คุณเห็นลิงค์สีน้ำเงินตรงข้ามกับคำจารึก ลิงค์โทร? คลิกมัน หน้าต่างเบราว์เซอร์ที่ว่างเปล่าจะเปิดขึ้น... แต่เดี๋ยวก่อน - ฉันได้รับอีเมล:

ฟังก์ชัน Yandex ส่งจดหมาย

ตอนนี้คุณสามารถกลับไปที่คอนโซลได้แล้ว SendGridและกดปุ่ม ตรวจสอบการรวมระบบ. ระบบจะตรวจสอบทุกอย่างผ่านช่องทางของมัน และผลที่ได้ควรกลับมาหน้าจอดังนี้:

ฟังก์ชัน Yandex ส่งจดหมาย

แค่นั้นแหละผู้ชาย (และเด็กผู้หญิงด้วย) - ทุกอย่างเรียบง่ายและสง่างามจริงๆ! จะมีบทความเพิ่มเติม หากใครสนใจอ่านเรื่องแบบนี้ Subscribe ไว้จะได้ไม่พลาด

4. การบริจาค

ฟังก์ชัน Yandex ส่งจดหมาย

ที่มา: will.com

เพิ่มความคิดเห็น