0

我試圖通過電子郵件向新用戶發送帳戶激活鏈接。我在Yii2中使用默認郵件程序。我通過使用視圖文件'activation_request_email'生成以下代碼來生成電子郵件正文。Yii2 - 生成的電子郵件中的額外字符的輸出

$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> 

什麼可以原因嗎?

+0

使用'useFileTransport = true'表示您不發送發送郵件到真實的電子郵件地址。 – scaisEdge

+0

你確定你的代碼中的'href'部分是可以的嗎?看起來像引號之前的'3D'不應該在那裏,再加上鍊接 - 'acti = vation'看起來很奇怪。 – Joe

+0

@Joe是的,「3D」和「=」字符在生成的消息中任意出現。 –

回答

0

你有錯字

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

嘗試

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

只是爲了檢查後刪除空間,如果這個問題是關係到輔助funtion或其他嘗試呼應的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) ?> 
+0

這似乎不成問題。但是,沒有效果。請看我更新的問題。消息已成功發送,但生成的包含鏈接消息的電子郵件始終包含一些額外的字符,如「3D」和「=」。 –

+0

我已更新答案 – scaisEdge

+0

問題特定於使用Yii2默認郵件發送的電子郵件輸出。 –

0

=3D是由編碼引用可打印=的替代品。這絕對有效。見Wikipediagithub issue

百科:

引用打印,或QP編碼,是使用可打印的ASCII編碼 字符(字母數字和等號=),以在發送的8位數據 7位數據路徑,或者一般情況下,在一個不是8位的介質上進行清理。它被定義爲一個MIME內容轉移編碼使用 電子郵件

相關問題