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

Symfony翻译文件及Mailer Bundle发送重置密码邮件换行丢失解决方法

解决Symfony重置密码邮件换行丢失问题

原因分析

邮件客户端(如Roundcube)默认以HTML格式解析邮件时,纯文本的换行符(\n或\r\n)不会被识别为换行,只会显示为空格,导致内容挤成一行。

解决方案

方案1:发送纯文本格式邮件

确保邮件以纯文本形式发送,这样换行符会被正确解析。在构建邮件时,使用text()方法传入翻译后的内容:

// 创建纯文本邮件示例
$email = (new Email())
    ->from('your@example.com')
    ->to($user->getEmail())
    ->subject('Reset your password')
    ->text($translator->trans('resetting.email.message', [
        '%username%' => $user->getUsername(),
        '%confirmationUrl%' => $resetUrl
    ]));

$this->mailer->send($email);

方案2:使用HTML格式邮件并处理换行

如果需要发送HTML邮件,将翻译内容中的换行转换为HTML的换行标签<br>,或者用段落<p>分隔内容:

方式A:直接在翻译单元中编写HTML

修改翻译文件的<target>内容为HTML结构:

<trans-unit id="resetting.email.message">
  <source>resetting.email.message</source>
  <target>
    Hello %username%!<br><br>
    To reset your password - please visit %confirmationUrl%<br><br>
    Regards,<br>
    the Team.
  </target>
</trans-unit>

然后在构建邮件时使用html()方法:

$email = (new Email())
    ->from('your@example.com')
    ->to($user->getEmail())
    ->subject('Reset your password')
    ->html($translator->trans('resetting.email.message', [
        '%username%' => $user->getUsername(),
        '%confirmationUrl%' => $resetUrl
    ]));

方式B:用Twig模板渲染并处理换行

如果使用Twig模板生成邮件内容,在模板中使用nl2br过滤器将换行转换为<br>:

{# templates/emails/reset_password.html.twig #}
{{ 'resetting.email.message'|trans({'%username%': username, '%confirmationUrl%': confirmationUrl})|nl2br }}

然后在构建邮件时加载模板:

$email = (new TemplatedEmail())
    ->from('your@example.com')
    ->to($user->getEmail())
    ->subject('Reset your password')
    ->htmlTemplate('emails/reset_password.html.twig')
    ->context([
        'username' => $user->getUsername(),
        'confirmationUrl' => $resetUrl
    ]);

方案3:同时发送HTML和纯文本版本

为了兼容不同邮件客户端,最好同时发送HTML和纯文本版本:

$translatedMessage = $translator->trans('resetting.email.message', [
    '%username%' => $user->getUsername(),
    '%confirmationUrl%' => $resetUrl
]);

$email = (new Email())
    ->from('your@example.com')
    ->to($user->getEmail())
    ->subject('Reset your password')
    ->text($translatedMessage)
    ->html(nl2br($translatedMessage));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:30:24