我们的应用会生成一封电子邮件,其中包含带有哈希片段的链接。
<a>
标记内)时,URL会被打开,但神秘地排除哈希片段。以下是我们的Rails应用程序中的相关代码,如果有帮助:
mail(from: @message.from, to: @message.to, cc: @message.cc, bcc: @message.bcc, subject: @message.subject) do |format|
format.html { render text: @message.body_text }
end
电子邮件消息(截断;使用Twitter网址代替我们的应用网址,遵循类似的模式):
Subject: Hello
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta content='text/html; charset=utf-8' http-equiv='content-type'>
<title>title</title>
</head>
<body>
<table id='message_body_template'>
<tr>
<td>
<p><a href="http://twitter.com/#!/cnn" title="" target="">Click here</a>
to learn more.</p>
<p>Plain text link: http://twitter.com/#!/cnn</p>
</td>
</tr>
</table>
</body>
</html>
点击此处打开Twitter主页,而纯文本“链接”打开CNN的Twitter页面。任何人都可以解释原因吗?
答案 0 :(得分:1)
是的,问题与您使用的后端无关。 (令人沮丧的是)某些版本的Outlook会删除URL的哈希部分。
我的解决方案是通过电子邮件发送链接的修改版本而不使用哈希,然后将其重定向到应该去的地方。
当我在Laravel + Backbone中遇到同样的问题时,我在routes.php
中使用此代码执行了重定向(相当于Rails中的routes.rb
):
// Redirect /password-reset/XYZ to #/password-reset/XYZ
Route::get('/password-reset/{any}', function() {
$url = Request::url(); // Get full URL
$path = Request::path(); // Get portion of URL after the domain name
return Redirect::to(str_replace($path, "#", $url) . $path);
});
答案 1 :(得分:0)
您将无法更改Outlook处理链接的方式,但您只需使用https://twitter.com/cnn,然后Twitter就会重定向到https://twitter.com/#!/cnn
答案 2 :(得分:0)
最近,当我设置没有任何协议的URL时,我遇到了这个问题。后来我尝试将协议添加到URL中,它开始正常工作。
我正在JS
本身创建邮件正文部分。以下是初始代码。
var link = window.location.host+'/#/somepage';
工作代码。
var link = window.location.protocol + '//' + window.location.host+'/#/somepage';
我希望这可以帮助那些面临类似问题的人。