2012-07-03 65 views
3

我想從我的asp.net網站發送自動郵件,只要有人點擊提交按鈕輸入一些值。我用C#創建了一些代碼。它沒有顯示任何錯誤,但也沒有發送任何郵件。我正在使用網絡憑證中組織的郵件服務器的IP地址。我不確定如何爲我用來發送郵件的電子郵件地址提供密碼。我正在與你分享我的代碼。想要從asp.net網站發送自動郵件

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
using System.ComponentModel;// for backgroundworker class 
using System.Net; 
using System.Net.Mail; 
using System.Threading; 

public partial class Contact : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void LoginView1_ViewChanged(object sender, EventArgs e) 
    { 

    } 

    public void Button3_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection connn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
     { 

      SqlCommand command = new SqlCommand(); 
      command.CommandType = System.Data.CommandType.StoredProcedure; 
      command.CommandText = "dbo.Procedure"; 

      command.Parameters.Add("@name", System.Data.SqlDbType.VarChar).Value = TextBox1.Text; 
      command.Parameters.Add("email", System.Data.SqlDbType.VarChar).Value = email.Text; 
      command.Parameters.Add("sub", System.Data.SqlDbType.VarChar).Value = sub.Text; 
      command.Parameters.Add("message", System.Data.SqlDbType.VarChar).Value = message.Text; 

      string from = "[email protected]"; 
      string to = "[email protected]"; 
      string mailSubject = sub.Text.ToString(); 
      string mailBody = message.Text.ToString(); 
      MailMessage mess = new MailMessage(from, to, mailSubject, mailBody); 
      mess.IsBodyHtml = true; 
      SmtpClient emailClient = new SmtpClient("//xxx.xxx.x.x/", 25); //Server ip & port 
      emailClient.UseDefaultCredentials = true; 
      //System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential("", ""); 
      //emailClient.Credentials = SMTPUserInfo; 
      //emailClient.Send(mess); 

      // emailClient.Credentials = CredentialCache.DefaultNetworkCredentials; 

      try 
      { 
       emailClient.Send(mess); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception caught in CreateTestMessage1(): {0}", 
         ex.ToString()); 
      } 

      command.Connection = connn; 
      connn.Open(); 
      command.ExecuteNonQuery(); 
      connn.Close(); 
     } 
     TextBox1.Text = ""; 
     email.Text = ""; 
     sub.Text = ""; 
     message.Text = ""; 
     lblmsg.Text = "Data entered successfully!!! Thank You for contacting us! We will get back to you as soon as possible."; 
     //Response.Write("Submitted Succesfully"); 
     Response.Redirect("~/XX.aspx"); 
    } 
} 
+1

你可以嘗試一些低級別的調試用telnet來驗證您的SMTP設置:http:// damonparker。 org/blog/2005/09/12/debugging-popimapsmtp-with-telnet /?utm_source = rss&utm_medium = rss&utm_campaign = debugging-popimapsmtp -with-telnet – mellamokb

回答

2

你可能要停止使用默認憑據

emailClient.UseDefaultCredentials = false; 

,並添加

emailClient.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword"); 

使用自己的憑據大多數SMTP服務器現在爲了阻止垃圾郵件阻止匿名中繼。

+2

我會特別猶豫將密碼放入代碼中。我同意不使用DefaultCredentials,但會指定'emailClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials',然後確保將應用程序池的標識配置爲可以對SMTP服務器進行身份驗證的用戶。 –

+1

@DuncanHowe這是一個很好的觀點,如果你不能設置應用程序池細節匹配(即它在共享平臺上),我會建議把它放在web.config中,然後加密web.config http://visualstudiomagazine.com /articles/2009/06/11/encrypting-the-web-config-file.aspx –

+0

我不想在代碼中輸入密碼。你能否建議我如何在web.config中做到這一點?我在那裏提到了我的網絡主機。我必須在那裏提供我的網絡用戶和密碼,對嗎?我應該在哪裏放我的電子郵件密碼?我是新人,所以可能會問愚蠢的問題。謝謝大家。 – MSIslam

1

請將配置放在您的應用程序的web.config文件中。下面是如何配置的一個例子:

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]"> 
     <network host="smtpserver1" port="25" userName="StackOverFlow" password="HatSoft" defaultCredentials="true" /> 
     </smtp> 
    </mailSettings> 
    </system.net> 

我已經回答了類似的查詢在Unable to send email from asp.net form

+0

如果我把服務器的ip地址放在網絡主機上,而不是放入服務器名稱,可以嗎? – MSIslam

+0

是的,你可以,我沒有看到任何失敗的原因 – HatSoft

+0

對於用戶名和密碼在這裏,我應該把服務器的用戶名和密碼或我的電子郵件地址的用戶名和密碼。這個東西真的很新,謝謝你的幫助。 – MSIslam