79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package actions
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/smtp"
|
|
|
|
"github.com/mudler/LocalAgent/core/action"
|
|
"github.com/sashabaranov/go-openai/jsonschema"
|
|
)
|
|
|
|
func NewSendMail(config map[string]string) *SendMailAction {
|
|
return &SendMailAction{
|
|
username: config["username"],
|
|
password: config["password"],
|
|
email: config["email"],
|
|
smtpHost: config["smtpHost"],
|
|
smtpPort: config["smtpPort"],
|
|
}
|
|
}
|
|
|
|
type SendMailAction struct {
|
|
username string
|
|
password string
|
|
email string
|
|
smtpHost string
|
|
smtpPort string
|
|
}
|
|
|
|
func (a *SendMailAction) Run(ctx context.Context, params action.ActionParams) (string, error) {
|
|
result := struct {
|
|
Message string `json:"message"`
|
|
To string `json:"to"`
|
|
Subject string `json:"subject"`
|
|
}{}
|
|
err := params.Unmarshal(&result)
|
|
if err != nil {
|
|
fmt.Printf("error: %v", err)
|
|
|
|
return "", err
|
|
}
|
|
|
|
// Authentication.
|
|
auth := smtp.PlainAuth("", a.email, a.password, a.smtpHost)
|
|
|
|
// Sending email.
|
|
err = smtp.SendMail(
|
|
fmt.Sprintf("%s:%s", a.smtpHost, a.smtpPort),
|
|
auth, a.email, []string{
|
|
result.To,
|
|
}, []byte(result.Message))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return fmt.Sprintf("Email sent to %s", result.To), nil
|
|
}
|
|
|
|
func (a *SendMailAction) Definition() action.ActionDefinition {
|
|
return action.ActionDefinition{
|
|
Name: "send_email",
|
|
Description: "Send an email.",
|
|
Properties: map[string]jsonschema.Definition{
|
|
"to": {
|
|
Type: jsonschema.String,
|
|
Description: "The email address to send the email to.",
|
|
},
|
|
"subject": {
|
|
Type: jsonschema.String,
|
|
Description: "The subject of the email.",
|
|
},
|
|
"message": {
|
|
Type: jsonschema.String,
|
|
Description: "The message to send.",
|
|
},
|
|
},
|
|
Required: []string{"to", "subject", "message"},
|
|
}
|
|
}
|