การส่งอีเมลจากแอปพลิเคชัน Python Flask ด้วย Twilio SendGrid

เผยแพร่แล้ว: 2020-06-30

การพิจารณาว่าจะสร้างหรือซื้อโครงสร้างพื้นฐานอีเมลของคุณไม่ใช่เรื่องเล็ก คุณมีแบนด์วิดท์เพื่อรองรับปัญหาการส่งมอบหรือไม่? คุณจะสามารถติดตามการส่งของคุณเมื่อคุณเติบโตได้หรือไม่ อะไรคุ้มค่ากว่ากัน? แม้ว่าจะมีปัจจัยหลายประการที่ต้องพิจารณา นั่นคือการสนทนาสำหรับคำแนะนำอื่น (เช่น คู่มือ Build it หรือ Buy It )

บทแนะนำนี้จะแสดงให้คุณเห็นว่าการส่งอีเมลผ่านบริการอีเมลเฉพาะนั้นง่ายเพียงใด เราจะอธิบายวิธีการส่งอีเมลผ่าน Twilio SendGrid โดยใช้ กรอบงาน Flask และ ส่วนขยาย Flask-Mail

เครื่องมือการสอน

เพื่อทำตามบทช่วยสอนนี้ คุณต้องมีสิ่งต่อไปนี้:

  • Python 3.6 หรือใหม่กว่า หากระบบปฏิบัติการของคุณไม่มีล่าม Python 3.6+ คุณสามารถไปที่ python.org เพื่อดาวน์โหลดตัวติดตั้ง
  • บัญชี Twilio SendGrid ฟรี หากคุณเพิ่งเริ่มใช้ Twilio SendGrid ให้ ลงชื่อสมัครใช้ บัญชีทดลองใช้ งาน ด้วยบัญชีทดลอง คุณสามารถส่งอีเมล 40,000 ฉบับเป็นเวลา 30 วัน จากนั้นส่ง 100 อีเมลต่อวันตลอดไป

เริ่มต้นใช้งาน SendGrid

ก่อนที่คุณจะสามารถส่งอีเมลผ่าน SendGrid คุณต้องสร้างคีย์ API ที่คุณจะใช้ตรวจสอบสิทธิ์การเข้าถึงบริการ SendGrid เข้าสู่ระบบ บัญชี SendGrid ของคุณ จากนั้นคลิกที่แถบด้านข้างด้านซ้าย เลือก "การตั้งค่า" จากนั้นเลือก คีย์ API คลิก "สร้างคีย์ API"

ตั้งชื่อที่เป็นมิตรให้กับคีย์ API ของคุณ (ทำให้มันง่ายและตรงไปตรงมาเพื่อให้คุณจำได้ว่ามันหมายถึงอะไร!) สำหรับบทช่วยสอนนี้ เราเลือกชื่อ Flask-Mail เราเลือก "การเข้าถึงแบบเต็ม" สำหรับการอนุญาต ซึ่งทำให้คีย์มีความสามารถในการดำเนินการฟังก์ชันการส่งอีเมลที่จำเป็นทั้งหมด (เข้าถึงปลายทาง GET, PATCH, PUT, DELETE และ POST) หากคุณต้องการสร้างคีย์ที่มีสิทธิ์เฉพาะเจาะจงมาก ให้เลือก “การเข้าถึงที่จำกัด” และกำหนดค่าการเข้าถึงของคุณตามต้องการ

เมื่อคุณคลิกปุ่ม "สร้างและดู" คุณจะเห็นคีย์ของคุณ คีย์นี้จะไม่แสดงอีก ดังนั้นคุณต้องคลิกเพื่อคัดลอกไปยังคลิปบอร์ด จากนั้นวางลงในเอกสารที่ปลอดภัยเพื่อให้คุณสามารถใช้งานได้ในภายหลัง หากคุณทำกุญแจหาย คุณจะต้องสร้างรหัสใหม่ เมื่อคุณบันทึกคีย์ของคุณแล้ว คุณสามารถคลิกปุ่ม "เสร็จสิ้น"

การสร้างสภาพแวดล้อม Python

เมื่อตั้งค่าเสร็จแล้ว เราสามารถเจาะลึกถึงวิธีการส่งอีเมลจากแอปพลิเคชัน Python Flask ได้ เราจะเริ่มต้นด้วยการสร้างไดเร็กทอรีใหม่บนคอมพิวเตอร์ของคุณชื่อ *twilio-sendgrid-tests* (หรืออย่างอื่นที่คล้ายกัน) แล้วสร้างสภาพแวดล้อมเสมือน Python ใหม่ภายในนั้น

สำหรับผู้ใช้ Mac และ Unix คำสั่งคือ:

สำหรับผู้ใช้ Windows คำสั่งคือ:

ถัดไป ติดตั้ง Flask, Flask-Mail และ python-dotenv ในสภาพแวดล้อมเสมือนของคุณ:

การตั้งค่าแอพพลิเคชั่น Flask

มาสร้างแอปพลิเคชั่น Flask และ Flask-Mail เริ่มต้นในไฟล์ app.py :

คุณสามารถดูวิธีกำหนดค่า Flask-Mail ให้ถูกต้องเพื่อใช้บริการ SMTP ของ SendGrid ได้ที่นี่ การตั้งค่าที่สำคัญคือ:

  • เซิร์ฟเวอร์อีเมลควรเป็น `smtp.sendgrid.net'
  • พอร์ตอีเมลควรเป็น 587 (คุณทราบหรือไม่ว่าต้องใช้พอร์ตใดเมื่อใด ลองดู โพสต์ในบล็อกนี้ )
  • ต้องเปิดใช้งาน TLS (อะไรคือความแตกต่างระหว่าง SSL และ TLS ?)
  • ต้องมีการตรวจสอบสิทธิ์ สำหรับชื่อผู้ใช้ คุณต้องใช้ "apikey" (ซึ่งเหมือนกันสำหรับบัญชี SendGrid ทั้งหมด) รหัสผ่านคือคีย์ SendGrid API ที่คุณสร้างไว้ในส่วนก่อนหน้า

สำหรับแอปพลิเคชัน Flask นี้ เราได้เพิ่มการตั้งค่าข้างต้นในคีย์การกำหนดค่าที่เหมาะสมสำหรับส่วนขยาย Flask-Mail ด้วยเหตุผลด้านความปลอดภัย เรานำเข้าคีย์ API จากตัวแปรสภาพแวดล้อมชื่อ `SENDGRID_API_KEY' นอกจากนี้เรายังตั้งค่าที่อยู่อีเมลผู้ส่งเริ่มต้นจากตัวแปรสภาพแวดล้อม นี่คือที่อยู่อีเมลที่จะปรากฏในฟิลด์ "จาก" ของอีเมลทั้งหมดโดยค่าเริ่มต้น

สร้าง ไฟล์ .env ด้วยตัวแปรที่จำเป็นสองตัว:

Flask จะนำเข้าตัวแปรที่กำหนดไว้ใน ไฟล์ .env โดยอัตโนมัติ (ตราบใดที่คุณติดตั้งแพ็คเกจ python-dotenv) ดังนั้นสิ่งนี้ก็เพียงพอแล้วที่จะนำตัวแปรทั้งสองนี้เข้าสู่การกำหนดค่าแอปพลิเคชัน Flask

กำลังส่งอีเมลทดสอบ

มาดูกันว่าคุณจะส่งอีเมลทดสอบให้ตัวเองจาก Python shell ได้อย่างไร:

โปรดทราบว่าเราเริ่ม Python shell ด้วยคำสั่ง `flask shell' เพื่อให้แน่ใจว่า มีการนำเข้า แอปพลิเคชัน Flask ที่เราสร้างใน app.py

เมื่ออยู่ในเชลล์แล้ว ให้นำเข้าอินสแตนซ์ "เมล" ที่เราสร้างใน app.py และคลาส "ข้อความ" จาก Flask-Mail:

ถัดไปสร้างอินสแตนซ์ "ข้อความ":

ขั้นตอนสุดท้ายคือการส่งอีเมลนี้:

และนั่นแหล่ะ! หากทุกอย่างเป็นไปตามแผน อีเมลควรมาถึงกล่องจดหมายของคุณในไม่กี่วินาที

หากคุณต้องการดูตัวอย่างเส้นทาง Flask ที่รวมฟังก์ชันนี้ คุณสามารถเพิ่มที่ด้านล่างของ app.py ได้ ง่ายๆ

ในการกรอกตัวอย่างแอปพลิเคชัน คุณต้องเพิ่ม ไฟล์เทมเพลต index.html ขั้นแรกให้สร้างไดเร็กทอรีสำหรับเทมเพลตของคุณ:

จากนั้นเขียนเนื้อหาต่อไปนี้ในไฟล์ templates/index.html :

เรียกใช้แอปพลิเคชันทดสอบด้วย:

จากนั้นไปที่ http://localhost:5000 ในเว็บเบราว์เซอร์ของคุณเพื่อเข้าถึงแอปพลิเคชัน

ตอนนี้คุณสามารถป้อนที่อยู่อีเมลของผู้รับ และเมื่อคุณคลิกปุ่ม อีเมลทดสอบจะถูกส่งไปยังที่อยู่นั้น

การแก้ไขปัญหาการจัดส่ง

การใช้แอปพลิเคชัน Flask ข้างต้นจะทำให้คุณส่งอีเมลได้สำเร็จ อย่างไรก็ตาม มีโอกาสที่อีเมลของคุณจะล้มเหลวในการส่ง เนื่องจาก SendGrid ส่งอีเมลแบบอะซิงโครนัส ข้อผิดพลาดในการจัดส่งส่วนใหญ่เกิดขึ้นหลังจากที่ผู้ส่งทำธุรกรรมฝั่งของตนเสร็จสิ้น ดังนั้นแอปพลิเคชันของคุณจะไม่มีการบ่งชี้ว่ามีข้อผิดพลาดเกิดขึ้น หากเกิดกรณีนี้ เป็นไปได้ว่าอีเมลถูกปฏิเสธโดยเซิร์ฟเวอร์อีเมลของผู้รับ

โชคดีที่ถ้าคุณประสบปัญหานี้โดยการส่งอีเมลตามที่เราได้อธิบายไว้ คุณสามารถใช้แดชบอร์ด Twilio SendGrid เพื่อช่วยคุณแก้ไขข้อบกพร่องของสิ่งที่เกิดขึ้นได้ จาก แดชบอร์ด SendGrid ให้คลิกที่ กิจกรรม จากนั้นคลิกปุ่ม "แสดงกิจกรรมทั้งหมด" ตรงกลางหน้า นี่จะแสดงรายชื่ออีเมลทั้งหมดที่คุณพยายามส่ง ระบุว่าอีเมลถูกส่งสำเร็จหรือไม่

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

เมื่อคุณทราบสาเหตุที่อีเมลของคุณไม่ส่ง มีหลายวิธีในการแก้ปัญหาการจัดส่งเหล่านั้น หากคุณเห็นการสะกดผิดหลายครั้งในอีเมล (เช่น @yaho.com หรือ @gmal.com) คุณควรลองใช้ เครื่องมือตรวจสอบความถูกต้องของอีเมล เพื่อตรวจ หาข้อผิดพลาดในการสะกดคำทั่วไปในรายชื่อผู้ติดต่ออีเมลของคุณ

ยังมีปัญหาอื่นๆ อีกมากมายที่อาจนำไปสู่การส่งที่ล้มเหลว รวมถึงชื่อเสียงในการส่งที่ไม่ดีหรือที่อยู่ IP ที่ถูกบล็อก เรียนรู้ทั้งหมดเกี่ยวกับความสามารถในการส่งอีเมลใน คู่มือการส่งอีเมล์ปี 2020 ของ เรา

บทสรุป

ดังที่คุณเห็นจากบทช่วยสอน Twilio SendGrid ผสานรวมเข้ากับเวิร์กโฟลว์การส่งอีเมล Flask เริ่มต้นได้อย่างง่ายดาย ทำให้การส่งอีเมลเป็นเรื่องง่าย

หากคุณกำลังสงสัยว่าคุณได้รับอีเมลจาก Flask Framework ใน Python ได้อย่างไร ไม่ต้องกังวล เรามีให้คุณ! ลองอ่านบทความนี้: วิธีรับอีเมลด้วย Flask Framework สำหรับ Python

และสำหรับแหล่งข้อมูลเพิ่มเติมเกี่ยวกับการผสานรวมกับ Twilio SendGrid หรือส่งผ่าน API ของเรา โปรดดู ศูนย์ความรู้ ของ เรา