Laravel9部署服务器后日文发件人名称显示????乱码如何解决
Laravel 9 服务器环境邮件发件人日文乱码解决
问题现象
- 本地开发环境:
.env中MAIL_FROM_NAME配置的日文发件人名称显示正常
- 服务器生产环境:同配置下发件人名称显示为
????乱码
- 本次测试使用的日文发件人文本为「コトナル」
解决步骤
按以下顺序排查,绝大多数场景下前3步即可解决问题:
- 检查服务器PHP编码配置
执行php -i | grep charset查看PHP当前默认字符集,若不是UTF-8,修改php.ini对应配置:
修改完成后重启PHP-FPM、Nginx/Apache服务生效。default_charset = "UTF-8" mbstring.internal_encoding = UTF-8 - 修正Laravel邮件全局配置
打开项目下config/mail.php,确认存在UTF-8编码配置,缺失则补充:
不要将该值改为'charset' => 'utf-8',ISO-8859-1等单字节编码,这类编码不支持日文、中文等多字节字符。 - 规范环境变量写法并清除缓存
打开项目根目录.env文件,给MAIL_FROM_NAME的值加上双引号,避免特殊字符解析异常:
执行以下命令清除旧的配置缓存:MAIL_FROM_NAME="コトナル"
验证功能正常后,生产环境可以再执行php artisan config:clear php artisan cache:clearphp artisan config:cache重载缓存提升加载效率。 - 排查SMTP服务端兼容问题
临时将邮件驱动改为log,在服务器本地触发邮件发送,查看storage/logs下的邮件日志里发件人名称是否正常:- 如果日志里名称正常,说明是所用SMTP服务商不支持UTF-8发件人名称,可联系服务商调整,或在发信时手动做MIME编码。
- 如果日志里已经是乱码,回到前两步重新检查系统、PHP、Laravel的编码配置。
- 兜底编码方案
以上配置都正常仍乱码的话,在对应的邮件类(Mailable)中手动对发件人名称做MIME头编码,避免传输过程中被转码:public function build() { return $this->from( config('mail.from.address'), mb_encode_mimeheader(config('mail.from.name'), 'UTF-8') ) ->subject('邮件主题') ->view('对应邮件模板路径'); }
内容的提问来源于stack exchange,提问作者shahab ud din gohar
相关产品推荐
相关产品推荐

