การส่ง email เป็นจำนวนมากๆ ผ่านบริการ SendGrid

การส่ง email เป็นจำนวนมากๆ ผ่านบริการ SendGrid

ได้รับโจทย์จากหน่วยงานข้างเคียงว่า ตามที่ได้จัดการอบรมผ่านระบบออนไลน์ร่วมกับภาคการศึกษาของไทย ให้กับน้องๆ ที่ยังอยู่ในวัยเรียน เกี่ยวกับการใช้อินเทอร์เน็ตอย่างปลอดภัย ซึ่งเน้นการทำตัวหากโดนรังแกทางไซเบอร์ (Cyber Bullying) ซึ่งเป็นเทรนของเด็กรุ่นใหม่

การอบรมได้รับการตอบรับเป็นอย่างดี มีผู้เข้าร่วมการอบรมหลักหมื่นคน โดยผู้เข้ารับการอบรม จะได้รับใบประกาศนียบัตร หลังจากการอบรมผ่านทางอีเมล์ที่ลงทะเบียนไว้ และนี่คือแหล่ะปัญหา เนื่องจากไม่ได้คิดอย่างรอบคอบ ว่าหากต้องส่งอีเมล์ที่มีใบประกาศนียบัตรเป็นจำนวนมากๆ จะดำเนินการอย่างไร หลักสิบ หลักร้อย ใช้วิธี Brute-force หรือเอาแรงเข้าแรก ก็ไม่เหนื่อยมาก แต่หลักพันหลักหมื่น น่าจะมีปัญหาพอสมควร ทั้งคนเหนื่อย ทั้งระบบ email server ไม่รองรับ เนื่องจากการส่งอีเมล์จำนวนมากๆ ในเวลาสั้นๆ email sercurity product ส่วนใหญ่จะมองว่าเป็นแสปม

ก่อนหน้านี้ ผมได้เคยหาหนทางในการแก้ปัญหา การทำให้ระบบสารสนเทศสามารถส่งอีเมล์แจ้งเตือน หากมีเหตุการณ์สำคัญ เช่น user ลืม password ให้สามารถส่งอีเมล์ให้ผู้ใช้สามารถตั้งรหัสได้เอง โดยที่ไม่ต้องติดตั้ง email server เองภายในองค์กร หรือเรียกง่ายๆ คือใช้บริการ cloud email service นั่นเอง ซึ่งทำให้รู้จัก SendGrid ซึ่งเป็นบริการสำหรับการส่งอีเมล์จำนวนมากๆ เช่นการส่งอีเมล์ newsletter หรือ อีเมล์ประชาสัมพันธ์ต่างๆ ซึ่งน่าจะตอบโจทย์การแก้ปัญหาการส่งอีเมล์ให้น้องนักเรียนที่เข้าร่วมการอบรมในครั้งนี้

SendGrid สามารถส่งอีเมล์ได้ 2 แบบ คือ

  1. ทำตัวเป็น SMTP Relay ทำให้เราตั้งค่าโปรแกรม email client ให้ส่งอีเมล์ผ่าน SendGrid ได้เลย
  2. ทำงานผ่าน API สามารถเขียนโปรแกรมเรียกใช้งาน และส่งอีเมล์ผ่านโปรแกรมได้เลย

ซึ่งการใช้งานในแบบที่ 1 แม้จะแก้ปัญหาที่ email server หน่วยงานไม่สามารถส่งอีเมล์จำนวนเยอะๆ ในเวลาอันสั้นได้ แต่ยังไม่ได้แก้ปัญหาการใช้แรงงานคน ที่ต้องสร้างอีเมล์และส่งผ่าน email client อยู่ดี ทางเลือกแบบที่ 2 น่าจะแก้ปัญหาได้ดีกว่า

ทั้งนี้จึงได้โอกาสลองเขียน Python ซึ่งไม่ได้เขียนนานแล้ว ซึ่งอาจจะเป็นอีกบทความนึงที่อยากเขียนต่อไป (การเรียนรู้แบบ project based learning)

ทั้งนี้การเขียนโปรแกรมให้ส่งอีเมล์ผ่าน API ของ SendGrid ไม่ได้มีอะไรซับซ้อนเลย สามารถทำตามตัวอย่างที่มีได้เลย ซึ่งไม่จำกัดแค่ Python แต่ยังรองรับโปรแกรมที่เขียนด้วย Node.js, PHP, Java, Ruby, Go, C# และ cURL

ซึ่งแต่ละภาษาที่เลือก จะมีตัวอย่าง code ที่เรียกใช้งาน API เช่น ถ้าเขียนด้วย Python จะมี code แบบนี้

ดังนั้นสิ่งที่ต้องเตรียมก็มีไม่กี่อย่าง ประกอบด้วย

  1. Python environment พร้อมติดตั้ง library ที่เกี่ยวข้อง เช่น sendgrid library
  2. ไฟล์รายชื่อน้องๆ ที่เข้ารับการอบรม พร้อม อีเมล์ และชื่อไฟล์ใบประกาศนียบัตร ในรูปแบบ csv (comma separated value)
  3. ไฟล์ใบประกาศนียบัตรที่ตั้งชื่อตามข้อ 2

หลังจากนั้นก็ลองหาวิธีการใช้ python ในการจัดการกับข้อมูลใน csv file ตาม link นี้ https://www.analyticsvidhya.com/blog/2021/08/python-tutorial-working-with-csv-file-for-data-science/

หลังจากนั้นก็เขียน for loop ให้ส่งอีเมล์พร้อมใบประกาศนียบัตร ผ่านทาง API ของ SendGrid ได้เลย

จากที่ทดสอบ สามารถใช้งานได้ แต่อาจจะติดปัญหาว่า ส่งไปแล้ว ปลายทางมองเป็นแสปม อย่างน้อยก็แก้ปัญหาการส่งไปได้ ก็คงต้องให้คนที่รับผิดชอบ แจ้งต่อ ว่าอีเมล์หากไม่ได้รับให้ตรวจสอบในโฟล์เดอร์แสปมด้วย

หลังจากนี้ก็คงต้องให้ผู้ที่รับผิดชอบตัดสินใจต่อว่า จะไปต่อด้วยวิธีนี้ ก็จะต้องเสียค่าบริการให้กับ SendGrid เนื่องจากบัญชีฟรี สามารถส่งอีเมล์ได้แค่ 100 อีเมล์ต่อวัน