赞
踩
go get github.com/go-redis/redis/v8
- package main
-
- import (
- "context"
- "fmt"
- redis "github.com/go-redis/redis/v8"
- "gopkg.in/gomail.v2"
- "gopkg.in/ini.v1"
- "log"
- "time"
- )
-
- func main() {
- // 1、连接redis,确保redis服务已开启
- // 创建一个Redis客户端实例
- rdb := redis.NewClient(&redis.Options{
- Addr: "localhost:6379", // Redis 服务器地址
- Password: "", // 没有密码就留空
- DB: 0, // 使用默认DB
- })
-
- // 关闭 Redis 连接
- defer rdb.Close()
-
- ctx := context.Background()
-
- // 检查连接
- pong, err := rdb.Ping(context.Background()).Result()
- if err != nil {
- fmt.Println("连接Redis失败", err)
- return
- }
- fmt.Println(pong) // 输出 PING 命令的响应
-
- // 模拟添加邮件到待发送队列
- email1 := "123xxx@qq.com"
- email2 := "123xxx@qq.com"
- email3 := "123xxx@qq.com"
- // 使用LPush命令向名为'my_list'的列表中添加元素
- //values := []interface{}{"2576265911@qq.com", "2576265911@qq.com", "2576265911@qq.com"}
- //err := rdb.LPush(ctx, "email_queue", email1, email2, email3).Err()
-
- err = rdb.LPush(ctx, "email_queue", email1, email2, email3).Err()
- if err != nil {
- log.Fatalf("无法推送到列表: %v", err)
- }
-
- // 初始化邮件发送配置
- cfg, err := ini.Load("conf/email_config.ini")
- if err != nil {
- log.Fatalf("加载邮件配置失败: %v", err)
- }
-
- sender := cfg.Section("AUTHENTICATION").Key("username").String()
- password := cfg.Section("AUTHENTICATION").Key("password").String()
- smtpServer := cfg.Section("SMTP_SERVER").Key("smtp_server").String()
- smtpPort := cfg.Section("SMTP_SERVER").Key("smtp_port").MustInt(587)
-
- // 连接到 SMTP 服务器
- d := gomail.NewDialer(smtpServer, smtpPort, sender, password)
-
- // 循环处理邮件队列
- for {
- // 从 Redis 队列中获取邮件
- email, err := rdb.RPop(ctx, "email_queue").Result()
- if err == redis.Nil {
- // 队列为空,退出循环
- fmt.Println("电子邮件队列为空。")
- break
- } else if err != nil {
- log.Fatalf("无法从队列中获取电子邮件: %v", err)
- }
-
- // 创建邮件消息
- m := gomail.NewMessage()
- m.SetHeader("From", cfg.Section("EMAIL").Key("from").String())
- m.SetHeader("To", email)
- m.SetHeader("Subject", cfg.Section("EMAIL").Key("subject").String())
-
- // 设置邮件内容
- m.SetBody("text/plain", cfg.Section("EMAIL").Key("body").String())
-
- // 发送邮件
- if err := d.DialAndSend(m); err != nil {
- log.Fatalf("无法将电子邮件发送到:%s: %v", email, err)
- }
-
- // 模拟邮件发送后的一些操作
- fmt.Printf("发送电子邮件至:%s\n", email)
- time.Sleep(5 * time.Second) // 可以添加一些延迟以限制发送速率
- }
- }
- # 以QQ邮箱为例
- [SMTP_SERVER]
- smtp_server = smtp.qq.com
- #587或465,具体取决于SMTP服务器配置
- smtp_port = 587
-
- [AUTHENTICATION]
- # 发送者邮箱
- username = qwexxxx@qq.com
- # 授权码,不是登录密码
- password = aafrsdgsgsssfqw
-
- [EMAIL]
- # 发送者邮箱
- from = qwexxxx@qq.com
- subject = Test Email(邮件主题)
- body = 这是我的应用程序发送的测试电子邮件。
-
- [SECURITY]
- use_tls = yes
- tls_insecure_skip_verify = no
-
-
- ;这个配置文件包含以下部分:
- ;SMTP_SERVER: 存储 SMTP 服务器的主机名和端口号。
- ;AUTHENTICATION: 存储用于邮件认证的用户名和密码。
- ;EMAIL: 存储发送邮件时使用的发件人地址、邮件主题和邮件正文。
- ;SECURITY: 存储安全设置,比如是否使用 TLS 加密以及是否跳过 TLS 证书验证。
- ;请注意,你需要将示例中的占位符(如 smtp.example.com、your_email@example.com 和 your_password)替换为实际的值。此外,use_tls 和 tls_insecure_skip_verify 用于配置安全选项,具体值取决于你的邮件服务器配置。
- ;在实际使用中,出于安全考虑,不建议在配置文件中明文存储密码。可以使用环境变量或加密存储密码的方式来提高安全性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。