发送确认邮件中的链接

时间:2014-01-18 16:23:02

标签: c# asp.net razor asp.net-webpages

我正在使用这些配置:

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>链接都很有用。

2 个答案:

答案 0 :(得分:0)

您的Request.Form["emailBody"]很可能有html编码的字符串。您可能需要将编码后的HTML转换为原始html,然后才能通过电子邮件发送。您可以使用WebUtility.HtmlDecodemsdn)方法转换回原始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.
}