package lib
import (
"crypto/tls"
"fmt"
"net"
"net/smtp"
)
var (
smtpHost, smtpPort, smtpUser, smtpPass, smtpFrom, smtpFromName string
)
func SendEmail(to, fromName, subject, content string) error {
if smtpHost == "" { return nil }
displayName := smtpFromName
if fromName != "" {
displayName = fromName + " via inou"
}
html := wrapEmail(content)
msg := "From: " + displayName + " <" + smtpFrom + ">\r\n" +
"To: " + to + "\r\n" +
"Subject: " + subject + "\r\n" +
"MIME-Version: 1.0\r\n" +
"Content-Type: text/html; charset=utf-8\r\n\r\n" + html
conn, err := net.Dial("tcp", smtpHost+":"+smtpPort)
if err != nil { return err }
defer conn.Close()
client, err := smtp.NewClient(conn, smtpHost)
if err != nil { return err }
defer client.Close()
if err = client.StartTLS(&tls.Config{ServerName: smtpHost}); err != nil { return err }
if err = client.Auth(smtp.PlainAuth("", smtpUser, smtpPass, smtpHost)); err != nil { return err }
if err = client.Mail(smtpFrom); err != nil { return err }
if err = client.Rcpt(to); err != nil { return err }
w, err := client.Data()
if err != nil { return err }
_, err = w.Write([]byte(msg))
if err != nil { return err }
return w.Close()
}
func wrapEmail(content string) string {
return fmt.Sprintf(`
`, content)
}