mirror of
https://github.com/hay-kot/homebox.git
synced 2024-11-23 00:55:43 +00:00
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
// Package mailer provides a simple interface to send emails using SMTP.
|
|
package mailer
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"mime"
|
|
"net/smtp"
|
|
"strconv"
|
|
)
|
|
|
|
type Mailer struct {
|
|
Host string `json:"host,omitempty"`
|
|
Port int `json:"port,omitempty"`
|
|
Username string `json:"username,omitempty"`
|
|
Password string `json:"password,omitempty"`
|
|
From string `json:"from,omitempty"`
|
|
}
|
|
|
|
func (m *Mailer) Ready() bool {
|
|
return m.Host != "" && m.Port != 0 && m.Username != "" && m.Password != "" && m.From != ""
|
|
}
|
|
|
|
func (m *Mailer) server() string {
|
|
return m.Host + ":" + strconv.Itoa(m.Port)
|
|
}
|
|
|
|
func (m *Mailer) Send(msg Message) error {
|
|
server := m.server()
|
|
|
|
header := map[string]string{
|
|
"From": m.From,
|
|
"Subject": mime.QEncoding.Encode("UTF-8", msg.Subject),
|
|
"MIME-Version": "1.0",
|
|
"Content-Type": "text/html; charset=\"utf-8\"",
|
|
"Content-Transfer-Encoding": "base64",
|
|
}
|
|
|
|
message := ""
|
|
for k, v := range header {
|
|
message += fmt.Sprintf("%s: %s\r\n", k, v)
|
|
}
|
|
message += "\r\n" + base64.StdEncoding.EncodeToString([]byte(msg.Body))
|
|
|
|
return smtp.SendMail(
|
|
server,
|
|
smtp.PlainAuth("", m.Username, m.Password, m.Host),
|
|
m.From,
|
|
msg.ToAddresses(),
|
|
[]byte(message),
|
|
)
|
|
}
|