如何在Heroku上配置Ruby 3.1.1+Rails 6.1.4应用发送邮件?
Heroku上Rails 6.1.4 + Ruby 3.1.1 免费邮件发送配置指南
针对小发送量需求,下面推荐3种免费SMTP服务的配置方案,全程无需付费插件,所有敏感信息通过Heroku环境变量安全存储:
一、Gmail SMTP(适合个人小量发送,日限100封)
参数获取路径
- 开启Google账号的两步验证(必须,否则无法创建应用密码)
- 登录Google账号,进入「安全」页面,找到「应用密码」选项,生成一个专门用于Rails应用的密码
- SMTP固定参数:服务器
smtp.gmail.com,端口587(TLS)
Rails生产环境配置(config/production.rb)
config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 587, domain: 'your-heroku-app-name.herokuapp.com', # 或你的自定义域名 user_name: ENV['GMAIL_USERNAME'], password: ENV['GMAIL_APP_PASSWORD'], authentication: 'plain', enable_starttls_auto: true } # 可选:设置默认发件人 config.action_mailer.default_options = { from: '你的应用 <your-gmail-address@gmail.com>' }
设置Heroku环境变量
在本地终端执行:
heroku config:set GMAIL_USERNAME=你的Gmail邮箱地址 heroku config:set GMAIL_APP_PASSWORD=你生成的应用密码
二、SendGrid免费版(月限100封,适合小型应用)
参数获取路径
- 注册SendGrid账号后,进入「Settings > API Keys」
- 创建新API Key,权限选择「Mail Send」即可
- SMTP固定参数:服务器
smtp.sendgrid.net,端口587,用户名固定为apikey
Rails生产环境配置(config/production.rb)
config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.sendgrid.net', port: 587, domain: 'your-heroku-app-name.herokuapp.com', user_name: 'apikey', password: ENV['SENDGRID_API_KEY'], authentication: 'plain', enable_starttls_auto: true } config.action_mailer.default_options = { from: '你的应用 <no-reply@你的域名.com>' }
设置Heroku环境变量
heroku config:set SENDGRID_API_KEY=你的SendGrid API Key
三、Mailgun免费层(月限5000封,支持域名发送)
参数获取路径
- 注册Mailgun账号,添加你的域名(或使用免费沙箱域名,仅支持发送给已验证收件人)
- 进入「Sending > Domains」页面,获取对应域名的SMTP服务器、端口、用户名、密码
Rails生产环境配置(config/production.rb)
config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: ENV['MAILGUN_SMTP_SERVER'], port: ENV['MAILGUN_SMTP_PORT'], domain: '你的域名.com', # 或沙箱域名 user_name: ENV['MAILGUN_SMTP_LOGIN'], password: ENV['MAILGUN_SMTP_PASSWORD'], authentication: 'plain', enable_starttls_auto: true } config.action_mailer.default_options = { from: '你的应用 <no-reply@你的域名.com>' }
设置Heroku环境变量
heroku config:set MAILGUN_SMTP_SERVER=smtp.mailgun.org heroku config:set MAILGUN_SMTP_PORT=587 heroku config:set MAILGUN_SMTP_LOGIN=你的Mailgun SMTP用户名 heroku config:set MAILGUN_SMTP_PASSWORD=你的Mailgun SMTP密码
验证配置生效
在本地终端运行Heroku Rails控制台测试发送:
heroku run rails c # 执行以下代码测试邮件发送 ActionMailer::Base.mail(from: '你的发件邮箱', to: '测试收件邮箱', subject: '测试邮件', body: 'Hello World').deliver_now
关键注意事项
- 所有敏感信息(密码、API Key)必须通过Heroku环境变量存储,绝对不能硬编码到代码提交到版本控制
- 不同服务的发送限额不同,根据需求选择:Gmail日限100封,SendGrid月限100封,Mailgun沙箱域名仅支持验证收件人,正式域名月限5000封
- 使用Gmail时,必须开启两步验证才能生成应用密码,否则无法使用SMTP服务
内容的提问来源于stack exchange,提问作者John Cowan
相关产品推荐
相关产品推荐

