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

5

大家好,我正在尝试通过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);
    }
}

现在这段代码已经完美运行。现在我想在邮件的正文中发送整个表单,例如选择多个文本框的值。这是我要在邮件中发送的表单:
如何设计消息模板,以便发送包含上述表单中所有值的正文消息?

最好使用using语句来处理你的MailMessage和SmtpClient。在using语句中使用后,资源将被释放。 - Max
哦,我明白了,我会用它的。谢谢你的建议。 - NewbieProgrammer
@user333170,我可以编辑您的问题,以便使用语句吗? - Max
3个回答

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();

请记得为您的MailMessage设置IsBodyHtml属性为true:

message.IsBodyHtml = true;

您可以稍微复杂一些,遍历表单中的所有文本框控件,并以此方式构建字符串,这将是一个很好的解决方案 - 但这应该为您需要实现的内容提供了一个起点。


我以前没有使用过StringBuilder,你能给我一个包含2、3个文本框值的例子吗?我该如何添加HTML?接收者将使用Outlook电子邮件客户端。 - NewbieProgrammer
非常感谢。我将尝试您的代码。非常感激。 - NewbieProgrammer
@user3331470 - 没问题。 - Darren
基本的CSS是可行的,但可用的样式非常有限;请参阅https://dev59.com/xG445IYBdhLWcg3wfKcZ获取更多信息。 - Adrian Wragg

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 ,虽然还有其他方法,比如数组拼接,但这两种已经足够了。
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);

谢谢您的回答。我会尝试使用HTML格式化字符串的方法。 - NewbieProgrammer

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的示例和用法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接