Switched to SMTP for email so I can use FastMail
This commit is contained in:
parent
b11a745547
commit
b39679740c
4 changed files with 111 additions and 24 deletions
|
@ -1,6 +1,9 @@
|
|||
CLERK_SECRET_KEY=""
|
||||
CLERK_WEBHOOK_SECRET=""
|
||||
RESEND_API_KEY=""
|
||||
SMTP_HOST=""
|
||||
SMTP_PORT=""
|
||||
SMTP_USERNAME=""
|
||||
SMTP_PASSWORD=""
|
||||
STRIPE_SECRET_KEY=""
|
||||
REDIS_HOST=""
|
||||
REDIS_PASSWORD=""
|
||||
|
|
11
go.mod
11
go.mod
|
@ -12,9 +12,9 @@ require (
|
|||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/dlclark/regexp2 v1.11.0 // indirect
|
||||
github.com/go-jose/go-jose/v3 v3.0.2 // indirect
|
||||
github.com/go-jose/go-jose/v3 v3.0.3 // indirect
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
||||
github.com/golang/protobuf v1.5.3 // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
github.com/google/go-cmp v0.6.0 // indirect
|
||||
github.com/labstack/gommon v0.4.2 // indirect
|
||||
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
||||
|
@ -25,12 +25,13 @@ require (
|
|||
golang.org/x/text v0.14.0 // indirect
|
||||
golang.org/x/time v0.5.0 // indirect
|
||||
google.golang.org/appengine v1.6.8 // indirect
|
||||
google.golang.org/protobuf v1.32.0 // indirect
|
||||
google.golang.org/protobuf v1.33.0 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/alecthomas/assert/v2 v2.4.1 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.2.1
|
||||
github.com/clerkinc/clerk-sdk-go v1.49.0
|
||||
github.com/disintegration/imaging v1.6.2
|
||||
github.com/fatih/color v1.16.0
|
||||
|
@ -41,8 +42,8 @@ require (
|
|||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/redis/go-redis/v9 v9.5.1
|
||||
github.com/resendlabs/resend-go v1.7.0
|
||||
github.com/stripe/stripe-go/v76 v76.19.0
|
||||
github.com/svix/svix-webhooks v1.20.0
|
||||
github.com/stripe/stripe-go/v76 v76.20.0
|
||||
github.com/svix/svix-webhooks v1.21.0
|
||||
github.com/yuin/goldmark v1.7.0
|
||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
|
||||
github.com/zmb3/spotify v1.3.0
|
||||
|
|
12
go.sum
12
go.sum
|
@ -12,6 +12,8 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
|
|||
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
|
||||
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/clerkinc/clerk-sdk-go v1.49.0 h1:tJLIAx3qfP2cNQJ/iPq6OF1BSB0NzI3alcOuEueexoA=
|
||||
|
@ -32,6 +34,8 @@ github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4Nij
|
|||
github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8=
|
||||
github.com/go-jose/go-jose/v3 v3.0.2 h1:2Edjn8Nrb44UvTdp84KU0bBPs1cO7noRCybtS3eJEUQ=
|
||||
github.com/go-jose/go-jose/v3 v3.0.2/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
|
||||
github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
|
||||
github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
|
@ -39,6 +43,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
|
|||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
|
@ -79,8 +85,12 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
|
|||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stripe/stripe-go/v76 v76.19.0 h1:aJIs+B8mKOQE90SNOFmnc7j8xyvJT66kpZQVRxXbkf0=
|
||||
github.com/stripe/stripe-go/v76 v76.19.0/go.mod h1:rw1MxjlAKKcZ+3FOXgTHgwiOa2ya6CPq6ykpJ0Q6Po4=
|
||||
github.com/stripe/stripe-go/v76 v76.20.0 h1:EKxpA+c3+snZlEqZsr6ZQHx684jOAOWkKXurcillVqA=
|
||||
github.com/stripe/stripe-go/v76 v76.20.0/go.mod h1:rw1MxjlAKKcZ+3FOXgTHgwiOa2ya6CPq6ykpJ0Q6Po4=
|
||||
github.com/svix/svix-webhooks v1.20.0 h1:XJOrxii+YxxivXcs/3I4/8FhDg3pNzEUm4c93RUEiLU=
|
||||
github.com/svix/svix-webhooks v1.20.0/go.mod h1:qGeiECF5WRQElyfF0i2CqUtWk2GQJTgL+EJZ/WRCxok=
|
||||
github.com/svix/svix-webhooks v1.21.0 h1:ZxoPU2SJGjmRy1qMaeHY1VdZhTaEkHuh3ruy4CrxW3Y=
|
||||
github.com/svix/svix-webhooks v1.21.0/go.mod h1:qGeiECF5WRQElyfF0i2CqUtWk2GQJTgL+EJZ/WRCxok=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
|
||||
|
@ -170,6 +180,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
|
|||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
|
||||
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
||||
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
|
107
lib/email.go
107
lib/email.go
|
@ -1,31 +1,102 @@
|
|||
package lib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"crypto/tls"
|
||||
"log"
|
||||
"net/smtp"
|
||||
"os"
|
||||
|
||||
"github.com/resendlabs/resend-go"
|
||||
)
|
||||
|
||||
var client *resend.Client
|
||||
|
||||
// init function
|
||||
func init() {
|
||||
client = resend.NewClient(os.Getenv("RESEND_API_KEY"))
|
||||
}
|
||||
|
||||
func SendEmail(to_email string, from_email string, from_name string, html string, subject string) {
|
||||
params := &resend.SendEmailRequest{
|
||||
From: from_name + "<" + from_email + ">",
|
||||
To: []string{to_email},
|
||||
Html: html,
|
||||
Subject: subject,
|
||||
log.Println("Starting email sending process")
|
||||
|
||||
// Set up authentication information.
|
||||
auth := smtp.PlainAuth(
|
||||
"",
|
||||
os.Getenv("SMTP_USERNAME"),
|
||||
os.Getenv("SMTP_PASSWORD"),
|
||||
os.Getenv("SMTP_HOST"),
|
||||
)
|
||||
|
||||
log.Println("Authentication set up")
|
||||
|
||||
// Connect to the server, authenticate, set the sender and recipient,
|
||||
// and send the email all in one step.
|
||||
msg := []byte("From: " + from_name + " <" + from_email + ">\r\n" +
|
||||
"To: " + to_email + "\r\n" +
|
||||
"Subject: " + subject + "\r\n" +
|
||||
"Content-Type: text/html; charset=UTF-8" + "\r\n" +
|
||||
"\r\n" +
|
||||
html + "\r\n")
|
||||
|
||||
tlsconfig := &tls.Config{
|
||||
InsecureSkipVerify: false,
|
||||
ServerName: os.Getenv("SMTP_HOST"),
|
||||
}
|
||||
|
||||
sent, err := client.Emails.Send(params)
|
||||
log.Println("TLS configuration set up")
|
||||
|
||||
c, err := smtp.Dial(os.Getenv("SMTP_HOST") + ":587")
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
log.Println("Error dialing SMTP server:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println(sent.Id)
|
||||
|
||||
log.Println("Connected to SMTP server")
|
||||
|
||||
if err = c.StartTLS(tlsconfig); err != nil {
|
||||
log.Println("Error starting TLS:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("TLS started")
|
||||
|
||||
if err = c.Auth(auth); err != nil {
|
||||
log.Println("Error authenticating with SMTP server:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("Authenticated with SMTP server")
|
||||
|
||||
if err = c.Mail(from_email); err != nil {
|
||||
log.Println("Error setting sender address:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("Sender address set")
|
||||
|
||||
if err = c.Rcpt(to_email); err != nil {
|
||||
log.Println("Error setting recipient address:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("Recipient address set")
|
||||
|
||||
w, err := c.Data()
|
||||
if err != nil {
|
||||
log.Println("Error getting write closer:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("Got write closer")
|
||||
|
||||
_, err = w.Write(msg)
|
||||
if err != nil {
|
||||
log.Println("Error writing message:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("Message written")
|
||||
|
||||
err = w.Close()
|
||||
if err != nil {
|
||||
log.Println("Error closing write closer:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("Write closer closed")
|
||||
|
||||
c.Quit()
|
||||
|
||||
log.Println("Email sent successfully")
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue