Skip to content

Instantly share code, notes, and snippets.

@buroz
Created August 27, 2020 11:22
Show Gist options
  • Save buroz/eb4755f9c0aee41071da9dcbdc050d33 to your computer and use it in GitHub Desktop.
Save buroz/eb4755f9c0aee41071da9dcbdc050d33 to your computer and use it in GitHub Desktop.
package main
import (
"crypto/tls"
"flag"
"fmt"
"log"
"net"
"net/mail"
"net/smtp"
)
// SSL/TLS Email Example
func main() {
fmt.Println("8u202 | SMTP Check Tool \n")
usernamePtr := flag.String("username", "", "'string'")
passwordPtr := flag.String("password", "", "'string'")
hostPtr := flag.String("host", "", "'string'")
portPtr := flag.Int("port", 0, "number")
toPtr := flag.String("to", "", "'string'")
flag.Parse()
from := mail.Address{"", *usernamePtr}
to := mail.Address{"", *toPtr}
subj := "8u202 | SMTP Check Tool"
body := "IT WORKS!"
// Setup headers
headers := make(map[string]string)
headers["From"] = from.String()
headers["To"] = to.String()
headers["Subject"] = subj
// Setup message
message := ""
for k, v := range headers {
message += fmt.Sprintf("%s: %s\r\n", k, v)
}
message += "\r\n" + body
// Connect to the SMTP Server
servername := fmt.Sprintf("%s:%d", *hostPtr, *portPtr)
host, _, _ := net.SplitHostPort(servername)
auth := smtp.PlainAuth("", *usernamePtr, *passwordPtr, *hostPtr)
// TLS config
tlsconfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: host,
}
log.Println("Connecting to server...")
// Here is the key, you need to call tls.Dial instead of smtp.Dial
// for smtp servers running on 465 that require an ssl connection
// from the very beginning (no starttls)
conn, err := tls.Dial("tcp", servername, tlsconfig)
if err != nil {
log.Fatal(err)
}
c, err := smtp.NewClient(conn, host)
if err != nil {
log.Fatal(err)
}
// Auth
if err = c.Auth(auth); err != nil {
log.Fatal(err)
}
// To && From
if err = c.Mail(from.Address); err != nil {
log.Fatal(err)
}
if err = c.Rcpt(to.Address); err != nil {
log.Fatal(err)
}
// Data
w, err := c.Data()
if err != nil {
log.Fatal(err)
}
_, err = w.Write([]byte(message))
if err != nil {
log.Fatal(err)
}
err = w.Close()
if err != nil {
log.Fatal(err)
}
c.Quit()
fmt.Println("Email Sent Successfully!")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment