Created
October 9, 2017 01:10
-
-
Save guinso/4b9476ef5293c83840488938a171e885 to your computer and use it in GitHub Desktop.
Simple SMTP sample
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"crypto/tls" | |
"fmt" | |
"log" | |
"net/smtp" | |
"strings" | |
) | |
//https://hackernoon.com/golang-sendmail-sending-mail-through-net-smtp-package-5cadbe2670e0 | |
func main() { | |
var ( | |
serverAddr = "smtp.gmail.com" | |
password = "your-password" | |
emailAddr = "your-email@gmail.com" | |
portNumber = 465 | |
tos = []string{ | |
"friendA@yahoo.com", | |
"friendB@hotmail.com", | |
} | |
cc = []string{ | |
"friendC@yandex.com", | |
} | |
) | |
log.Println("======= Test Gmail client =========") | |
log.Println("NOTE: user need to turn on 'less secure apps' options") | |
log.Println("URL: https://myaccount.google.com/lesssecureapps\n\r") | |
tlsConfig := tls.Config{ | |
ServerName: serverAddr, | |
InsecureSkipVerify: true, | |
} | |
log.Println("Establish TLS connection") | |
conn, connErr := tls.Dial("tcp", fmt.Sprintf("%s:%d", serverAddr, portNumber), &tlsConfig) | |
if connErr != nil { | |
log.Panic(connErr) | |
} | |
defer conn.Close() | |
log.Println("create new email client") | |
client, clientErr := smtp.NewClient(conn, serverAddr) | |
if clientErr != nil { | |
log.Panic(clientErr) | |
} | |
defer client.Close() | |
log.Println("setup authenticate credential") | |
auth := smtp.PlainAuth("", emailAddr, password, serverAddr) | |
if err := client.Auth(auth); err != nil { | |
log.Panic(err) | |
} | |
log.Println("Start write mail content") | |
log.Println("Set 'FROM'") | |
if err := client.Mail(emailAddr); err != nil { | |
log.Panic(err) | |
} | |
log.Println("Set 'TO(s)'") | |
for _, to := range tos { | |
if err := client.Rcpt(to); err != nil { | |
log.Panic(err) | |
} | |
} | |
writer, writerErr := client.Data() | |
if writerErr != nil { | |
log.Panic(writerErr) | |
} | |
//basic email headers | |
sampleMsg := fmt.Sprintf("From: %s\r\n", emailAddr) | |
sampleMsg += fmt.Sprintf("To: %s\r\n", strings.Join(tos, ";")) | |
if len(cc) > 0 { | |
sampleMsg += fmt.Sprintf("Cc: %s\r\n", strings.Join(cc, ";")) | |
} | |
sampleMsg += fmt.Sprintf("Subject: %s\r\n", "Golang example send mail in HTML format") | |
//enable HTML format message | |
sampleMsg += "Mime-Version: 1.0\r\n" | |
sampleMsg += "Content-Type: text/html; charset=\"utf-8\"" | |
sampleMsg += "Content-Transfer-Encoding: 7bit" | |
//email message | |
sampleMsg += fmt.Sprintf("\r\n%s", "<html><body><h1>Hi There</h1>"+ | |
"<p>this is sample email sent via golang program</p></body></html>") | |
log.Println("Write content into client writter I/O") | |
if _, err := writer.Write([]byte(sampleMsg)); err != nil { | |
log.Panic(err) | |
} | |
if closeErr := writer.Close(); closeErr != nil { | |
log.Panic(closeErr) | |
} | |
client.Quit() | |
log.Print("done.") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment