
在 Laravel 9 中为邮件模板添加图片时,应使用 asset() 辅助函数引用位于 public/ 目录下的静态资源,而非相对路径或 embedData()(该方法用于内联嵌入二进制附件,不适用于 HTML 中的常规图片引用)。
在 laravel 9 中为邮件模板添加图片时,应使用 asset() 辅助函数引用位于 public/ 目录下的静态资源,而非相对路径或 embeddata()(该方法用于内联嵌入二进制附件,不适用于 html 中的常规图片引用)。
在 Laravel 邮件视图中直接使用 是无效的——因为邮件客户端无法解析相对路径,且 Laravel 的邮件渲染环境不支持 Web 服务器的当前目录上下文。正确做法是将图片存放于 
public/img/ 目录下(例如:public/img/vault-tec.png),并在 Blade 模板中通过 asset() 函数生成绝对 URL:
<div class="col one">
@@##@@
</div>
<h1>Message: {{ $data['message'] }}</h1>
<h2>Subject: {{ $data['subject'] }}</h2>
<h2>Email: {{ $data['email'] }}</h2>
✅ 关键要点说明:
- ✅
asset('img/vault-tec.png')会生成类似https://your-app.com/img/vault-tec.png的完整 URL,确保所有邮件客户端(包括 Gmail、Outlook 等)可正常加载; - ❌ 不要使用
src="img/..."或src="/img/..."—— 多数邮件客户端会忽略或拦截非绝对 URL; - ❌
embedData($data, 'img/vault-tec.png')是用于 MIME 内联嵌入(如 CID 引用),需配合cid:协议和复杂 MIME 构造,且仅适用于少数场景(如 Outlook 兼容性要求极高时),不是常规图片展示方案;错误提示body must be a string or resource (got array)正是因为你误将数组传给了本应接收字符串的渲染上下文。
⚠️ 额外建议(提升邮件专业度):
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 为
添加%20%7D%7D)
style="display: block;"避免默认行内元素产生的底部空白; - 使用内联 CSS(邮件客户端对
标签支持有限),并始终设置width/height或max-width; - 测试前确保图片已通过
php artisan storage:link(如使用 symbolic link)或直接置于public/下,并能通过浏览器直接访问https://your-app.com/img/vault-tec.png; - 若需更高兼容性(如防止图片被邮件服务商屏蔽),可考虑使用 Base64 编码内联(仅限小图标),但会增大邮件体积,不推荐主视觉图使用。
综上,asset() 是 Laravel 邮件模板中引用静态图片最简单、可靠且符合最佳实践的方式。










