当前位置:   article > 正文

Go Redis 实现邮件群发

Go Redis 实现邮件群发

一、安装

go get github.com/go-redis/redis/v8

二、邮箱服务配置,以QQ邮箱为例 

 

三、示例代码 

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. redis "github.com/go-redis/redis/v8"
  6. "gopkg.in/gomail.v2"
  7. "gopkg.in/ini.v1"
  8. "log"
  9. "time"
  10. )
  11. func main() {
  12. // 1、连接redis,确保redis服务已开启
  13. // 创建一个Redis客户端实例
  14. rdb := redis.NewClient(&redis.Options{
  15. Addr: "localhost:6379", // Redis 服务器地址
  16. Password: "", // 没有密码就留空
  17. DB: 0, // 使用默认DB
  18. })
  19. // 关闭 Redis 连接
  20. defer rdb.Close()
  21. ctx := context.Background()
  22. // 检查连接
  23. pong, err := rdb.Ping(context.Background()).Result()
  24. if err != nil {
  25. fmt.Println("连接Redis失败", err)
  26. return
  27. }
  28. fmt.Println(pong) // 输出 PING 命令的响应
  29. // 模拟添加邮件到待发送队列
  30. email1 := "123xxx@qq.com"
  31. email2 := "123xxx@qq.com"
  32. email3 := "123xxx@qq.com"
  33. // 使用LPush命令向名为'my_list'的列表中添加元素
  34. //values := []interface{}{"2576265911@qq.com", "2576265911@qq.com", "2576265911@qq.com"}
  35. //err := rdb.LPush(ctx, "email_queue", email1, email2, email3).Err()
  36. err = rdb.LPush(ctx, "email_queue", email1, email2, email3).Err()
  37. if err != nil {
  38. log.Fatalf("无法推送到列表: %v", err)
  39. }
  40. // 初始化邮件发送配置
  41. cfg, err := ini.Load("conf/email_config.ini")
  42. if err != nil {
  43. log.Fatalf("加载邮件配置失败: %v", err)
  44. }
  45. sender := cfg.Section("AUTHENTICATION").Key("username").String()
  46. password := cfg.Section("AUTHENTICATION").Key("password").String()
  47. smtpServer := cfg.Section("SMTP_SERVER").Key("smtp_server").String()
  48. smtpPort := cfg.Section("SMTP_SERVER").Key("smtp_port").MustInt(587)
  49. // 连接到 SMTP 服务器
  50. d := gomail.NewDialer(smtpServer, smtpPort, sender, password)
  51. // 循环处理邮件队列
  52. for {
  53. // 从 Redis 队列中获取邮件
  54. email, err := rdb.RPop(ctx, "email_queue").Result()
  55. if err == redis.Nil {
  56. // 队列为空,退出循环
  57. fmt.Println("电子邮件队列为空。")
  58. break
  59. } else if err != nil {
  60. log.Fatalf("无法从队列中获取电子邮件: %v", err)
  61. }
  62. // 创建邮件消息
  63. m := gomail.NewMessage()
  64. m.SetHeader("From", cfg.Section("EMAIL").Key("from").String())
  65. m.SetHeader("To", email)
  66. m.SetHeader("Subject", cfg.Section("EMAIL").Key("subject").String())
  67. // 设置邮件内容
  68. m.SetBody("text/plain", cfg.Section("EMAIL").Key("body").String())
  69. // 发送邮件
  70. if err := d.DialAndSend(m); err != nil {
  71. log.Fatalf("无法将电子邮件发送到:%s: %v", email, err)
  72. }
  73. // 模拟邮件发送后的一些操作
  74. fmt.Printf("发送电子邮件至:%s\n", email)
  75. time.Sleep(5 * time.Second) // 可以添加一些延迟以限制发送速率
  76. }
  77. }

 四、邮件配置

  1. # 以QQ邮箱为例
  2. [SMTP_SERVER]
  3. smtp_server = smtp.qq.com
  4. #587465,具体取决于SMTP服务器配置
  5. smtp_port = 587
  6. [AUTHENTICATION]
  7. # 发送者邮箱
  8. username = qwexxxx@qq.com
  9. # 授权码,不是登录密码
  10. password = aafrsdgsgsssfqw
  11. [EMAIL]
  12. # 发送者邮箱
  13. from = qwexxxx@qq.com
  14. subject = Test Email(邮件主题)
  15. body = 这是我的应用程序发送的测试电子邮件。
  16. [SECURITY]
  17. use_tls = yes
  18. tls_insecure_skip_verify = no
  19. ;这个配置文件包含以下部分:
  20. ;SMTP_SERVER: 存储 SMTP 服务器的主机名和端口号。
  21. ;AUTHENTICATION: 存储用于邮件认证的用户名和密码。
  22. ;EMAIL: 存储发送邮件时使用的发件人地址、邮件主题和邮件正文。
  23. ;SECURITY: 存储安全设置,比如是否使用 TLS 加密以及是否跳过 TLS 证书验证。
  24. ;请注意,你需要将示例中的占位符(如 smtp.example.com、your_email@example.com 和 your_password)替换为实际的值。此外,use_tls 和 tls_insecure_skip_verify 用于配置安全选项,具体值取决于你的邮件服务器配置。
  25. ;在实际使用中,出于安全考虑,不建议在配置文件中明文存储密码。可以使用环境变量或加密存储密码的方式来提高安全性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/658565
推荐阅读
相关标签
  

闽ICP备14008679号