5

我们的应用程序会生成一封电子邮件,其中包含一个带有哈希片段的链接。

  • 当 Outlook 2010 用户单击 HTML 链接(在<a>标记内)时,URL 会打开,但会神秘地排除哈希片段。
  • 如果用户单击纯 URL(Outlook 将其转换为可单击的链接),则完整的 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 URL 代替我们的应用 URL,它们遵循类似的模式):

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>

Click here打开 Twitter 主页,而纯文本“链接”打开 CNN 的 Twitter 页面。谁能解释为什么?

4

3 回答 3

1

是的,问题与您使用的后端无关。看起来(令人沮丧地)某些版本的 Outlook 去除了 URL 的哈希部分。

我的解决方案是通过电子邮件发送不带散列的链接的修改版本,然后将其重定向到它应该去的地方

当我在 Laravel + Backbone 中遇到同样的问题时,我使用以下代码执行了重定向routes.php(相当于routes.rb在 Rails 中):

// 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);
});
于 2013-12-18T21:23:07.887 回答
0

最近,当我在没有任何协议的情况下设置 URL 时,我遇到了这个问题。后来我尝试将协议添加到 URL 并开始正常工作。

我正在自己创建邮件正文部分JS。下面是初始代码。

var link = window.location.host+'/#/somepage';

工作代码。

var link = window.location.protocol + '//' + window.location.host+'/#/somepage';

我希望这可以帮助面临类似问题的人。

于 2018-01-16T07:02:11.667 回答
-1

您将无法更改 Outlook 处理链接的方式,但您可以简单地使用https://twitter.com/cnn,然后 twitter 将重定向到https://twitter.com/#!/cnn

于 2012-03-30T01:25:54.920 回答