ThinkPHP¶
适用于 ThinkPHP 8(8.x)应用的分步指南。Mailexam 通过 yzh52521/think-mail 包(Symfony Mailer)以 SMTP 方式接入。
所需条件¶
- Mailexam 账户及带 SMTP 凭据的项目。
- ThinkPHP 8 与 Composer。
从欢迎邮件(或控制台)复制以下信息:
YOUR_LOGIN— SMTP 登录名(例如xxxxx);YOUR_PASSWORD— SMTP 密码(与登录名配对);- 主机 —
YOUR_LOGIN.mailexam.cn(与登录名一致)。
1. 依赖¶
安装后项目中会出现 config/mailer.php,请按下方说明为 Mailexam 进行配置。
2. 环境变量¶
在项目根目录创建 .env(加入 .gitignore):
MAILEXAM_LOGIN=YOUR_LOGIN
MAILEXAM_PASSWORD=YOUR_PASSWORD
MAILEXAM_PORT=587
MAIL_FROM=noreply@example.test
在启动时加载 .env(例如在 public/index.php 中、创建应用之前):
配置中的主机:YOUR_LOGIN.mailexam.cn。
发件人地址
MAIL_FROM 可以是任意测试地址 — 邮件会进入 Mailexam,而非真实收件人。
备选端口¶
3. SMTP 配置¶
config/mailer.php:
<?php
$login = getenv('MAILEXAM_LOGIN') ?: '';
$port = (int) (getenv('MAILEXAM_PORT') ?: 587);
$from = getenv('MAIL_FROM') ?: 'noreply@example.test';
return [
'scheme' => 'smtp',
'host' => $login . '.mailexam.cn',
'username' => $login,
'password' => getenv('MAILEXAM_PASSWORD') ?: '',
'port' => $port,
'options' => [],
'embed' => 'cid:',
'from' => [
'address' => $from,
'name' => 'Mailexam Test',
],
];
复杂邮件流程可使用 think-mail 的模板与附件功能 — SMTP 参数保持不变。
4. 发送测试邮件¶
通过 HTTP(控制器)¶
// app/controller/Mail.php
namespace app\controller;
use app\BaseController;
use mailer\facade\Mailer;
class Mail extends BaseController
{
public function test()
{
$payload = $this->request->post();
if ($payload === []) {
$payload = json_decode($this->request->getContent(), true) ?? [];
}
$to = $payload['to'] ?? 'user@example.test';
$subject = $payload['subject'] ?? 'ThinkPHP + Mailexam';
$body = $payload['body'] ?? $payload['text'] ?? 'Mailexam test from ThinkPHP';
Mailer::to($to)->subject($subject)->text($body)->send();
return json(['status' => 'ok']);
}
}
在 route/app.php 中添加路由:
启动并验证:
curl -X POST http://127.0.0.1:8080/mail/test \
-H 'Content-Type: application/json' \
-d '{"to":"user@example.test","subject":"Test","body":"Hello"}'
邮件将出现在 Mailexam 控制台 → 您的项目 → 收件箱。
5. 本地开发与 CI¶
| 环境 | 建议 |
|---|---|
local |
使用含 Mailexam 凭据的 .env |
| CI | 在 pipeline 密钥中设置 MAILEXAM_LOGIN、MAILEXAM_PASSWORD |
GitLab CI 示例:
variables:
MAILEXAM_LOGIN: $MAILEXAM_LOGIN
MAILEXAM_PASSWORD: $MAILEXAM_PASSWORD
MAILEXAM_PORT: "587"
MAIL_FROM: "noreply@example.test"
在 pipeline 中发送邮件后,通过 Mailexam API 验证投递。
6. 常见问题¶
TLS 或认证失败
host必须为{login}.mailexam.cn,username为邮件中的同一登录名。- 登录名与密码为同一项目的配对凭据。
环境变量为空
- 在
(new App())->http之前调用Dotenv::createImmutable(...)->safeLoad()。 - 生产环境在 PHP-FPM / 容器环境中设置变量。
控制台中看不到邮件
- 查看同一 Mailexam 项目的收件箱。
- 检查
runtime/log/中的 SMTP 错误。