我正在我网站的控制器中生成一封电子邮件,其中包含指向我网站的链接:
"http://" & Request.Url.Authority & "/some-page"
当我在本地计算机上测试它(返回localhost:12345
)并在生产中(返回www.company.com
)时,这是有效的,但是有一个人得到了这个结果:
http://www.company..com/some-page
正如您所看到的,域名中有2 ..
。我无法重现这个错误,这怎么可能?
编辑:更多信息
答案 0 :(得分:2)
我应该通过一个简单的例子尽快尝试这个:
Module Module1
Sub Main()
Dim SomeAddress As New Uri("http://www.example..com/test")
Console.WriteLine(SomeAddress.Authority)
End Sub
End Module
这将在构造函数中抛出异常:
System.UriFormatException - 无效的URI:主机名不能 解析
因此,客户无法在未经编辑的情况下从我的代码收到此类电子邮件。
答案 1 :(得分:2)
这实际上是电子邮件编码方式的问题,请参阅以下答案:https://stackoverflow.com/a/6603002/186288。总之,您应该将编码更改为UTF8以强制执行电子邮件的base-64编码,否则某些电子邮件客户端可能会错误解释默认的Content-Transfer-Encoding:Quoted-Printable;编码并在恰好碰到包装点的URL中添加额外的“。”。
为此,请在发送电子邮件之前添加此行:
mail.BodyEncoding = System.Text.Encoding.UTF8;
答案 2 :(得分:1)
您为什么使用Request.Url.Authority
?我建议你不要使用它,并使用Request.Url.Host。最好使用Request.Url.Host
或Uri类构造函数,当构造不正确的URI时,它会抛出异常,你可以记录它或显示错误。
无论如何,很难预测一个用户为什么会有www.company..com
无论如何,使用Request.Url.Authority
级联的代码无法生成它。所以也许错误在其他地方。