Esta pagina se ve mejor con JavaScript habilitado

Enviar emails desde script utilizando una cuenta de GMail

 ·  🎃 kr0m

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:

emerge -av dev-lang/go

Instalamos la librerĂ­a gomail:

mkdir go
export GOPATH=/root/go
go get gopkg.in/gomail.v2

Programamos el script:

vi smtp-gmail-send.go

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:

go build -o /bin/smtp-gmail-send smtp-gmail-send.go

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.

Si te ha gustado el artĂ­culo puedes invitarme a un RedBull aquĂ­