我正在使用这些配置:
WebMail.SmtpServer = "smtp.gmail.com";
WebMail.EnableSsl = true;
WebMail.SmtpPort = 587;
WebMail.UserName = "name";
WebMail.Password = "pass";
WebMail.From = "fromaddres";
发送带超链接的确认电子邮件会返回HttpRequestValidationException。
我尝试使用WebMail.Send()方法制作测试邮件页面。一些代码来自那里:
try{
if(IsPost){
WebMail.Send(
to: Request.Form["emailAddress"],
subject: Request.Form["emailSubject"],
body: Request.Form["emailBody"],
isBodyHtml: true
);
message = "Email sent!";
}
}catch(HttpRequestValidationException){
}catch(Exception ex){
message = "Email could not be send! Error: "+ex.Message;
}
如果我在'emailBody'中输入一个纯文本。电子邮件已正确发送。
但是如果我在输入文本中的任何地方写任何html标签,例如超链接或段落,它返回相同的例外,并说“emailBody”输入内容可能具有潜在的危险性。
有人可以说我做错了什么或如何解决这个问题?
修改:
解决方案是将“isBodyHtml”参数设置为false。 删除“emailBody”中的所有html标签,并使用url写简单文本 (例如“嗨,访问此网站:www.google.com”) 在收到的电子邮件中,我收到了一个带有所需网站链接的文字。
无论如何发送<a>
链接都很有用。
答案 0 :(得分:0)
您的Request.Form["emailBody"]
很可能有html编码的字符串。您可能需要将编码后的HTML转换为原始html,然后才能通过电子邮件发送。您可以使用WebUtility.HtmlDecode
(msdn)方法转换回原始html。
to: Request.Form["emailAddress"],
subject: Request.Form["emailSubject"],
body: WebUtility.HtmlDecode(Request.Form["emailBody"]),
答案 1 :(得分:0)
通过请求提交潜在恶意代码时会抛出该异常。在这种情况下,HTML标记。 HttpRequestValidationException
*您可以通过将其添加到web.config中来禁用应用程序的请求验证:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>*
注意:始终清理您的输入。
修改强>
我已经测试了上面的配置,实际上它不起作用。
如果您使用[ValidateInput(false)]
修饰方法并将requestValidationMode="2.0"
添加到<httpRuntime />
元素,则应该能够发送包含html内容的电子邮件。
<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />
从我的测试配置:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />
...
<pages>
....
</pages>
</system.web>
来自控制器:
[HttpPost]
[ValidateInput(false)]
public ActionResult SendMail(string param1)
{
// code omitted due to brewity.
}