如何在Heroku平台使用PHP通过Gmail发送注册确认邮件
Heroku PHP环境使用Gmail发送邮件的实现方案
你本地已经跑通的PHPMailer代码不需要做大幅改动,仅需要调整Gmail账号安全配置和Heroku的环境变量配置即可实现,不需要适配Ruby相关方案。
1. Gmail账号安全配置
Heroku的服务器IP不属于你本地常用登录区域,直接用原账号密码会被Google的安全策略拦截,需要做如下调整:
- 优先使用Google应用专用密码(安全性更高,推荐):
- 先为你的Google账号开启两步验证
- 进入Google账号「安全性」设置页,找到「应用专用密码」入口
- 生成一个专属Heroku应用使用的16位应用专用密码,后续PHPMailer的SMTP密码字段填这个生成的密码即可,不需要用你原账号的登录密码
- 若未开启两步验证,可以临时开启「不太安全的应用访问权限」,但该方式安全性极低,仅建议测试阶段临时使用
2. Heroku环境变量配置
不要在代码中硬编码邮箱账号和密码,避免敏感信息泄露,通过Heroku的配置变量存储敏感信息:
- 进入你的Heroku应用后台,打开「设置」页面找到「配置变量」板块,新增两个变量:
GMAIL_USER:你的Gmail完整邮箱地址GMAIL_APP_PWD:上一步生成的16位应用专用密码
- 也可以通过Heroku CLI快速配置:
heroku config:set GMAIL_USER=你的Gmail地址 GMAIL_APP_PWD=你的应用专用密码 -a 你的Heroku应用名称
3. PHPMailer代码示例
代码逻辑和你本地使用的逻辑基本一致,仅需要替换为从环境变量读取账号密码即可:
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // 确保你已经通过composer安装了phpmailer依赖 require 'vendor/autoload.php'; $mail = new PHPMailer(true); try { // SMTP服务器基础配置 $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; // 从Heroku环境变量读取敏感信息 $mail->Username = getenv('GMAIL_USER'); $mail->Password = getenv('GMAIL_APP_PWD'); $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465; // 邮件内容、收件人配置和本地逻辑一致即可 $mail->setFrom(getenv('GMAIL_USER'), '你的站点名称'); $mail->addAddress('收件人邮箱地址'); $mail->isHTML(true); $mail->Subject = '账号注册确认'; $mail->Body = '这是你的注册确认邮件内容'; $mail->send(); echo '邮件发送成功'; } catch (Exception $e) { echo "邮件发送失败,错误信息:{$mail->ErrorInfo}"; }
注意:个人Gmail账号的SMTP发送量有明确限制,每天最多发送500封邮件,若你的站点用户量较大,建议切换到专业的邮件发送服务,Heroku也提供对应附加组件可直接开通使用。
内容的提问来源于stack exchange,提问作者Dragos Polifronie
相关产品推荐
相关产品推荐

