Menu Close

Go : ส่งอีเมลด้วย net/smtp

บล็อคนี้จะเป็นตัวอย่างการเขียนโปรแกรมส่งอีเมลด้วยภาษา Golang ในตัวอย่างนี้จะใช้การส่งอีเมลด้วย GMail ซึ่งเราสามารถใช้ไลบรารี่พื้นฐานชื่อ net/smtp ในการเรียกใช้งานได้เลย

การส่งอีเมลจะใช้ 2 ฟังก์ชัน ได้แก่ PlainAuth และ SendMail

  • PlainAuth จะใช้ทำการยืนยันตัวตน เก็บค่า username, password (การทดสอบนี้จะเขียน username และ password ในโค้ดตรงๆ เลย แต่การปฏิบัติจริง ควรจะเก็บค่าไว้ในไฟล์ .env แล้วเรียกมาใช้งาน)
  • SendMail จะทำให้ที่ติดต่อกับเซิฟเวอร์ และทำการเปลี่ยนเป็นช่องทาง TLS ถ้าเป็นไปได้

โค้ดข้างล่างนี้เป็นโค้ดสำเร็จ ที่จะทำการส่งอีเมลด้วยภาษา Golang

package main

import (
  "fmt"
  "net/smtp"
)

func main() {

  // Sender data.
  from := "from@gmail.com" // <------------- (1) แก้ไขอีเมลที่ใช้ส่ง
  password := "<Email Password>" // <------- (2) แก้ไขรหัสผ่านของอีเมลที่ใช้ส่ง

  // Receiver email address.
  to := []string{
    "sender@example.com", // <-------------- (3) แก้ไขอีเมลของผู้รับ หากใส่หลายเมล จะไปอยู่ที่ cc
  }

  // smtp server configuration.
  smtpHost := "smtp.gmail.com"
  smtpPort := "587"

  // Message.
  message := []byte("This is a test email message.")
  
  // Authentication.
  auth := smtp.PlainAuth("", from, password, smtpHost)
  
  // Sending email.
  err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, message)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println("Email Sent Successfully!")
}

เมื่อเราแก้ไข ชื่ออีเมล รหัสผ่าน และอีเมลที่จะส่งไปถึง เรียบร้อยแล้ว กดรันโปรแกรม

go run main.go

ผลลัพธ์ที่ได้ โปรแกรมอาจจะฟ้องว่า ไม่ยอมรับการยืนยันตัวตนจาก username และ password นี้ ขอให้ไปอ่านเพิ่มเติมที่ลิงค์ในข้อความ

https://support.google.com/mail/?p=BadCredentials

แล้วจะมีอีเมลแจ้งการเข้าใช้งานอีเมลของเราจากโปรแกรมที่ไม่ปลอดภัย ให้เรากดเข้าไป Check activity แล้วดำเนินตามคำแนะนำของ GMail ได้เลย

การปลดล็อกการส่งเมลของ GMail

ในกรณีที่เราเขียนโปรแกรมเสร็จแล้ว แต่ไม่สามารถลงชื่อเข้าใช้ GMail ผ่านโค้ดโปรแกรมได้ ให้ทำการปลดล็อคความปลอดภัยดังนี้

1.เข้าไปที่หน้า แอปที่มีความปลอดภัยน้อยและบัญชี Google ของคุณ เพื่อทำการปลอดล็อกความปลอดภัยให้สามารถยืนยันตัวตนผ่านการเขียนโค้ดโปรแกรมได้

https://support.google.com/accounts/answer/6010255

2.กดที่ลิ้งค์ในข้อที่ 1 แล้วกดเปิด การอนุญาตแอปที่มีความปลอดภัยน้อย : เปิด

สรุป

การเขียนโปรแกรมส่งอีเมลด้วยภาษา Golang สามารถทำได้โดยใช้ไลบรารี่พื้นฐาน net/smtp ได้เลย และเมื่อเราเขียนโปรแกรมเสร็จเรียบร้อยแล้วจะต้องไปปลดล็อคความปลอดภัยในบัญชีของ GMail ด้วย

และที่สำคัญโค้ดโปรแกรมนี้จะมีทั้ง username และ password ของอีเมล เพื่อความปลอดภัยไม่ควรจะเขียน username และ password ของอีเมลตรงๆ ใส่ลงไปในโค้ด เราควรจะกำหนดค่าไว้ในไฟล์ .env แล้วเรียกมาใช้งาน เนื่องจากไฟล์ .env ปกติแล้วจะเก็บค่าการตั้งค่าต่างๆ ของโปรแกรมเอาไว้และจะไม่อัพโหลดเข้า git repository ด้วย ดังนั้นหากทำการอัพโหลดโค้ดเข้า git repository แล้ว ก็จะไม่ทำให้ username และ password ถูกเปิดเผยได้

เพิ่มเติม การส่งอีเมลด้วย net/smtp แบบ SSL SMTP

อ้างอิง

  1. https://www.loginradius.com/blog/async/sending-emails-with-golang/
  2. https://gist.github.com/jpillora/cb46d183eca0710d909a

Posted in golang

ใส่ความเห็น