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沙箱限制)
.env配置中,将{AWS_REGION}替换为你的SES实际区域(如us-east-1),AWS_SES_USER_NAME和AWS_SES_USER_PASS必须是SES生成的SMTP凭证,不是IAM访问密钥。- 沙箱账户下,发件人和收件人邮箱都必须在AWS SES控制台中完成验证,否则邮件会被拒绝。
内容的提问来源于stack exchange,提问作者wm89
相关产品推荐
相关产品推荐

