UPDATE: Auth module, User module
Some checks failed
Build and Release / release (push) Failing after 1m25s
Some checks failed
Build and Release / release (push) Failing after 1m25s
This commit is contained in:
70
pkg/email/email.go
Normal file
70
pkg/email/email.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package email
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"history-api/assets"
|
||||
"history-api/pkg/config"
|
||||
"history-api/pkg/constants"
|
||||
"strings"
|
||||
|
||||
"github.com/wneessen/go-mail"
|
||||
)
|
||||
|
||||
func SendMailOTP(toEmail, otpCode string, tokenType constants.TokenType) error {
|
||||
userSmtp, err := config.GetConfig("SMTP_USER")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
passSmtp, err := config.GetConfig("SMTP_PASS")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var subject string
|
||||
var templatePath string
|
||||
|
||||
switch tokenType {
|
||||
case constants.TokenPasswordReset:
|
||||
subject = "Your Password Reset Code"
|
||||
templatePath = "resources/password_reset.html"
|
||||
case constants.TokenEmailVerify:
|
||||
subject = "Verify your email address"
|
||||
templatePath = "resources/email_verify.html"
|
||||
default:
|
||||
return fmt.Errorf("invalid token type: %v", tokenType)
|
||||
}
|
||||
htmlTemplate, err := assets.GetFileContent(templatePath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read email template: %s", err)
|
||||
}
|
||||
|
||||
message := mail.NewMsg()
|
||||
if err := message.From(userSmtp); err != nil {
|
||||
return fmt.Errorf("failed to set From email address: %s", err)
|
||||
}
|
||||
if err := message.To(toEmail); err != nil {
|
||||
return fmt.Errorf("failed to set To email address: %s", err)
|
||||
}
|
||||
|
||||
finalHTML := strings.ReplaceAll(htmlTemplate, "{{OTP_CODE}}", otpCode)
|
||||
|
||||
message.Subject(subject)
|
||||
message.SetBodyString(mail.TypeTextHTML, finalHTML)
|
||||
client, err := mail.NewClient(
|
||||
"smtp.gmail.com",
|
||||
mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover),
|
||||
mail.WithTLSPortPolicy(mail.TLSMandatory),
|
||||
mail.WithUsername(userSmtp),
|
||||
mail.WithPassword(passSmtp),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create mail client: %s", err)
|
||||
}
|
||||
|
||||
err = client.DialAndSend(message)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to send mail: %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user