2014-02-27 51 views
5

夥計們我試圖通過SMTP服務器發送郵件。我使用此代碼發送郵件,使用SMTP在郵件正文中發送多個文本框值

using(System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage()) 
{ 
    message.To.Add(textBox1.Text); //TextBox1 = Send To 
    message.Subject = textBox2.Text; //TextBox2 = Subject 
    message.From = new System.Net.Mail.MailAddress("email id"); 
    message.Body = textBox3.Text; //TextBox3 = Message Body 

    using(System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient()) 
    { 
     smtp.Host = "smtp.server.com"; 
     smtp.Credentials = new System.Net.NetworkCredential("user", "pass"); 
     smtp.Send(message); 
    } 
} 

現在,此代碼完美工作。現在我想發送郵件正文中的整個表單,例如選擇多個文本框的值。這是形式,我想在郵件發送:

enter image description here

我如何設計郵件模板,以便它可以發送包含所有你在上面看到形式的值體的消息?

+0

這將是更好,使用'使用statement'爲您和MAILMESSAGE SmtpClient。資源將在使用'use statement'後發佈。 – Max

+0

哦,我明白了,我會使用它。謝謝你的建議。 – NewbieProgrammer

+0

@ user333170,我可以編輯你的問題,所以使用語句? – Max

回答

2

的例子和使用您可以使用StringBuilder

StringBuilder sb = new StringBuilder(); 
sb.AppendLine("Name: " + tbName.Text); 
sb.AppendLine("SurName: " + tbSurName.Text); 
message.Body = sb.ToString(); 

或的String.format:

message.Body = string.Format(@" 
    Name: {0} 
    SurName: {1} 
", tbName.Text, tbSurName.Text); 

我喜歡string.Format版本。像Array加入還有很多其他的方法,但是這兩個都足夠了。

編輯對HTML(從評論):

message.Body = string.Format(@" 
    <html> 
     <body> 
     <div> 
      <span class=""name"">Name:</span> <span class=""value"">{0}</span> 
     </div> 
     <div> 
      <span class=""name"">SurName:</span> <span class=""value"">{1}</span> 
     </div> 
     </body> 
    </html>", tbName.Text, tbSurName.Text); 
+0

謝謝你的回答。我會嘗試這個string.format的HTML方法。 – NewbieProgrammer

3

使用StringBuilder,並建立從您的所有文本框的字符串中所需的格式,它如果要顯示喜歡你的形式輸出,您可以添加HTML到這將是字符串賦值給message.Body

由電子郵件客戶端呈現,但您不能使用CSS進行造型。

舉個例子:

private string BuildMessageBody() 
    { 
     StringBuilder builder = new StringBuilder(); 
     builder.Append("<html>"); 
     builder.Append("<body>"); 

     // Custom HTML code could go here (I.e. a HTML table). 
     builder.Append(TextBox1.Text); // Append the textbox value 

     builder.Append("</body>"); 
     builder.Append("</html>"); 

     return builder.ToString(); 
    } 

然後,你可以這樣做:

message.Body = BuildMessageBody(); 

記住設置IsBodyHtml屬性trueMailMessage

message.IsBodyHtml = true; 

可以略微得到更復雜並遍歷你的表單所有的文本框控件並以這種方式構建字符串,這將是IMO的一個很好的解決方案 - 但是這應該爲您需要實現的目標提供一個起點。

+0

我之前沒有使用過StringBuilder,你能給我一個帶有2,3個文本框值的例子嗎?我將如何添加HTML? Receiver將使用Outlook電子郵件客戶端。 – NewbieProgrammer

+0

非常感謝。去試試你的代碼。非常感激。 – NewbieProgrammer

+0

@ user3331470 - 沒問題。 –

0

如果你想要把一個HTML文件,你可以設置MailMessage.BodyFormat屬性MailFormat.Html,然後傾倒你的HTML文件的內容到MailMessage.Body屬性:

using (StreamReader reader = File.OpenText(htmlFilePath)) // Path to your 
{               // HTML file 
    MailMessage myMail = new MailMessage(); 
    myMail.From = "[email protected]"; 
    myMail.To = "[email protected]"; 
    myMail.Subject = "HTML Message"; 
    myMail.BodyFormat = MailFormat.Html; 

    myMail.Body = reader.ReadToEnd(); // Load the content from your file... 
    //... 
} 

否則你可以使用StringBuilder來創建一個body。如果你點擊,你會發現StringBuilder的