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

Laravel 10使用AWS SES SMTP发送邮件报错求助

解决Laravel 10 + AWS SES SMTP发送邮件的TypeError问题

错误原因

Laravel 10基于Symfony 6+的Mime组件,setBody()方法不再接受字符串参数,要求传入Symfony\Component\Mime\Part\AbstractPart类型的实例(如HtmlPart或TextPart),直接传字符串会触发类型错误。

修正方案

方案1:使用Laravel封装的快捷方法(推荐)

  • 发送纯文本邮件,直接用Mail::raw(),无需额外调用setBody:
Mail::raw('This is email test', function ($email_message) {
    $email_message->from('验证过的发件邮箱', '发件人名称');
    $email_message->to('验证过的收件邮箱');
    $email_message->subject('Email Test');
});
  • 发送HTML邮件,改用Mail::html():
Mail::html('<p>This is email test</p>', function ($email_message) {
    $email_message->from('验证过的发件邮箱', '发件人名称');
    $email_message->to('验证过的收件邮箱');
    $email_message->subject('Email Test');
});

方案2:手动创建Mime部件调用setBody

如果一定要用setBody,需要实例化对应的Mime部件:

use Symfony\Component\Mime\Part\HtmlPart;
use Symfony\Component\Mime\Part\TextPart;

// HTML邮件
Mail::raw('', function ($email_message) {
    $email_message->from('验证过的发件邮箱', '发件人名称');
    $email_message->to('验证过的收件邮箱');
    $email_message->subject('Email Test');
    $email_message->setBody(new HtmlPart('This is email test'));
});

// 纯文本邮件
Mail::raw('', function ($email_message) {
    $email_message->from('验证过的发件邮箱', '发件人名称');
    $email_message->to('验证过的收件邮箱');
    $email_message->subject('Email Test');
    $email_message->setBody(new TextPart('This is email test'));
});

额外注意事项(AWS SES沙箱限制)

  1. .env配置中,将{AWS_REGION}替换为你的SES实际区域(如us-east-1),AWS_SES_USER_NAME和AWS_SES_USER_PASS必须是SES生成的SMTP凭证,不是IAM访问密钥。
  2. 沙箱账户下,发件人和收件人邮箱都必须在AWS SES控制台中完成验证,否则邮件会被拒绝。

内容的提问来源于stack exchange,提问作者wm89

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:40:20