2012-06-16 42 views
0

我想從我的mvc應用程序使用gmail發送電子郵件。我遇到以下例外情況無法使用Gmail發送電子郵件

無法從傳輸連接讀取數據:現有連接被遠程主機強制關閉。

這裏是在web.config發送電子郵件

string tn = "EmailVerification.htm"; 
string fileName = Path.GetFileName(tn); 
string templatePath = Path.Combine(Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/EmailTemplates")), fileName); 
    System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(); 

      mailMessage.From = new MailAddress(EmailFrom, "Email"); 
      mailMessage.To.Add(new MailAddress(To)); 
      mailMessage.Subject = "subject"; 
      mailMessage.IsBodyHtml = true; 
      MailDefinition mailDef = new MailDefinition(); 
      mailDef.BodyFileName = templatePath; 
      mailDef.IsBodyHtml = true; 
      mailDef.Subject = "mailDefsubject"; 
      mailDef.From = mailMessage.From.ToString(); 

      ListDictionary replacements = new ListDictionary(); 

      replacements.Add("<%FIRSTNAME%>", FirstName); 
      replacements.Add("<%USERNAME%>", "asd"); 
      replacements.Add("<%VERIFICATIONLINK%>", VerificationLink);  
      replacements.Add("<%WEBSITE%>", "http://www.mysite.com"); 

      MailMessage msgHtml = mailDef.CreateMailMessage(To, replacements, new System.Web.UI.Control()); 
      AlternateView htmlView = AlternateView.CreateAlternateViewFromString(msgHtml.Body, null, "text/html"); 

      AddLinkedResources(templatePath, ref htmlView); 

      mailMessage.AlternateViews.Add(htmlView); 

      SmtpClient smtpClient = new SmtpClient(); 
      Object userState = mailMessage; 
      smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "1234567"); 
      smtpClient.EnableSsl = true; 
      smtpClient.Host = "smtp.gmail.com"; 
      smtpClient.Port = 587; 

      //Attach event handler for async callback 
      smtpClient.SendCompleted += new SendCompletedEventHandler(smtpClient_SendCompleted); 
      try 
      {    

       smtpClient.Send(mailMessage); 
       EmailStatus = true; 
      } 
      catch (SmtpException smtpEx) 
      { 
       EmailStatus = false; 

      } 
      catch (Exception ex) 
      { 
       //HttpContext.Current.Response.Write(ex.InnerException); 
       EmailStatus = false; 

      } 

的代碼,我

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="[email protected]"> 
     <network host="smtp.gmail.com" port="587" 
             userName="[email protected]" 
             password="asd" /> 
     </smtp> 
    </mailSettings> 
    </system.net> 
+0

檢查是否有防火牆設置干擾。 – MMK

+0

關於內部異常的任何細節? – MMK

+0

MailDefination Class中的內容是什麼? – MMK

回答

2

嘗試設置:

smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.UseDefaultCredentials = false; 
smtpClient.Credentials = new System.Net.NetworkCredential("[email protected]", "1234567"); 

而且你似乎訂閱到SendCompleted事件,但此事件旨在成爲你sed在異步發送郵件時(SendAsync方法),所以你可以擺脫它。您正在使用的Send方法是阻塞。

您還可以結帳following answer

+0

tnx中定義的,用於提供額外的信息,我確實是通過複製粘貼的方式異步發送電子郵件,但是我是仍然得到例外,我試圖關閉防火牆。我有一些設置在配置文件PLZ看看更新的問題 –

+1

嘗試簡化:http://stackoverflow.com/questions/6974112/send-mail-by-smtp-gmail-sever/6974160#6974160這是否工作?同時請注意,在ASP.NET中使用異步版本時存在以下問題:http://stackoverflow.com/q/6935427/29407 –

+0

我已經使用了簡化版本,但仍然是相同的(內部)異常...我有在我的其他應用程序成功使用此代碼不知道爲什麼這是爲什麼它的麻煩...我使用Visual Studio 2010,Windows 7,如果這有幫助 –

相關問題