Addict邮件系统实战从Mailgun接入到自定义Mailer Behaviour扩展指南【免费下载链接】addictUser management lib for Phoenix Framework项目地址: https://gitcode.com/gh_mirrors/add/addictAddict 是一款面向 Phoenix Framework 的用户管理库内置完整的邮件系统用户注册后自动发送欢迎邮件、找回密码时自动发送重置链接且支持通过 Mailer Behaviour 扩展任意邮件服务。本文以 Mailgun 为例带你完整跑通从依赖接入、配置、EEx 模板个性化到自定义 Mailer 扩展的全过程 一、先搞懂 Addict 邮件系统的设计Addict 的邮件能力集中在lib/addict/mailers/目录核心只有 4 个模块各司其职模块职责Addict.Mailers统一发件入口按配置动态分发到具体服务商Addict.Mailers.Generic定义所有邮件服务商必须实现的 BehaviourAddict.Mailers.Mailgun官方内置的 Mailgun 实现含错误处理Addict.Mailers.MailSender业务层注册邮件 重置密码邮件模板渲染分发逻辑非常巧妙读取mail_service配置如:mailgun驼峰化后通过Module.concat拼出Addict.Mailers.Mailgun模块再调用其send_email/4。这意味着只要模块名符合约定任何邮件服务都能被自动发现# lib/addict/mailers/mailers.ex defp do_send_email(to, from, subject, html_body, mail_service) do mail_service to_string(mail_service) | Mix.Utils.camelize mailer Module.concat Addict.Mailers, mail_service mailer.send_email(to, from, subject, html_body) end 注意如果未配置mail_service系统只会打一条 debug 日志并返回{:ok, nil}不会报错——邮件是纯可选能力。二、Mailgun 快速接入四步完成第 1 步添加依赖在mix.exs中加入addict和mailgun。注意 Mailgun 库会将 Poison 锁定在较老的 1.4 版本若与其他依赖冲突需显式 override{:addict, ~ 0.3}, {:mailgun, ~ 0.1}, {:mailgun, github: chrismccord/mailgun, branch: master, override: true}第 2 步配置 Mailgun 接入参数在config/config.exs中填入你在 Mailgun 控制台获取的 Domain 与 API Keyconfig :addict, mailgun_domain: https://api.mailgun.net/v3/your-domain, mailgun_key: key-xxxx, mail_service: :mailgun参考 example_app/config/config.exs 中的完整配置示例。mail_service: :mailgun是触发分发器的关键开关。第 3 步设置发件人config :addict, from_email: no-replyyourdomain.com不设置时默认回落到no-replyaddict.github.io生产环境务必修改。第 4 步验证邮件发送两个业务触发点会调用邮件系统注册流程Addict.Interactors.Register 在用户入库成功后自动调用MailSender.send_register/1找回密码流程Addict.Interactors.SendResetPasswordEmail 生成带签名的重置链接后调用MailSender.send_reset_token/3。在 Addict.Mailers.Mailgun 中发送失败不会抛异常而是返回{:error, [email: Unable to send e-mail (...)]}并把状态码、响应体写入日志方便排查。三、用 EEx 模板个性化你的邮件Addict 用 EEx 模板渲染邮件正文四个配置项即可定制完整说明见 configs.mdconfig :addict, email_register_subject: 欢迎加入, email_register_template: pHi % name %, 感谢注册 % email %/p, email_reset_password_subject: 密码重置, email_reset_password_template: p点击 a hrefhttp://localhost:4000% path %这里/a 重置密码/p, host: https://yourdomain.com两个容易踩的坑注册模板中可使用用户模型的任意字段如% name %重置密码模板中只有email和path两个变量生产环境记得配置host否则重置链接会指向http://localhost:4000。四、自定义 MailerBehaviour 扩展三步走 想换用 SendGrid、SMTP 或其他服务商无需改动 Addict 源码只需遵循三条约定README 官方约定模块命名必须是Addict.Mailers.你的服务商名驼峰如Addict.Mailers.Smtp文件位置放在lib/addict/mailers/目录下实现 Behaviour实现 Generic 定义的回调# lib/addict/mailers/generic.ex callback send_email(String.t, String.t, String.t, String.t) :: any一个最小的 SMTP 自定义 Mailer 示例defmodule Addict.Mailers.Smtp do behaviour Addict.Mailers.Generic def send_email(to, from, subject, html_body) do Swoosh.Email.new() | Swoosh.Email.from(from) | Swoosh.Email.to(to) | Swoosh.Email.subject(subject) | Swoosh.Email.html_body(html_body) | Swoosh.Local.deliver() end end最后只需一行配置切换服务商config :addict, mail_service: :smtp得益于Module.concat的自动发现机制改完这一行注册和重置密码的邮件就全部走新通道零代码改动 ✅五、常见问题速查没配邮件服务会怎样不报错只记一条 No registered mail service 调试日志适合本地开发。邮件发不出去检查mailgun_domain是否带了完整 API 路径、Key 是否有效Mailgun 错误详情会完整打印到 debug 日志。重置链接 404确认reset_password_path与host配置和实际路由一致。想注册后执行自定义逻辑可用post_register等 hook见 configs.md 的 Post action hooks 章节。小结Addict 的邮件系统 配置驱动的邮件分发器 Behaviour 扩展点。Mailgun 四步接入即可开箱即用而遵循Addict.Mailers.*命名约定实现send_email/4回调就能以最小成本接入任何邮件服务商——这正是 Behaviour 模式在 Phoenix 生态中的优雅体现。【免费下载链接】addictUser management lib for Phoenix Framework项目地址: https://gitcode.com/gh_mirrors/add/addict创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考