Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Enviar emails desde script utilizando una cuenta de GMail


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:

  • Si 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, aquí 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.


Autor: Kr0m -- 29/03/2018 19:33:56