Documentation
¶
Overview ¶
Package goemail 提供多平台邮件发送功能 支持腾讯云SES、阿里云DM、SMTP等多种发送方式
Index ¶
- Constants
- func ExampleAliyunDM()
- func ExampleAliyunDMTemplate()
- func ExampleBatchSend()
- func ExampleContextTimeout()
- func ExampleErrorHandling()
- func ExampleFromConfig()
- func ExampleSMTP()
- func ExampleSendVerificationCode()
- func ExampleTemplateEmail()
- func ExampleTencentSES()
- func ExampleWithAttachment()
- func ValidateEmail(ctx context.Context, email string) bool
- func ValidateEmails(ctx context.Context, emails []string) []string
- type AliyunDMClient
- func (c *AliyunDMClient) GetEmailStatus(ctx context.Context, query *EmailStatusQuery) (*EmailStatusResult, error)
- func (c *AliyunDMClient) GetProviderType() ProviderType
- func (c *AliyunDMClient) GetTrackList(ctx context.Context, accountName, tagName string, startTime, endTime time.Time) (*EmailStatusResult, error)
- func (c *AliyunDMClient) SendBatchEmail(ctx context.Context, reqs []*SendRequest) ([]*SendResult, error)
- func (c *AliyunDMClient) SendEmail(ctx context.Context, req *SendRequest) (*SendResult, error)
- func (c *AliyunDMClient) SendTemplateEmail(ctx context.Context, from string, to []string, templateName string, ...) (*SendResult, error)
- type Attachment
- type Config
- type EmailClient
- type EmailStatus
- type EmailStatusQuery
- type EmailStatusResult
- type ProviderType
- type SMTPClient
- func (c *SMTPClient) GetEmailStatus(ctx context.Context, query *EmailStatusQuery) (*EmailStatusResult, error)
- func (c *SMTPClient) GetProviderType() ProviderType
- func (c *SMTPClient) SendBatchEmail(ctx context.Context, reqs []*SendRequest) ([]*SendResult, error)
- func (c *SMTPClient) SendEmail(ctx context.Context, req *SendRequest) (*SendResult, error)
- type SendRequest
- type SendResult
- type TencentSESClient
- func (c *TencentSESClient) GetEmailStatus(ctx context.Context, query *EmailStatusQuery) (*EmailStatusResult, error)
- func (c *TencentSESClient) GetProviderType() ProviderType
- func (c *TencentSESClient) SendBatchEmail(ctx context.Context, reqs []*SendRequest) ([]*SendResult, error)
- func (c *TencentSESClient) SendEmail(ctx context.Context, req *SendRequest) (*SendResult, error)
- func (c *TencentSESClient) SendTemplateEmail(ctx context.Context, from string, to []string, templateID uint64, ...) (*SendResult, error)
Examples ¶
Constants ¶
const (
// StatusFailed 邮件发送失败状态
StatusFailed = "failed"
)
邮件状态常量
Variables ¶
This section is empty.
Functions ¶
func ExampleSendVerificationCode ¶
func ExampleSendVerificationCode()
ExampleSendVerificationCode 发送验证码(完整实战案例)
func ValidateEmail ¶
ValidateEmail 验证邮箱地址格式
Types ¶
type AliyunDMClient ¶
type AliyunDMClient struct {
// contains filtered or unexported fields
}
AliyunDMClient 阿里云邮件推送客户端
func (*AliyunDMClient) GetEmailStatus ¶ added in v1.4.30
func (c *AliyunDMClient) GetEmailStatus(ctx context.Context, query *EmailStatusQuery) (*EmailStatusResult, error)
GetEmailStatus 查询邮件发送状态 注:阿里云DM没有直接提供查询单封邮件状态的API 这里实现一个基于TagName追踪的查询方法
func (*AliyunDMClient) GetProviderType ¶
func (c *AliyunDMClient) GetProviderType() ProviderType
GetProviderType 获取提供商类型
func (*AliyunDMClient) GetTrackList ¶ added in v1.4.30
func (c *AliyunDMClient) GetTrackList(ctx context.Context, accountName, tagName string, startTime, endTime time.Time) (*EmailStatusResult, error)
GetTrackList 查询发送记录(基于AccountName和TagName) 注:这是阿里云DM提供的主要查询方式,但返回的是统计数据而非单封邮件状态
func (*AliyunDMClient) SendBatchEmail ¶
func (c *AliyunDMClient) SendBatchEmail(ctx context.Context, reqs []*SendRequest) ([]*SendResult, error)
SendBatchEmail 批量发送邮件
func (*AliyunDMClient) SendEmail ¶
func (c *AliyunDMClient) SendEmail(ctx context.Context, req *SendRequest) (*SendResult, error)
SendEmail 发送邮件
func (*AliyunDMClient) SendTemplateEmail ¶
func (c *AliyunDMClient) SendTemplateEmail(ctx context.Context, from string, to []string, templateName string, templateData map[string]interface{}) (*SendResult, error)
SendTemplateEmail 发送模板邮件(阿里云DM) templateName: 模板名称(在阿里云控制台创建) templateData: 模板变量数据,会被序列化为JSON字符串
type Attachment ¶
type Attachment struct {
Filename string // 文件名
Content []byte // 文件内容
ContentType string // MIME类型
}
Attachment 附件
type Config ¶
type Config struct {
ProviderType ProviderType // 提供商类型
Region string // 区域(云服务商需要)
AccessKeyID string // Access Key ID
SecretKey string // Secret Key
// SMTP专用配置
SMTPHost string
SMTPPort int
SMTPUsername string
SMTPPassword string
UseTLS bool
}
Config 基础配置
type EmailClient ¶
type EmailClient interface {
// SendEmail 发送邮件
SendEmail(ctx context.Context, req *SendRequest) (*SendResult, error)
// SendBatchEmail 批量发送邮件
SendBatchEmail(ctx context.Context, reqs []*SendRequest) ([]*SendResult, error)
// GetEmailStatus 查询邮件发送状态
GetEmailStatus(ctx context.Context, query *EmailStatusQuery) (*EmailStatusResult, error)
// GetProviderType 获取提供商类型
GetProviderType() ProviderType
}
EmailClient 邮件客户端接口
func NewEmailClient ¶
func NewEmailClient(cfg *Config) (EmailClient, error)
NewEmailClient 创建邮件客户端
Example ¶
ExampleNewEmailClient 创建邮件客户端示例
// 腾讯云SES
tencentCfg := &Config{
ProviderType: ProviderTypeTencentSES,
Region: "ap-guangzhou",
AccessKeyID: "your_ak",
SecretKey: "your_sk",
}
_, _ = NewEmailClient(tencentCfg)
// 阿里云DM
aliyunCfg := &Config{
ProviderType: ProviderTypeAliyunDM,
Region: "cn-hangzhou",
AccessKeyID: "your_ak",
SecretKey: "your_sk",
}
_, _ = NewEmailClient(aliyunCfg)
// SMTP
smtpCfg := &Config{
ProviderType: ProviderTypeSMTP,
SMTPHost: "smtp.qq.com",
SMTPPort: 465,
SMTPUsername: "user@qq.com",
SMTPPassword: "password",
}
_, _ = NewEmailClient(smtpCfg)
type EmailStatus ¶ added in v1.4.30
type EmailStatus struct {
MessageID string // 邮件消息ID
ToAddress string // 收件人地址
FromAddress string // 发件人地址
Status string // 发送状态: delivered, failed, pending, rejected
StatusCode int // 状态码
StatusMessage string // 状态描述
RequestTime time.Time // 请求时间
DeliverTime time.Time // 投递时间
UserOpened bool // 是否已打开
UserClicked bool // 是否已点击
UserUnsubscribed bool // 是否退订
UserComplained bool // 是否投诉
Extra map[string]interface{} // 额外信息
}
EmailStatus 邮件状态信息
type EmailStatusQuery ¶ added in v1.4.30
type EmailStatusQuery struct {
MessageID string // 邮件消息ID(可选)
ToAddress string // 收件人地址(可选)
FromDate time.Time // 开始日期
ToDate time.Time // 结束日期
Offset uint64 // 偏移量
Limit uint64 // 拉取条数
}
EmailStatusQuery 邮件状态查询参数
type EmailStatusResult ¶ added in v1.4.30
type EmailStatusResult struct {
Status string // 查询状态: success, failed
Data []*EmailStatus // 邮件状态列表
Error error // 错误信息
Extra map[string]interface{} // 额外信息
}
EmailStatusResult 邮件状态查询结果
type ProviderType ¶
type ProviderType string
ProviderType 邮件服务提供商类型
const ( // ProviderTypeTencentSES 腾讯云简单邮件服务 ProviderTypeTencentSES ProviderType = "tencent_ses" // ProviderTypeAliyunDM 阿里云邮件推送 ProviderTypeAliyunDM ProviderType = "aliyun_dm" // ProviderTypeSMTP SMTP协议 ProviderTypeSMTP ProviderType = "smtp" )
type SMTPClient ¶
type SMTPClient struct {
// contains filtered or unexported fields
}
SMTPClient SMTP协议客户端
func (*SMTPClient) GetEmailStatus ¶ added in v1.4.30
func (c *SMTPClient) GetEmailStatus(ctx context.Context, query *EmailStatusQuery) (*EmailStatusResult, error)
GetEmailStatus 查询邮件发送状态 注:SMTP协议不支持查询邮件发送状态 邮件发送成功后即认为已送达SMTP服务器,后续投递由邮件服务器处理
func (*SMTPClient) GetProviderType ¶
func (c *SMTPClient) GetProviderType() ProviderType
GetProviderType 获取提供商类型
func (*SMTPClient) SendBatchEmail ¶
func (c *SMTPClient) SendBatchEmail(ctx context.Context, reqs []*SendRequest) ([]*SendResult, error)
SendBatchEmail 批量发送邮件
func (*SMTPClient) SendEmail ¶
func (c *SMTPClient) SendEmail(ctx context.Context, req *SendRequest) (*SendResult, error)
SendEmail 发送邮件
type SendRequest ¶
type SendRequest struct {
From string // 发件人地址
To []string // 收件人列表
Cc []string // 抄送列表
Bcc []string // 密送列表
Subject string // 邮件主题
HTMLBody string // HTML正文
TextBody string // 纯文本正文
ReplyTo []string // 回复地址
Attachments []*Attachment // 附件列表
Tags map[string]string // 标签(用于追踪)
Headers map[string]string // 自定义邮件头
}
SendRequest 发送请求
type SendResult ¶
type SendResult struct {
MessageID string // 消息ID
Status string // 状态: success/failed
Error error // 错误信息
Extra map[string]interface{} // 额外信息(不同提供商返回的数据)
}
SendResult 发送结果
type TencentSESClient ¶
type TencentSESClient struct {
// contains filtered or unexported fields
}
TencentSESClient 腾讯云SES客户端
func (*TencentSESClient) GetEmailStatus ¶ added in v1.4.30
func (c *TencentSESClient) GetEmailStatus(ctx context.Context, query *EmailStatusQuery) (*EmailStatusResult, error)
GetEmailStatus 查询邮件发送状态
func (*TencentSESClient) GetProviderType ¶
func (c *TencentSESClient) GetProviderType() ProviderType
GetProviderType 获取提供商类型
func (*TencentSESClient) SendBatchEmail ¶
func (c *TencentSESClient) SendBatchEmail(ctx context.Context, reqs []*SendRequest) ([]*SendResult, error)
SendBatchEmail 批量发送邮件
func (*TencentSESClient) SendEmail ¶
func (c *TencentSESClient) SendEmail(ctx context.Context, req *SendRequest) (*SendResult, error)
SendEmail 发送邮件
func (*TencentSESClient) SendTemplateEmail ¶
func (c *TencentSESClient) SendTemplateEmail(ctx context.Context, from string, to []string, templateID uint64, templateData map[string]interface{}, subject string) (*SendResult, error)
SendTemplateEmail 发送模板邮件(参考PHP案例实现)