54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
// +build !debug_mail_transfer
|
|
// Copyright (c) 2023 Julian Müller (ChaoticByte)
|
|
|
|
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"fmt"
|
|
"net/smtp"
|
|
"time"
|
|
)
|
|
|
|
|
|
func sendMails(smtpConf SmtpSettings, auth smtp.Auth, to string, data [][]byte) error {
|
|
addr := fmt.Sprintf("%v:%v", smtpConf.ServerHost, smtpConf.ServerPort)
|
|
logger.debug("Connecting to mail server at " + addr + " ...")
|
|
connection, err := smtp.Dial(addr)
|
|
if err != nil { return err }
|
|
defer connection.Close()
|
|
// can leave out connection.Hello
|
|
hasTlsExt, _ := connection.Extension("starttls")
|
|
if hasTlsExt {
|
|
err = connection.StartTLS(&tls.Config{ServerName: smtpConf.ServerHost})
|
|
if err != nil { return err }
|
|
logger.debug("Mail Server supports StartTLS")
|
|
} else {
|
|
logger.debug("Mail Server doesn't support StartTLS")
|
|
}
|
|
logger.debug("Authenticating to mail server ...")
|
|
err = connection.Auth(auth)
|
|
if err != nil { return err }
|
|
if logger.LogLevel >= 3 {
|
|
fmt.Printf("DEBUG %v Sending mails to server ", time.Now().Format("2006/01/02 15:04:05.000000"))
|
|
}
|
|
for _, d := range data {
|
|
err = connection.Mail(smtpConf.From)
|
|
if err != nil { return err }
|
|
err = connection.Rcpt(to)
|
|
if err != nil { return err }
|
|
writer, err := connection.Data()
|
|
if err != nil { return err }
|
|
_, err = writer.Write(d)
|
|
if err != nil { return err }
|
|
err = writer.Close()
|
|
if err != nil { return err }
|
|
if logger.LogLevel >= 3 {
|
|
print(".")
|
|
}
|
|
}
|
|
if logger.LogLevel >= 3 {
|
|
print("\n")
|
|
}
|
|
return connection.Quit()
|
|
}
|