216 lines
6.7 KiB
Go
216 lines
6.7 KiB
Go
package notifications
|
|
|
|
// EmailProvider represents a pre-configured email provider template
|
|
type EmailProvider struct {
|
|
Name string `json:"name"`
|
|
SMTPHost string `json:"smtpHost"`
|
|
SMTPPort int `json:"smtpPort"`
|
|
TLS bool `json:"tls"`
|
|
StartTLS bool `json:"startTLS"`
|
|
AuthRequired bool `json:"authRequired"`
|
|
Instructions string `json:"instructions"`
|
|
}
|
|
|
|
// GetEmailProviders returns templates for popular email providers
|
|
func GetEmailProviders() []EmailProvider {
|
|
return []EmailProvider{
|
|
{
|
|
Name: "Gmail / Google Workspace",
|
|
SMTPHost: "smtp.gmail.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Enable 2-factor authentication on your Google account
|
|
2. Generate an App Password:
|
|
- Go to https://myaccount.google.com/apppasswords
|
|
- Select "Mail" and generate password
|
|
- Use this password (not your regular password)
|
|
3. Use your full email as username`,
|
|
},
|
|
{
|
|
Name: "SendGrid",
|
|
SMTPHost: "smtp.sendgrid.net",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Sign up at https://sendgrid.com
|
|
2. Create an API Key:
|
|
- Settings > API Keys > Create API Key
|
|
- Choose "Restricted Access" with "Mail Send" permission
|
|
3. Username: "apikey" (literal string)
|
|
4. Password: Your API key
|
|
5. Verify sender identity in SendGrid dashboard`,
|
|
},
|
|
{
|
|
Name: "Mailgun",
|
|
SMTPHost: "smtp.mailgun.org",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Sign up at https://mailgun.com
|
|
2. Add and verify your domain
|
|
3. Get SMTP credentials:
|
|
- Dashboard > Sending > Domain settings > SMTP credentials
|
|
4. Username: Default SMTP Login from dashboard
|
|
5. Password: Default Password from dashboard
|
|
Note: EU region uses smtp.eu.mailgun.org`,
|
|
},
|
|
{
|
|
Name: "Amazon SES (US East)",
|
|
SMTPHost: "email-smtp.us-east-1.amazonaws.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Set up Amazon SES in AWS Console
|
|
2. Verify your domain or email address
|
|
3. Create SMTP credentials:
|
|
- SES Console > SMTP Settings > Create SMTP Credentials
|
|
4. Request production access (exit sandbox)
|
|
5. Use generated SMTP username and password
|
|
Other regions: us-west-2, eu-west-1, etc.`,
|
|
},
|
|
{
|
|
Name: "Microsoft 365 / Outlook",
|
|
SMTPHost: "smtp.office365.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `IMPORTANT: Basic authentication (username/password) is being deprecated.
|
|
You MUST use an App Password:
|
|
|
|
1. Enable 2-factor authentication on your Microsoft account
|
|
2. Generate an App Password:
|
|
- Go to https://account.microsoft.com/security
|
|
- Click "Advanced security options"
|
|
- Under "App passwords", create a new app password
|
|
- Use this app password (not your regular password)
|
|
3. Username: Your full email address (e.g., user@domain.com)
|
|
4. Password: The app password you generated
|
|
|
|
Note: If using a work/school account, your admin may need to enable
|
|
"Authenticated SMTP" in the Microsoft 365 admin center.`,
|
|
},
|
|
{
|
|
Name: "Brevo (formerly Sendinblue)",
|
|
SMTPHost: "smtp-relay.brevo.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Sign up at https://brevo.com
|
|
2. Get SMTP credentials:
|
|
- Account > SMTP & API > SMTP
|
|
3. Username: Your account email
|
|
4. Password: Your SMTP password (not login password)
|
|
5. Add sender in Senders management`,
|
|
},
|
|
{
|
|
Name: "Postmark",
|
|
SMTPHost: "smtp.postmarkapp.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Sign up at https://postmarkapp.com
|
|
2. Create a server and get credentials:
|
|
- Servers > Your Server > API Tokens
|
|
3. Username: Your API token
|
|
4. Password: Your API token (same as username)
|
|
5. Verify sender signature`,
|
|
},
|
|
{
|
|
Name: "SparkPost",
|
|
SMTPHost: "smtp.sparkpostmail.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Sign up at https://sparkpost.com
|
|
2. Create API key with "Send via SMTP" permission
|
|
3. Username: SMTP_Injection
|
|
4. Password: Your API key
|
|
5. Verify sending domain
|
|
EU endpoint: smtp.eu.sparkpostmail.com`,
|
|
},
|
|
{
|
|
Name: "Resend",
|
|
SMTPHost: "smtp.resend.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Sign up at https://resend.com
|
|
2. Create an API key
|
|
3. Username: resend
|
|
4. Password: Your API key
|
|
5. Add and verify domain
|
|
Simple, developer-friendly service`,
|
|
},
|
|
{
|
|
Name: "SMTP2GO",
|
|
SMTPHost: "mail.smtp2go.com",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `1. Sign up at https://smtp2go.com
|
|
2. Get SMTP credentials from dashboard
|
|
3. Username: Your SMTP username
|
|
4. Password: Your SMTP password
|
|
5. Add sender in Sender Domains`,
|
|
},
|
|
{
|
|
Name: "Custom SMTP Server",
|
|
SMTPHost: "",
|
|
SMTPPort: 587,
|
|
TLS: false,
|
|
StartTLS: true,
|
|
AuthRequired: true,
|
|
Instructions: `Configure your own SMTP server:
|
|
- Common ports: 25 (no encryption), 587 (STARTTLS), 465 (TLS)
|
|
- Enable TLS/StartTLS for security
|
|
- Set AuthRequired=false for open relays (not recommended)
|
|
- Test connection before saving`,
|
|
},
|
|
}
|
|
}
|
|
|
|
// EmailProviderConfig contains enhanced email configuration
|
|
type EmailProviderConfig struct {
|
|
EmailConfig
|
|
Provider string `json:"provider"` // Provider name for quick setup
|
|
ReplyTo string `json:"replyTo"` // Reply-to address
|
|
MaxRetries int `json:"maxRetries"` // Max send retries
|
|
RetryDelay int `json:"retryDelay"` // Seconds between retries
|
|
RateLimit int `json:"rateLimit"` // Max emails per minute
|
|
StartTLS bool `json:"startTLS"` // Use STARTTLS
|
|
SkipTLSVerify bool `json:"skipTLSVerify"` // Skip TLS cert verification
|
|
AuthRequired bool `json:"authRequired"` // Require authentication
|
|
}
|
|
|
|
// GetProviderDefaults returns default configuration for a provider
|
|
func GetProviderDefaults(providerName string) *EmailProviderConfig {
|
|
providers := GetEmailProviders()
|
|
for _, provider := range providers {
|
|
if provider.Name == providerName {
|
|
return &EmailProviderConfig{
|
|
EmailConfig: EmailConfig{
|
|
SMTPHost: provider.SMTPHost,
|
|
SMTPPort: provider.SMTPPort,
|
|
TLS: provider.TLS,
|
|
},
|
|
Provider: providerName,
|
|
StartTLS: provider.StartTLS,
|
|
MaxRetries: 3,
|
|
RetryDelay: 5,
|
|
RateLimit: 60, // Default 60 emails/minute
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|