2020-05-13 06:11:06 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
mailgun "github.com/mailgun/mailgun-go/v3"
|
|
|
|
|
|
|
|
_ "github.com/joho/godotenv/autoload"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
/*
|
|
|
|
MAILGUN_API_KEY=key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
|
MAILGUN_DOMAIN=mail.example.com
|
2020-05-13 09:41:03 +00:00
|
|
|
MAILER_FROM="Rob the Robot <rob.the.robot@mail.example.com>"
|
2020-05-13 06:11:06 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
to := flag.String("to", "", "message recipient in the format of 'John Doe <john@example.com>'")
|
|
|
|
replyTo := flag.String("reply-to", "", "reply-to in the format of 'John Doe <john@example.com>'")
|
|
|
|
subject := flag.String("subject", "Test Subject", "the utf8-encoded subject of the email")
|
|
|
|
text := flag.String(
|
|
|
|
"text",
|
|
|
|
"Testing some Mailgun awesomeness!",
|
|
|
|
"the body of the email as utf8-encoded plain-text format",
|
|
|
|
)
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
if 0 == len(*to) {
|
|
|
|
flag.Usage()
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
domain := os.Getenv("MAILGUN_DOMAIN")
|
|
|
|
apiKey := os.Getenv("MAILGUN_API_KEY")
|
2020-05-13 09:41:03 +00:00
|
|
|
from := os.Getenv("MAILER_FROM")
|
2020-05-13 06:11:06 +00:00
|
|
|
|
|
|
|
if 0 == len(*text) {
|
|
|
|
*text = "Testing some Mailgun awesomeness!"
|
|
|
|
}
|
|
|
|
|
|
|
|
msgId, err := SendSimpleMessage(domain, apiKey, *to, from, *subject, *text, *replyTo)
|
|
|
|
if nil != err {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
fmt.Printf("Queued with Message ID %q\n", msgId)
|
|
|
|
}
|
|
|
|
|
|
|
|
func SendSimpleMessage(domain, apiKey, to, from, subject, text, replyTo string) (string, error) {
|
|
|
|
mg := mailgun.NewMailgun(domain, apiKey)
|
|
|
|
m := mg.NewMessage(from, subject, text, to)
|
|
|
|
if 0 != len(replyTo) {
|
|
|
|
// mailgun's required "h:" prefix is added by the library
|
|
|
|
m.AddHeader("Reply-To", replyTo)
|
|
|
|
}
|
|
|
|
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
|
|
|
|
defer cancel()
|
|
|
|
|
|
|
|
_, id, err := mg.Send(ctx, m)
|
|
|
|
return id, err
|
|
|
|
}
|