电子邮件长URL的替代方法?

时间:2010-07-19 20:38:15

标签: email url-shortener

我有一个使用如下所示网址的网络应用程序:

http://library.example.com/Register.aspx?query=academic&key=586c70bb-5683-419c-aae9-e596af9ab66a

(使用GUID而不是普通的int来阻止猜测,这就是我们现在所需要的。)

问题:当通过电子邮件发送时,长URL经常中断。它是人类发送电子邮件,所以我无法控制格式。有时它是发送电子邮件程序有问题,有时是接收,但不管我是否花太多时间通过修复问题与人交谈。

所有内容都必须来自此域名,因此我无法使用第三方缩短内容。我可以举办自己的活动,但这看起来像是一块垃圾。

有什么建议吗?

编辑

@Sunny:感谢您的详细阐述,但我的情况与您的假设不同。公司客户(我的)将此URL传递给其员工,并使用它来访问品牌注册页面。他们需要在注册过程中提供有效的电子邮件,并将其转发给公司主管。

注册使他们可以访问数据库,但他们看到的并不是特定于公司客户的。所以偶尔的闯入者并不是什么大问题;当他们被公司主管淘汰时,我们邀请他们订阅。

@Everybody:标点符号(?&=)上的电子邮件破坏,但是在某个预定的行长度。我也很惊讶。请注意,域名很长,虚拟目录的路径也是如此,这是问题的一部分。

阅读完回复后,我将使用base64作为伪缩短器,如:

http://a.MyLongDomainName.com/?q=a&key=base64_encoded_GUID

......看看它是否存活下来。谢谢大家。

7 个答案:

答案 0 :(得分:4)

你至少可以缩短一点。现在,您发送一个GUID,这是一个128位数字,格式基本上是十六进制,带有额外的破折号。如果将GUID视为字节数组并将其转换为Base64,则可以减少一些内容。同样,“query = academic”可以是“q = a”。

GUID目前占用36个字符。转换为Base-64可以将其降低到22,从而节省14个字符。将“query = academic& key =”替换为“q = a& k =”可以削减另一个13.尽管存在符号和等号,但总共剪切27个字符可能会使您的URL足够短,不会换行。 / p>

还有一个细节:Base-64文本将以“=”结尾,然后将其十六进制编码为“%3D”。解决方案是关闭该字符,因为它只是填充。

归功于原始海报,看起来最好的选择是各种各样的事情:

  1. 带有base-64的Compact GUID。
  2. 缩短键名,如果可能,缩短值。
  3. 在角括号中包装网址,以鼓励客户正确解析它。
  4. 如果可能,请使用URL重写替换密钥名称,以使其看起来像路径。

答案 1 :(得分:2)

如果您无法使用第三方网址缩短程序,那么您唯一的选择(除了更改网址结构,如Sunny建议的那样)是用尖括号括住您的网址,如下所示:

<http://library.YourDomainNameHere.com/Register.aspx?query=academic&key=586c70bb-5683-419c-aae9-e596af9ab66a>

遵循Uniform Resource Identifiers (URI): Generic Syntax文档中的准则的任何电子邮件客户端都应显示可点击的链接。但是,这不是一个万无一失的解决方案,您最终可能会采用URL缩短服务或重组URL。

答案 2 :(得分:1)

安装自己的缩短服务(这将是理想的解决方案IMO)的唯一选择可能是整个URL的base64编码(并使用更短的密钥)。但这会使字符串长度增加33%(很可能在电子邮件客户端中断),看起来很难看。

我会建立一个URL缩短服务,根据需要将URL缩短为:

http://library.example.com/go/586c70bb-5683-419c-aae9-e596af9ab66a

答案 3 :(得分:0)

REST-ful url like:

http://www.yourdomainhere.com/register/academic/ {userName_here}

可能会帮助IMO。

如果用户未注册,则可以执行此操作。返回确认事实的消息

如果用户已经注册,则不会有任何操作&amp;可能会显示用户已注册的通知。

URL的路由和/或验证请求等可以是最好留给查看请求管道的模块的实现细节......

HTH。

修改

正如下面@Steven所指出的,这个解决方案还有一个额外的步骤:

当用户点击REST URL时,启动预先填写用户名的确认/登录屏幕。用户可以登录帐户&amp;这是用户有效的确认。直到他第一次登录,帐户的状态可以“未确认”&amp;在他第一次登录时,如果点击/请求来自发送的电子邮件和/或通过网络浏览器中的请求,则可以“确认”而不会打扰。

这也将确保它适用于真实的电子邮件帐户,因为在用户实际进行有效登录之前,该帐户将不会处于“已确认”状态...

答案 4 :(得分:0)

您可以自行托管一些预先打包的URL Shortener。这是一个codeplex搜索
http://www.codeplex.com/site/search?query=url%20shortener
这将使您能够将短网址保留在内部

或者你可以在某些方面实现如何实现一个更难搞乱的RESTFul URL http://library.example.com/Register/Academic/586c70bb-5683-419c-aae9-e596af9ab66a
这个解决方案应该比查询字符串更好,因为通常在电子邮件客户端中断的是?=&

我个人认为RESTFul解决方案是最好的,因为它创建了仍然具有“某种意义”的最干净的网址。

答案 5 :(得分:0)

如何用YouTube样式键替换GUIDS

e.g。 http://library.example.com/Register.aspx?q=academic&k=jkGlkNu8

通过使用base-64字符串(而不是base-16的Guids)并删除那些讨厌的破折号,您可以将一系列不同的唯一键包装到少量字符中。

答案 6 :(得分:0)

这里介绍的方法组合怎么样?

将较短的URL与密钥的Base64编码组合将转为

http://library.example.com/Register.aspx?query=academic&key=586c70bb-5683-419c-aae9-e596af9ab66a

http://l.example.com/register/ac/WGxwu1aDQZyq6eWWr5q2ag

更具可读性,IMO。缺少像这样的角色?和&amp;降低了'cut'n'paste错误的风险。