Pulse/internal/notifications/email_providers.go
rcourtman b370799988 chore: remove more dead code
Remove 330 lines of unreachable code:
- internal/monitoring/temperature_service.go: unused temperature service abstraction
- internal/monitoring/temperature.go: unused NewTemperatureCollector wrapper
- internal/mock/generator.go: unused GenerateAlerts function
- internal/mock/integration.go: unused ToggleMockMode wrapper
- internal/notifications/notifications.go: unused sendEmailWithContent,
  generatePayloadFromTemplate, isPrivateRange172, groupAlerts
- internal/notifications/email_providers.go: unused GetProviderDefaults
2025-11-27 00:10:55 +00:00

194 lines
6.1 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
}