2011-10-21 232 views
2

我剛出生在ASP.Net籃子裏的寶貝。我正在閱讀ASP.NET 4.0的Wrox初學者,並閱讀了關於使用System.Net.Mail發送郵件的信息。通過System.Net.Mail發送郵件

protected void Page_Load(object sender, EventArgs e) 
{ 
    MailMessage myMessage = new MailMessage(); // Getting Error 
    myMessage.Subject = "Test Message"; 
    myMessage.Body = "Hello World, from Planet Wrox"; 
    myMessage.From = new MailAddress("[email protected]", "Barack Obama"); 
    myMessage.To.Add(new MailAddress("[email protected]", "George Bush")); 
    SmtpClient mySmtpClient = new SmtpClient(); 
    mySmtpClient.Send(myMessage); 
} 

我在頁面加載事件中寫了這段代碼。但我得到的錯誤在第一線爲

Server Error in '/' Application.

The specified string is not in the form required for an e-mail address. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.FormatException: The specified string is not in the form required for an e-mail address.

Source Error:

Line 11:  protected void Page_Load(object sender, EventArgs e) 
Line 12:  { 
Line 13:   MailMessage myMessage = new MailMessage(); 
Line 14:   myMessage.Subject = "Test Message"; 
Line 15:   myMessage.Body = "Hello World, from Planet Wrox"; 

任何一個能告訴什麼問題呢?

+0

羞恥促進這種行爲,但+1短語「我只是出生的嬰兒在ASP.Net籃子裏。」太有趣了! –

+0

@KileyNaro:非常感謝Kilet :) – Sandy

回答

1

這裏有一個類,包含你需要的一切:

/// <summary> 
/// Wrapper class for the System.Net.Mail objects 
/// </summary> 
public class SmtpMailMessage : IDisposable 
{ 
    #region declarations 

    MailMessage Message; 
    SmtpClient SmtpMailClient; 

    #endregion 

    #region constructors 

    /// <summary> 
    /// Default constructor for the SmtpMailMessage class 
    /// </summary> 
    public SmtpMailMessage() 
    { 
     //initialize the mail message 
     Message = new MailMessage(); 
     Message.Priority = MailPriority.Normal; 
     Message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;    
     Message.From = new MailAddress("[email protected]");   

     //initialize the smtp client 
     SmtpMailClient = new SmtpClient(); 
     SmtpMailClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
     SmtpMailClient.Host = "192.168.0.1"; 
     SmtpMailClient.Port = 25; 
    } 

    /// <summary> 
    /// Parameterized constructor for the SmtpMailMessage class. Allows for override of the default 
    /// SMTP host and port number 
    /// </summary> 
    /// <param name="HostIP">The IP address of the exchange server</param> 
    /// <param name="PortNumber">The port number for ingoing and outgoing SMTP messages</param> 
    public SmtpMailMessage(string HostIP, int PortNumber) : this() 
    { 
     //override the smtp host value 
     SmtpMailClient.Host = HostIP; 

     //override the smtp port value 
     SmtpMailClient.Port = PortNumber; 
    } 

    #endregion 

    #region subject/body 

    /// <summary> 
    /// The body content of the mail message 
    /// </summary> 
    public string Body 
    { 
     get 
     { 
      return Message.Body; 
     } 
     set 
     { 
      Message.Body = value; 
     } 
    } 

    /// <summary> 
    /// the subject of the mail message 
    /// </summary> 
    public string Subject 
    { 
     get 
     { 
      return Message.Subject; 
     } 
     set 
     { 
      Message.Subject = value; 
     } 
    } 

    #endregion 

    #region mail type 

    /// <summary> 
    /// Gets or sets a value that determines whether the mail message 
    /// should be formatted as HTML or text 
    /// </summary> 
    public bool IsHtmlMessage 
    { 
     get 
     { 
      return Message.IsBodyHtml; 
     } 
     set 
     { 
      Message.IsBodyHtml = value; 
     } 
    } 

    #endregion 

    #region sender 

    /// <summary> 
    /// Gets or sets the from address of this message 
    /// </summary> 
    public string From 
    { 
     get 
     { 
      return Message.From.Address; 
     } 
     set 
     { 
      Message.From = new MailAddress(value); 
     } 
    } 

    #endregion 

    #region recipients 

    /// <summary> 
    /// Gets the collection of recipients 
    /// </summary> 
    public MailAddressCollection To 
    { 
     get 
     { 
      return Message.To;     
     } 
    } 

    /// <summary> 
    /// Gets the collection of CC recipients 
    /// </summary> 
    public MailAddressCollection CC 
    { 
     get 
     { 
      return Message.CC; 
     } 
    } 

    /// <summary> 
    /// Gets the collection of Bcc recipients 
    /// </summary> 
    public MailAddressCollection Bcc 
    { 
     get 
     { 
      return Message.Bcc; 
     } 
    } 

    #endregion 

    #region delivery notification 

    /// <summary> 
    /// Gets or sets the delivery notification settings for this message 
    /// </summary> 
    public DeliveryNotificationOptions DeliveryNotifications 
    { 
     get 
     { 
      return Message.DeliveryNotificationOptions; 
     } 
     set 
     { 
      Message.DeliveryNotificationOptions = value; 
     } 
    } 

    #endregion 

    #region priority 

    /// <summary> 
    /// Gets or sets the Priority of this message 
    /// </summary> 
    public MailPriority PriorityLevel 
    { 
     get 
     { 
      return Message.Priority; 
     } 
     set 
     { 
      Message.Priority = value; 
     } 
    } 

    #endregion 

    #region send methods 

    /// <summary> 
    /// Sends the message anonymously (without credentials) 
    /// </summary> 
    public void Send() 
    { 
     SmtpMailClient.Send(Message); 
    } 

    /// <summary> 
    /// Sends the message with authorization from a network account 
    /// </summary> 
    /// <param name="Username">The Windows username of the authorizing user</param> 
    /// <param name="Password">The Windows password of the authorizing user</param> 
    /// <param name="Domain">The domain name of the network to which the authorizing user belongs</param> 
    public void Send(string Username, string Password, string Domain) 
    { 
     //attach a network credential to this message using the information passed into the method 
     SmtpMailClient.Credentials = new NetworkCredential(Username, Password, Domain); 

     //send the message 
     SmtpMailClient.Send(Message); 
    } 

    #endregion 

    #region IDisposable implementation 

    ~SmtpMailMessage() 
    { 
     Dispose(false); 
    } 

    public void Dispose() 
    { 
     Dispose(true);    
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      if (Message != null) 
       Message.Dispose(); 
      Message = null;     
      SmtpMailClient = null; 
     } 
    } 

    #endregion   
} 
+0

非常感謝您的支持...... – Sandy

+0

非常歡迎。 –

0

請檢查您的SMTP設置在web.config文件正確。

1

我相信爲了讓您使用帶有空構造函數的MailMessage(),您需要在配置文件中設置SmtpSettings中的「From」值。從這裏:

http://msdn.microsoft.com/en-us/library/ms144707.aspx

Remarks


From is set to the value in the network element for mailSettings Element (Network Settings), if it exists.

更簡單的解決辦法可能是使用接受發件人地址,並解決構造函數。

從這裏:在我 http://msdn.microsoft.com/en-us/library/14k9fb7t.aspx

string to = "[email protected]"; 
string from = "[email protected]"; 
MailMessage message = new MailMessage(from, to);