Files
TaskPool/internal/sdk/messenger/channels/email.go
T
2026-05-12 18:42:18 +08:00

51 lines
1.4 KiB
Go

package channels
import (
"fmt"
"github.com/engigu/baihu-panel/internal/sdk/message"
"strconv"
)
type EmailChannel struct{ *BaseChannel }
func NewEmailChannel() Channel {
return &EmailChannel{NewBaseChannel(ChannelEmail, []string{FormatTypeHTML, FormatTypeText})}
}
func (c *EmailChannel) Send(config ChannelConfig, msg *Message) (*Result, error) {
server := config.GetString("server")
portStr := config.GetString("port")
account := config.GetString("account")
passwd := config.GetString("passwd")
fromName := config.GetString("from_name")
toAccount := config.GetString("to_account")
if server == "" || account == "" || passwd == "" {
return SendError("email config missing: server, account, passwd are required"), nil
}
if toAccount == "" {
return SendError("email config missing: to_account is required"), nil
}
port, _ := strconv.Atoi(portStr)
contentType, formattedContent := c.FormatContent(msg)
var emailer message.EmailMessage
emailer.Init(server, port, account, passwd, fromName)
var errMsg string
switch contentType {
case FormatTypeText:
errMsg = emailer.SendTextMessage(toAccount, msg.Title, formattedContent)
case FormatTypeHTML:
errMsg = emailer.SendHtmlMessage(toAccount, msg.Title, formattedContent)
default:
errMsg = fmt.Sprintf("未知的邮件发送内容类型:%s", contentType)
}
if errMsg != "" {
return ErrorResultStr("", errMsg), nil
}
return SuccessResult(""), nil
}