【问题标题】:Send Multiple Textbox Values in Mail Body using SMTP使用 SMTP 在邮件正文中发送多个文本框值
【发布时间】:2014-03-30 19:16:05
【问题描述】:

伙计们,我正在尝试通过 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 statement 用于您的MailMessage 和SmtpClient。使用using statement 后资源将被释放
  • 哦,我明白了,我会用它。谢谢你的建议。
  • @user333170 ,我可以编辑你的问题,所以使用 using 语句吗?

标签: c# .net winforms email sendmail


【解决方案1】:

使用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;

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

【讨论】:

  • 我之前没用过StringBuilder,能给我一个2、3个文本框值的例子吗?我将如何添加 HTML?收件人将使用 Outlook 电子邮件客户端。
  • 非常感谢。去试试你的代码。非常感谢。
  • @user3331470 - 没问题。
  • 基本的 CSS 是可能的,但可用的样式非常有限;请参阅stackoverflow.com/questions/4829254/… 了解更多信息。
【解决方案2】:

你可以使用StringBuilder:

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

或字符串格式:

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

我更喜欢string.Format 版本。像Array join这样的方式还有很多,不过这两种就够了。

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

【讨论】:

  • 感谢您的回答。我会试试这个string.format的HTML方法。
【解决方案3】:

如果要放置 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的例子和用法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2011-01-21
    • 2012-08-17
    • 1970-01-01
    • 2016-01-13
    • 2019-06-16
    相关资源
    最近更新 更多