You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地PHP使用Mailjet发送邮件显示成功但未送达问题

解决Mailjet API显示发送成功但未收到邮件的问题

排查与修复步骤

1. 查看Mailjet后台发送日志

登录Mailjet控制台,找到对应邮件的发送记录:

  • 若状态为pending:属于Mailjet队列延迟,等待一段时间再检查;
  • 若状态为blocked/rejected:日志会标注具体原因(比如发件人未验证、内容触发垃圾邮件规则);
  • 若状态为delivered:直接去收件人的垃圾邮件、归档文件夹查找,测试邮件常被误判。

2. 验证发件人地址合法性

Mailjet要求发件人地址必须完成验证(单地址验证或域名DKIM/SPF验证),未验证地址发送的邮件几乎都会被收件方拒收。登录后台确认你使用的x@gmail.com已通过验证,或替换为已验证的发件地址。

3. 修正代码的响应判断逻辑

你当前的代码判断逻辑存在错误:Mailjet的post方法无论请求成功或失败,都会返回响应对象,不会直接返回false,这导致你误判了发送状态。修改代码如下:

try {
    $response = $mj->post(Resources::$Email, ['body' => $body]);
    if ($response->success()) {
        echo "Email sent successfully!";
        // 可选:打印响应详情,确认邮件的发送状态
        // print_r($response->getData());
    } else {
        echo "Email failed to send!";
        // 打印错误信息,精准定位问题
        print_r($response->getErrorInfo());
    }
} catch (Exception $e) {
    echo 'Caught exception: '. $e->getMessage() ."\n";
}

通过success()方法判断请求是否真的成功,用getErrorInfo()获取具体错误,能快速定位API层面的问题。

4. 检查收件人邮箱状态

  • 确认收件人地址y@gmail.com拼写无误;
  • 若收件人是企业邮箱,可能被公司邮件网关拦截,换用个人邮箱测试;
  • 检查收件人的已删除邮件、垃圾邮件文件夹。

5. 确认本地网络连通性

本地PHP环境需要能正常访问Mailjet的API服务器,可在终端执行以下curl命令测试:

curl -X POST https://api.mailjet.com/v3.1/send \
  -u "你的API_KEY:你的SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "Messages":[
      {
        "From": {"Email":"x@gmail.com","Name":"name"},
        "To": [{"Email":"y@gmail.com","Name":"name"}],
        "Subject": "Test",
        "TextPart": "Test content"
      }
    ]
  }'

如果curl请求失败,说明本地网络被防火墙、代理拦截,需调整网络设置。

内容的提问来源于stack exchange,提问作者Eng. Kai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:31:05