En varias ocasiones es necesario enviar emails desde un servidor, ya sea para alertar sobre algĂșn evento o mandar algĂșn tipo de informe, normalmente se hace instalando un postfix local y enviando el mail con el comando mail pero este mĂ©todo tiene algunos inconvenientes’, ‘\tSi se envĂan muchos emails la ip del server terminarĂĄ en alguna blacklist. Tenemos un servicio adicional funcionando en nuestro server con lo que implica en cuanto a recursos consumidos y problemas de seguridad. La soluciĂłn pasa por emplear una cuenta de GMail externa.
Vamos a utilizar un pequeño script en Go:
Instalamos la librerĂa gomail:
export GOPATH=/root/go
go get gopkg.in/gomail.v2
Programamos el script:
package main
import (
"os"
"strings"
"crypto/tls"
"gopkg.in/gomail.v2"
)
func main() {
from := os.Args[1]
toRaw := os.Args[2]
pass := os.Args[3]
subject := os.Args[4]
body := os.Args[5]
d := gomail.NewDialer("smtp.gmail.com", 587, from, pass)
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
m := gomail.NewMessage()
m.SetHeader("From", from)
m.SetHeader("Subject", subject)
m.SetBody("text/html", body)
toSplitted := strings.Split(toRaw, " ")
for _,to := range toSplitted {
m.SetHeader("To", to)
if err := d.DialAndSend(m); err != nil {
panic(err)
}
}
}
Lo ejecutamos primero para comprobar que no dé problemas:
go run smtp-gmail-send.go USERNAME@gmail.com "DEST1@gmail.com DEST2@gmail.com" PASSWORD "testSubject: SUBJECT:SUBJECT" "BODY:BODY"
Lo compilamos:
No soy ningĂșn experto en Go ni mucho menos, asĂ que seguramente se pueda mejorar, por ejemplo el envĂo de mails a varios destinatarios se podrĂa hacer en una sola lĂnea sin tener que ejecutar el bucle.