Outlook удаляет URL-адрес из электронной почты - PullRequest
5 голосов
/ 30 марта 2012

Наше приложение генерирует электронное письмо, содержащее ссылку с фрагментом хеша.

  • Когда пользователь 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

Сообщение электронной почты (усечено; вместо URL наших приложений используются URL-адреса 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в то время как "ссылка" обычного текста открывает страницу Twitter CNN.Кто-нибудь может объяснить, почему?

Ответы [ 3 ]

1 голос
/ 19 декабря 2013

Да, проблема не связана с тем, какой сервер вы используете.Похоже, что (разочаровывающе) некоторые версии 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);
});
0 голосов
/ 16 января 2018

Недавно я столкнулся с этой проблемой, когда устанавливал URL без какого-либо протокола. Позже я попытался добавить протокол в URL, и он начал работать правильно.

Я создавал почтовую часть тела в самом JS. Ниже приведен исходный код.

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

Рабочий код.

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

Я надеюсь, что это может помочь кому-то, кто сталкивается с подобной проблемой.

0 голосов
/ 30 марта 2012

Вы не сможете изменить способ обработки ссылки в Outlook, но вы можете просто использовать https://twitter.com/cnn, и Twitter затем перенаправит на https://twitter.com/#!/cnn

...