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 MAILGUN_FROM="Rob the Robot " */ to := flag.String("to", "", "message recipient in the format of 'John Doe '") replyTo := flag.String("reply-to", "", "reply-to in the format of 'John Doe '") 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") from := os.Getenv("MAILGUN_FROM") 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 }