2014-01-18 90 views
0

我使用這些配置:發送鏈接確認郵件

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

很可能你的Request.Form["emailBody"]有html編碼的字符串。在通過電子郵件發送之前,您可能需要將編碼的HTML轉換爲原始html。您可以使用WebUtility.HtmlDecodemsdn)方法將其轉換回原始html。

 to: Request.Form["emailAddress"], 
     subject: Request.Form["emailSubject"], 
     body: WebUtility.HtmlDecode(Request.Form["emailBody"]), 
+0

還是一樣的異常。除禁用驗證之外,還有其他方式可以做到這一點嗎? –

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. 
} 
+0

這並沒有改變我的情況。任何其他想法? –

+0

@AdamWiernicki - 增加了一個工作解決方案。 – scheien

+0

好吧,但如果我在網頁上寫什麼? 我必須使用某些東西而不是[ValidateInput(false)],因爲我沒有控制器。 我發現了一些關於「Validation.Exclude」方法[這裏](http://blogs.msdn.com/b/scothu/archive/2010/10/06/web-pages-beta-2-request- validation.aspx),但我既不能使用它,也不能找到任何關於它的文檔。 –