Outlook удаляет хэш URL-адреса из электронной почты

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

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

Нажмите здесь, чтобы открыть домашнюю страницу Twitter, а простое текстовое «ссылка» открывает страницу CNN в Twitter. Кто-нибудь может объяснить, почему?


person Martin Gordon    schedule 29.03.2012    source источник
comment
Да, мы только что заметили это сегодня в некоторых версиях Outlook. Google привел меня сюда, так что приятно знать, что другие тоже столкнулись с этим.   -  person Simon East    schedule 10.11.2015


Ответы (3)


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

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

person doesterr    schedule 30.03.2012
comment
Я должен был быть более четким — я заменил URL-адреса нашего приложения URL-адресами Twitter в примере, поскольку они оба следуют одному и тому же шаблону и демонстрируют одинаковое поведение. Скорее всего, нам потребуется изменить наш код на стороне сервера (к счастью, это всего лишь несколько URL-адресов), но я писал здесь в основном для того, чтобы узнать, является ли это известной проблемой в Outlook и есть ли обходной путь. - person Martin Gordon; 30.03.2012
comment
@MartinGordon такая же проблема. Вы нашли способ, чтобы Outlook не удалял хэш? - person barsh; 04.08.2015
comment
Это все равно, что спросить, есть ли способ заставить Microsoft придерживаться стандартов и/или разумных ожиданий. Решите это. - person tripleee; 10.11.2015

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

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

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

Рабочий код.

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

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

person James    schedule 16.01.2018