มาส่ง Email ด้วย Golang กันเถอะ

Saharak Manoo
2 min readDec 30, 2020

https://www.activecampaign.com/blog/email-video

เนื่องจาก ผมกำลังเขียน ETrackings Service ใหม่ทั้งหมดด้วยภาษา Golang + GIN และ พอดีว่า ETrackings ของผมมันต้องมี Service สำหรับการส่ง Email ใช้สำหรับ Forgot password, Confirmation Email หรือ แม้กระทั้ง Email สำหรับการแจ้งเตือนสถานะของพัสดุ จากตอนแรกที่ใช้ Action Mailer ของ Ruby on Rails ทำให้จำเป้นต้องหา library ของภาษา Golang เพื่อนำมาใช้ครับ

ในวันนี้ผมจะมาสอนใช้แบบง่ายๆ ก่อนนะครับ

โดยผมได้เลือกใช้ library ชื่อว่า gomail.v2

สิ่งที่ต้องเตรียมไว้นะครับ

  • Project Golang พร้อมรันแล้ว
  • รู้จัก Email แบบ STMP มี username, password, post, host

ถ้าทุกอย่างพร้อมแล้ว เราก็มาเริ่มทำกันเลยครับ

ไปที่ Project ของเรา และใช้คำสั่งนี้ใน Termin

go get gopkg.in/gomail.v2

ต่อไปเราก็จะนำค่า username, password, post, host มา set เป็น ENV โดยของผมจะใช้เป็น godotenv เนื่องจากติดการใช้ ENV แบบนี้มาจาก Ruby on Rails

เพื่อใช้ในการเรียกค่าจากไฟล์ .env ในตัวอย่างจะเป็น smtp ของ google gmail นะครับ

# MailerMAILER_HOST=smtp.gmail.comMAILER_PORT=587MAILER_USERNAME=username@gmail.comMAILER_PASSWORD=password

หลังจากนั้นก็สร้าง Config file กันต่อ

โดยของผมจะสร้างเป็น Config > mailer.go ข้างในก็จะเป็นประมาณนี้

ต่อไปก็สร้าง Services > mailer.go

และขั้นตอนสุดท้าย เราก็จะมา Connect และลองส่ง Email กัน

ไปที่ไฟล์ หลักของคุณ ในที่นี้ของผมจะเป็น server.go

ให้เราเพิ่ม Code ไปดังนี้

อันนี้จะเป็น Code เพื่อดึงค่า จาก .ENV file ตาม key ที่เราใส่ไปนะครับ และส่งค่านี้ไปให้ ไฟล์ config > mailer.go และ Set ค่าให้ config.Mailer เพื่อเรียกใช้งานที่ไหนก็ได้ในโปรเจคของเรา

หลังจาก Setup เสร็จเราก็จะมาลองส่งไปหาเมล จริงๆกันครับ

อันนี้เป็น code ที่สร้างสร้างไว้ตรงไหนก็ได้นะครับ เช่น อยากให้ส่งตอนมีคนขอ Forgot Password มา แต่อันนี้ผมจะลองแบบ Run project และส่งเลยละกันครับ

ให้เราเพิ่ม Code ต่อจาก server.go หลังจากรัน ConnectMailer ไปแล้ว

To ก็คือ ส่งให้ใครนะครับ

Subject หัวข้อของอีเมลที่ส่งไป

Body เป็นส่วนเนื้อหาด้านใน เขียนเป็น Html แบบของ Action mailer ของ Ruby on Rails เลยครับ

m := services.Mailer{} และ m.Send() เป็น ฟังก์ชั่นที่เราเขียนขึ้นมาเอง ใน services > mailer.go

เพียงเท่านี้ก็ เสร็จแล้ว เราสามารถลอง Run project เพื่อทำการส่ง Email ได้เลยครับ

โดยใช้คำสั่ง

go run main.go 

หรือถ้าใช้ docker compose ก็

docker-compose up

เรียบร้อย สามารถส่ง Email ได้จริงครับ

ขอบคุณทุกท่านที่อ่านจนจบครับ

Saharak Manoo
Saharak Manoo

No responses yet

Write a response