【问题标题】:Yii2 - Output of extra characters in generated email messageYii2 - 在生成的电子邮件中输出额外字符
【发布时间】:2016-02-05 12:07:48
【问题描述】:

我正在尝试通过电子邮件向新用户发送帐户激活链接。我在 Yii2 中使用默认邮件程序。我使用视图文件“activation_request_email”生成以下代码以生成电子邮件正文。

$emailMessage = Yii::$app->mailer->compose('activation_request_email', ['userModel' => $this]);

然后在视图文件中我使用以下代码生成激活链接:

<?= Html::a ('Activation Link', ["site/activation", "key" => $userModel->email_activation_key])?> 

邮件发送成功,但生成的邮件中包含链接的邮件总是包含一些额外的字符,如“3D”和“=”。如下:

<a href=3D"/tbpv2/web/site/acti=vation?key=3DfW_9XM-bdxXDHCTEwPTAPL1wwKGcc3">Activation Link</a>

邮件组件的配置是:

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'useFileTransport' => true,
    ],

消息中生成的html标头片段如下:

<head> <meta http-equiv=3D"Content-Type" content=3D"text/ht=ml; charset=3DUTF-8" /> <title> Reset Token</title>= </head>

可能是什么原因?

【问题讨论】:

  • 使用useFileTransport = true 表示您没有将邮件发送到真实的电子邮件地址。
  • 您确定代码中的href 部分没问题吗?似乎3D 之前的引用不应该在那里,加上链接 - acti=vation 似乎很奇怪。
  • @Joe 是的,“3D”和“=”字符在生成的消息中任意出现。
  • 你使用i18n吗?你的urlManager 配置是什么?
  • @Joe urlManager 配置:'showScriptName' => false, 'enablePrettyUrl' => true

标签: character-encoding yii2 swiftmailer url-encoding activation


【解决方案1】:

你有错别字

 <?= Html::a ('Activation Link', ["site/activation", "key" => $userModel->email_activation_key])?>

尝试删除a后的空格

<?= Html::a('Activation Link', ["site/activation", "key" => $userModel->email_activation_key])?>

只是为了检查问题是否与帮助函数有关或其他尝试以这种方式回显 html 代码

<?php echo "<a href='yuor_site..../site/activation?key=" .     
      $userModel->email_activation_key . "'>Activation link</a"; ?>

并测试结果

那就试试这个方法

$activationLink = Yii::$app->urlManager->createAbsoluteUrl(['site/activation', 'key' => model->email_activation_key]);


<?= Html::a(Html::encode($activationLink), $activationLink) ?>

【讨论】:

  • 这似乎不是问题。但是,没有效果。请参阅我更新的问题。邮件发送成功,但生成的邮件中包含链接的邮件总是包含一些额外的字符,如“3D”和“=”。
  • 问题是特定于使用 Yii2 默认邮件程序发送的电子邮件输出。
  • 然后显示邮件配置(yourApp/config/main.php o main-local.php)
  • 使用邮件配置更新问题。
  • 请注意附加字符“3D”和“=”出现在整个消息中。使用消息中生成的 html 标头的 sn-p 查看更新的问题。
【解决方案2】:

=3D 是由编码 Quoted-printable 引起的 = 的替换。这是绝对有效的。见Wikipedia 和这个github issue

维基百科:

Quoted-Printable 或 QP 编码,是一种使用可打印 ASCII 的编码 用于传输 8 位数据的字符(字母数字和等号 =) 通过 7 位数据路径,或者通常通过非 8 位介质 干净的。它被定义为一种 MIME 内容传输编码用于​​strong> 电子邮件

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多