| 
									
										
										
										
											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 | 
					
						
							|  |  |  | } |