使用SMTP在邮件正文中发送多个文本框值

时间:2014-02-27 11:30:26

标签: c# .net winforms email sendmail

伙计我正在尝试通过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

如何设计消息模板,以便它可以发送包含您在上述表单中看到的所有值的正文的消息?

3 个答案:

答案 0 :(得分:3)

使用StringBuilder并以所需格式构建所有文本框中的字符串,并将其分配给message.Body

如果您希望输出显示为您的表单,您可以将HTML添加到将由电子邮件客户端呈现的字符串,但是您不能使用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的{​​{1}}属性设置为true

MailMessage

对于所有文本框控件,你可能会稍微复杂一点并迭代你的表单并以这种方式构建字符串,这将是一个很好的解决方案IMO - 但是这应该为你需要实现的目标提供一个起点。

答案 1 :(得分: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版本。还有许多其他方法,比如阵列加入,但这两个都足够了。

编辑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);

答案 2 :(得分: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 = "from@microsoft.com";
    myMail.To = "to@microsoft.com";
    myMail.Subject = "HTML Message";
    myMail.BodyFormat = MailFormat.Html;

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

否则,您可以使用StringBuilder创建一个正文。如果单击,您将找到StringBuilder的示例和用法