Template
1
0
Fork 0
goth.stack/lib/email.go

101 lines
2.2 KiB
Go

package lib
import (
"crypto/tls"
"net/smtp"
"os"
)
func SendEmail(to_email string, from_email string, from_name string, html string, subject string) {
LogInfo.Println("Starting email sending process")
// Set up authentication information.
auth := smtp.PlainAuth(
"",
os.Getenv("SMTP_USERNAME"),
os.Getenv("SMTP_PASSWORD"),
os.Getenv("SMTP_HOST"),
)
LogSuccess.Println("Authentication set up")
// Connect to the server, authenticate, set the sender and recipient,
// and send the email all in one step.
msg := []byte("From: " + from_name + " <" + from_email + ">\r\n" +
"To: " + to_email + "\r\n" +
"Subject: " + subject + "\r\n" +
"Content-Type: text/html; charset=UTF-8" + "\r\n" +
"\r\n" +
html + "\r\n")
tlsconfig := &tls.Config{
InsecureSkipVerify: false,
ServerName: os.Getenv("SMTP_HOST"),
}
LogSuccess.Println("TLS configuration set up")
c, err := smtp.Dial(os.Getenv("SMTP_HOST") + ":587")
if err != nil {
LogError.Println("Error dialing SMTP server:", err)
return
}
LogSuccess.Println("Connected to SMTP server")
if err = c.StartTLS(tlsconfig); err != nil {
LogError.Println("Error starting TLS:", err)
return
}
LogInfo.Println("TLS started")
if err = c.Auth(auth); err != nil {
LogError.Println("Error authenticating with SMTP server:", err)
return
}
LogSuccess.Println("Authenticated with SMTP server")
if err = c.Mail(from_email); err != nil {
LogError.Println("Error setting sender address:", err)
return
}
LogSuccess.Println("Sender address set")
if err = c.Rcpt(to_email); err != nil {
LogError.Println("Error setting recipient address:", err)
return
}
LogSuccess.Println("Recipient address set")
w, err := c.Data()
if err != nil {
LogError.Println("Error getting write closer:", err)
return
}
LogSuccess.Println("Got write closer")
_, err = w.Write(msg)
if err != nil {
LogError.Println("Error writing message:", err)
return
}
LogSuccess.Println("Message written")
err = w.Close()
if err != nil {
LogError.Println("Error closing write closer:", err)
return
}
LogSuccess.Println("Write closer closed")
c.Quit()
LogSuccess.Println("Email sent successfully")
}