2023-05-18 20:04:55 -06:00
|
|
|
package lib
|
|
|
|
|
|
|
|
import (
|
2024-03-09 00:28:29 -06:00
|
|
|
"crypto/tls"
|
|
|
|
"net/smtp"
|
2023-05-18 20:04:55 -06:00
|
|
|
"os"
|
|
|
|
)
|
|
|
|
|
2024-03-09 00:28:29 -06:00
|
|
|
func SendEmail(to_email string, from_email string, from_name string, html string, subject string) {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogInfo.Println("Starting email sending process")
|
2023-05-18 20:04:55 -06:00
|
|
|
|
2024-03-09 00:28:29 -06:00
|
|
|
// Set up authentication information.
|
|
|
|
auth := smtp.PlainAuth(
|
|
|
|
"",
|
|
|
|
os.Getenv("SMTP_USERNAME"),
|
|
|
|
os.Getenv("SMTP_PASSWORD"),
|
|
|
|
os.Getenv("SMTP_HOST"),
|
|
|
|
)
|
2023-05-18 20:04:55 -06:00
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Authentication set up")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
// 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"),
|
2023-05-18 20:04:55 -06:00
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("TLS configuration set up")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
c, err := smtp.Dial(os.Getenv("SMTP_HOST") + ":587")
|
2023-05-18 20:04:55 -06:00
|
|
|
if err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error dialing SMTP server:", err)
|
2024-03-09 00:28:29 -06:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Connected to SMTP server")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
if err = c.StartTLS(tlsconfig); err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error starting TLS:", err)
|
2023-05-18 20:04:55 -06:00
|
|
|
return
|
|
|
|
}
|
2024-03-09 00:28:29 -06:00
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogInfo.Println("TLS started")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
if err = c.Auth(auth); err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error authenticating with SMTP server:", err)
|
2024-03-09 00:28:29 -06:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Authenticated with SMTP server")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
if err = c.Mail(from_email); err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error setting sender address:", err)
|
2024-03-09 00:28:29 -06:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Sender address set")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
if err = c.Rcpt(to_email); err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error setting recipient address:", err)
|
2024-03-09 00:28:29 -06:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Recipient address set")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
w, err := c.Data()
|
|
|
|
if err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error getting write closer:", err)
|
2024-03-09 00:28:29 -06:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Got write closer")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
_, err = w.Write(msg)
|
|
|
|
if err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error writing message:", err)
|
2024-03-09 00:28:29 -06:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Message written")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
err = w.Close()
|
|
|
|
if err != nil {
|
2024-05-08 14:43:57 -06:00
|
|
|
LogError.Println("Error closing write closer:", err)
|
2024-03-09 00:28:29 -06:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Write closer closed")
|
2024-03-09 00:28:29 -06:00
|
|
|
|
|
|
|
c.Quit()
|
|
|
|
|
2024-05-08 14:43:57 -06:00
|
|
|
LogSuccess.Println("Email sent successfully")
|
2023-05-18 20:04:55 -06:00
|
|
|
}
|