邮件客户端的角度网址

问题描述:

我发送包含有指向角前端应用程序的确认令牌的注册确认网址注册激活邮件的剥离部分:邮件客户端的角度网址

... <a href="https://domain.com/#/confirm-signup?token=1234...">Activate</a> ...

请注意,令牌是JWT,并且相当长。

这工作发现对于大多数用户,但对于链路上的某些点击他们带到https://domain/com只是没了confirm-signup?token=...

它好像邮件客户端可以在#后剥离一切,但我可​​以”没有找到任何其他人有这个问题的证据,我也不能复制它。

到目前为止,我的最好猜测是,一些邮件客户端看到#,并以某种方式将尾部作为内部锚点并将其剥离...?

有其他人遇到过这种问题吗?如果是这样,你有没有找到任何解决方案,用其他方法取代整个机制?

+0

是的,我以前也遇到过,因为#的这个问题,我们在那里试图链接到一个锚上的LandingPage .. –

一些客户端对待hash-link就好了。其他人没有。有一个关于Outlook在这里被肮脏的话题:Outlook strips URL hash from email

我们在我们公司做的解决这个问题的方法就是在我们的服务器上创建一个重定向的处理程序。您的电子邮件链接将变为http://domain.com/email-link?url=https%3A%2F%2Fdomain.com%2F%23%2Fconfirm-signup%3Ftoken%3D1234,您的服务器端脚本将抓取查询参数url并立即触发重定向。

您需要确保找到电子邮件中的所有链接并将其替换。这里有一个PHP函数,但是你可以用你使用的任何后端语言来做到这一点。正则表达式在这里可能会有所帮助。

function replaceLinks($html,$hash) { 
    return preg_replace_callback('/<a [^>]*href=[\"\']{1}(.+?)[\"\\\']{1}/', function($matches) use ($hash) { 
     return str_replace($matches[1],"http://domain.com/email-link?url=".rawurlencode($matches[1]),$matches[0]); 
    }, $html); 
} 
+0

中包含'#'的绝对url。我怀疑这是是最可靠的解决方案。在短期内,我们已经使用了一个简短的链接,但是它带来了它自己的问题,被gmail等人所诟病。我们目前的角度应用程序没有服务器端组件,所以这个解决方案将是一个我们实施的一点痛苦。 –

+0

@PeterWhitfield你可以很容易地在前端设置重定向脚本,只需查看查询参数,然后用'window.location'重定向即可。 –

是的我之前遇到过这个问题,因为#我试图链接到目标页上的一个锚。我的解决方案最终使用了short.url服务来将#从html中“隐藏” https://goo.gl/

+0

是你只使用本地锚(即:'HREF =“#... “')? Campaign Monitor在这种情况下有一篇关于变量行为的文章,我怀疑对于某些客户端来说,它不仅仅是用'#'盯着锚,而且有时包括在字符串 –

看起来像你需要的percent encoding

很多时候,当你的href被解析(在这种情况下是角度),它不处理特殊字符或删除它们。找到您的问题字符并将其替换为%3F代替?,%26代替&和%23代替#。其余的都在链接的图表中。

一旦编码地址命中浏览器,url将在您的url栏中解码。