今天调用.Net邮件类发送邮件到Hotmail邮箱,碰到如下问题:
代码:
MailMessage mailMessage = new MailMessage();//(sendFromEmail, sendToEmails);
mailMessage.From = new MailAddress(sendFromEmail);
mailMessage.To.Add(sendToEmails);
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
mailMessage.IsBodyHtml = true;
try
{
smtpClient.Send(mailMessage);
return true;
}
邮件的Body是放在xml文档中的,内容如下:
<ConfigEmailBody>
<![CDATA[
<a href="http://localhost/#!/customer/forgot?email=saber@live.com&token=ee1bd557-dd64-47ce-84e4-623e598ad6e1">http://localhost/#!/myspace/basic</a>
]]>
</ConfigEmailBody>
但是Hotmail里F12开发人员工具中看到的href内容如何:
http://localhost/#%21/customer/forgot/email=saber%40live.com%26token=ee1bd557-dd64-47ce-84e4-623e598ad6e1。其中的!、@、& 符号都被转义了,导致点开这个链接只有一个email参数了(token变成了参数值的一部分),这是为什么?
邮件发送,如果连接里面带有参数的话,楼主可以对参数进行加密,在接收参数时,对参数进行解密,这样比较安全,我编写邮件发送时采用的就是这样方法,避免不必要的错误。
嗯,参数值加密安全多了,这里我偷懒了。
但问题是两个参数:email和token,中间的&符号被转义了。。
@shgq: 这还不容易吗email和token通过特殊字符链接成一个字符串,对这个字符串加密不就好了
建议你断点调试一下,这应该是从xml读取出来的时候被转义了,页不是发送出去被转义
这是Body里面的字符串,这时候还是没被转义的。
@shgq:
把utf-8编码去掉试试
@Rich.T:
还是不行哎。但发给其他邮箱(sina、163、QQ)没这个问题。
而人人网发给hotmail的邮件没有这个问题。
URL作为参数传递的时候,进行UrlEncode,UrlDecode
UrlEncode应该这种情况下用的吧:
比如我有一个连接http://localhost/Login?userName=saber & password=123&123,
把&作为参数值的时候要encode一下吧。
而我这情况是不需要encode的,但是&符号却被encode了
@shgq:你把整个URL手动进行Encode/Decode就OK了。
@IsaacZhang:
整个url进行Encode我做的到,encode完了发到邮件服务器了,之后的Decode我做不到了、