Laravel 发送邮件时logo无法内嵌正文仅作为附件的问题求助
问题原因
你当前出现图片转为附件的核心原因是 $message->embed() 方法传入了远程HTTP链接,该方法仅支持传入本地文件的绝对路径,传入远程资源地址时Laravel无法正确识别为正文内嵌资源,就会默认转为附件发送。


可行解决方案
方案1:使用本地路径内嵌图片(推荐,兼容性最好)
将logo图片存到项目本地的public/assets/images/目录下,修改邮件模板的图片引用代码,使用public_path()获取本地文件的绝对路径:
<img src="{{$message->embed(public_path('assets/images/logo.png'))}}" style="max-width: 100px"/>
该方案会将图片直接内嵌到邮件内容中,绝大多数邮件客户端会默认显示,无需用户手动授权加载外部资源。
方案2:直接使用公开外链(无需内嵌,邮件体积小)
如果你的logo已经上传到公网可直接访问的服务器,不需要内嵌的话可以直接去掉$message->embed()包裹,直接写图片的公网链接:
<img src="https://itecounsel.com/public/assets/images/logo.png" style="max-width: 100px"/>
注意要确保该链接无访问权限校验、公网可直接访问,缺点是部分邮件客户端会默认拦截外部图片,需要用户手动开启显示。
方案3:直接嵌入远程图片内容
如果你必须使用远程资源、不想存到本地,可以用embedData方法直接读取远程图片内容嵌入:
<img src="{{$message->embedData(file_get_contents('https://itecounsel.com/public/assets/images/logo.png'), 'logo.png', ['mime' => 'image/png'])}}" style="max-width: 100px"/>
使用该方案需要确保PHP配置的allow_url_fopen处于开启状态,允许读取远程资源。
注意事项
- 图片尽量使用png、jpg等通用格式,避免使用webp等兼容性较差的格式
- 测试阶段可使用邮件测试工具验证显示效果,避免正式发送时出现样式异常
内容的提问来源于stack exchange,提问作者Rajin
相关产品推荐
相关产品推荐

