Documentation
¶
Overview ¶
Package twilio delivers AuthKit's emails through Twilio SendGrid and its text messages through Twilio Messaging.
email, err := twilio.NewEmail(twilio.EmailConfig{
APIKey: os.Getenv("SENDGRID_API_KEY"),
FromEmail: "hello@myapp.com",
AppName: "MyApp",
})
if err != nil {
return err
}
sms, err := twilio.NewSMS(twilio.SMSConfig{
AccountSID: os.Getenv("TWILIO_ACCOUNT_SID"),
AuthToken: os.Getenv("TWILIO_AUTH_TOKEN"),
MessagingServiceSID: os.Getenv("TWILIO_MESSAGING_SERVICE_SID"),
AppName: "MyApp",
})
if err != nil {
return err
}
deps := authkit.Deps{Postgres: db, Email: email, SMS: sms}
Each sender renders every message kind from a built-in template in the message's Language (Spanish for "es", else English). Set Render to supply your own content for some kinds; returning false falls back to the built-in one.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Email ¶
type Email struct {
// contains filtered or unexported fields
}
Email delivers AuthKit's emails through the Twilio SendGrid Mail Send API. It is an authkit.EmailSender: wire it as authkit.Deps.Email.
func NewEmail ¶
func NewEmail(cfg EmailConfig) (*Email, error)
NewEmail validates cfg and returns an Email.
func (*Email) CheckHealth ¶ added in v0.149.0
CheckHealth reports, without sending an email, whether SendGrid will refuse this sender: it fails only when the API key is rejected (401) or lacks the mail.send scope, and anything it can't tell counts as healthy. SendGrid enforces sender identity only on some accounts, so a FromEmail on no valid authenticated domain and no verified sender only logs a warning on slog.Default, once per change.
type EmailConfig ¶
type EmailConfig struct {
// APIKey is a Twilio SendGrid API key.
APIKey string
FromEmail string
FromName string
// AppName names the app in the built-in copy (default "Auth").
AppName string
// Client sends the API requests (default: a 10s-timeout client).
Client *http.Client
// Categories and CustomArgs tag every email.
Categories []string
CustomArgs map[string]string
// Render returns the content for msg, or false to use the built-in
// template for msg.Kind.
Render func(ctx context.Context, msg iam.EmailMessage) (EmailContent, bool)
}
EmailConfig configures NewEmail. APIKey and FromEmail are required.
type EmailContent ¶
type EmailContent struct {
Subject string
Text string
HTML string
// Categories and CustomArgs are added to EmailConfig's.
Categories []string
CustomArgs map[string]string
}
EmailContent is one rendered email.
type SMS ¶
type SMS struct {
// contains filtered or unexported fields
}
SMS delivers AuthKit's text messages through the Twilio Messaging API and confirms delivery before Send returns. It is an authkit.SMSSender: wire it as authkit.Deps.SMS.
func (*SMS) CheckHealth ¶
CheckHealth reports, without sending an SMS, whether Twilio will refuse this sender. It fails when the credentials, account or Messaging Service are refused, the service has no sender, or every sender is a toll-free number without an approved verification (error 30032). A network error or 5xx on those lookups fails too; the next check re-arms. Anything else it can't tell counts as healthy. Refused toll-free senders beside working ones, and senders it can't tell about, log a warning on slog.Default, once per change.
type SMSConfig ¶
type SMSConfig struct {
AccountSID string
AuthToken string
MessagingServiceSID string
// AppName names the app in the built-in copy (default "Auth").
AppName string
// Client sends the API requests (default: a 10s-timeout client).
Client *http.Client
// DeliveryPollInterval is the gap between delivery status polls (default
// 750ms).
DeliveryPollInterval time.Duration
// Render returns the body for msg, or false to use the built-in template
// for msg.Kind.
Render func(ctx context.Context, msg iam.SMSMessage) (string, bool)
}
SMSConfig configures NewSMS. AccountSID, AuthToken and MessagingServiceSID are required.