C# system.net.mail编辑邮件内容

C# system.net.mail编辑邮件内容,c#,html,asp.net-mvc,email,C#,Html,Asp.net Mvc,Email,我正在使用system.net.mail库向用户发送有关某些已执行操作的信息。在程序运行时,我正在收集一些信息,稍后我会将其显示给用户。邮件内容如下所示: Hello user, this is your id in system. *if he chosen option1* You chosen option 1 value *if he chosen option2* You chosen option 2 value *if he chosen option3* You chosen o

我正在使用system.net.mail库向用户发送有关某些已执行操作的信息。在程序运行时,我正在收集一些信息,稍后我会将其显示给用户。邮件内容如下所示:

Hello user,
this is your id in system.
*if he chosen option1*
You chosen option 1 value
*if he chosen option2*
You chosen option 2 value
*if he chosen option3*
You chosen option 3 value
String body = ProcessTemplate("TemplateName", new
{
   User = the user name,
   ID = this user id,
   ChoosenOption = ReturnChoosenOptionHtml()
});

private String ReturnChoosenOptionHtml()
{
    String html = String.Empty;
    if(chooseOption1)
        html += "xptoHTML";
    if(choosenOption2)
        html += "abcdHTML";
    return html;
}
问题是,我没有找到一种方法可以在程序运行时更改邮件内容(用html编写,并添加到资源中)

任何人都可以根据选择的值建议我应该如何编辑邮件内容,或者是否有其他选择

邮件示例:

`<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">`
<html>
 <head>
  <META http-equiv=Content-Type content="text/html">
 </head>
 <body>
  <p>Hello user,</p>
  <p>This is your id in system : {0}</p>
/*
And the dificult part here: 
    if he chosen option1 in program I want in email to show that option 1 value.
    And if he didn't chosen it I don't wanna show it to him. 
*/        
 </body>
</html>
``
你好,用户

这是您在系统中的id:{0}

/* 这里的难点是: 如果他在程序中选择了选项1,我希望在电子邮件中显示选项1的值。 如果不是他选的,我不想给他看。 */
您可以将html存储在XML文件中,并通过
字符串填充内容-

<?xml version="1.0" encoding="utf-8" ?>
<Email>
    <FromAddress>from</FromAddress>
    <ToAddress>to</ToAddress>
    <Subject>subject line</Subject>
    <EmailBody>
        <![CDATA[
     <html>
<head>
    <title>Customer</title>
</head>
        <div valign="top">
             <font color="#666666" face="Arial, Helvetica, sans-serif, Verdana" size="2">
             <p>Hello user.</p>
             <p><strong>This is your ID in the system: </strong>{0}<br />
             <strong>You chose option: </strong>{1}<br /></p>
             </font>
        </div>
</html> 
      ]]>
    </EmailBody>
</Email>
读取电子邮件标记+设置邮件对象的某些属性:-

private MailMessage GetHtmlEmail()
{
    MailMessage mail = new MailMessage();
    XmlTextReader xReader = new XmlTextReader(Server.MapPath("PATH TO EMAIL.XML"));

    while (xReader.Read())
    {
        switch (xReader.Name)
        {
            case "ToAddress":
                mail.To.Add(xReader.ReadElementContentAs(typeof(string), null).ToString());
                break;
            case "FromAddress":
                mail.From = new MailAddress(xReader.ReadElementContentAs(typeof(string), null).ToString());
                break;
            case "Subject":
                mail.Subject = xReader.ReadElementContentAs(typeof(string), null).ToString();
                break;
            case "EmailBody":
                mail.Body = xReader.ReadElementContentAs(typeof(string), null).ToString();
                break;
            default:
                break;
        }
    }

    return mail;
}
编辑*如果您不希望此
您选择的选项:{1}
在客户未选择任何选项的情况下显示,则可以执行此操作(尽管有点不规范):-


确保将您选择的选项:{1}
替换为
{1}

标记中的这一行,您可以将html存储在XML文件中,并通过
字符串填充内容-

<?xml version="1.0" encoding="utf-8" ?>
<Email>
    <FromAddress>from</FromAddress>
    <ToAddress>to</ToAddress>
    <Subject>subject line</Subject>
    <EmailBody>
        <![CDATA[
     <html>
<head>
    <title>Customer</title>
</head>
        <div valign="top">
             <font color="#666666" face="Arial, Helvetica, sans-serif, Verdana" size="2">
             <p>Hello user.</p>
             <p><strong>This is your ID in the system: </strong>{0}<br />
             <strong>You chose option: </strong>{1}<br /></p>
             </font>
        </div>
</html> 
      ]]>
    </EmailBody>
</Email>
读取电子邮件标记+设置邮件对象的某些属性:-

private MailMessage GetHtmlEmail()
{
    MailMessage mail = new MailMessage();
    XmlTextReader xReader = new XmlTextReader(Server.MapPath("PATH TO EMAIL.XML"));

    while (xReader.Read())
    {
        switch (xReader.Name)
        {
            case "ToAddress":
                mail.To.Add(xReader.ReadElementContentAs(typeof(string), null).ToString());
                break;
            case "FromAddress":
                mail.From = new MailAddress(xReader.ReadElementContentAs(typeof(string), null).ToString());
                break;
            case "Subject":
                mail.Subject = xReader.ReadElementContentAs(typeof(string), null).ToString();
                break;
            case "EmailBody":
                mail.Body = xReader.ReadElementContentAs(typeof(string), null).ToString();
                break;
            default:
                break;
        }
    }

    return mail;
}
编辑*如果您不希望此
您选择的选项:{1}
在客户未选择任何选项的情况下显示,则可以执行此操作(尽管有点不规范):-


确保将标记中的这一行替换为您选择的选项:{1}
{1}

我有一个真实的情况,我需要通过电子邮件来完成这一操作,并且我使用了模板。 您可以尝试为电子邮件正文创建一个带有变量的模板,并根据您的情况创建此正文,将变量更改为正确的值。 模板示例:

<p>Hello user [User]</p>
<p>This is your id in system : [ID]</p>
<p>[ChoosenOption]</p>
现在按如下方式绘制模板:

Hello user,
this is your id in system.
*if he chosen option1*
You chosen option 1 value
*if he chosen option2*
You chosen option 2 value
*if he chosen option3*
You chosen option 3 value
String body = ProcessTemplate("TemplateName", new
{
   User = the user name,
   ID = this user id,
   ChoosenOption = ReturnChoosenOptionHtml()
});

private String ReturnChoosenOptionHtml()
{
    String html = String.Empty;
    if(chooseOption1)
        html += "xptoHTML";
    if(choosenOption2)
        html += "abcdHTML";
    return html;
}

最终结果将是一封电子邮件,其中的[变量]会随着您传递的值而更改。

我有一个真实的情况,我需要通过电子邮件来完成这项工作,并且我使用了模板。 您可以尝试为电子邮件正文创建一个带有变量的模板,并根据您的情况创建此正文,将变量更改为正确的值。 模板示例:

<p>Hello user [User]</p>
<p>This is your id in system : [ID]</p>
<p>[ChoosenOption]</p>
现在按如下方式绘制模板:

Hello user,
this is your id in system.
*if he chosen option1*
You chosen option 1 value
*if he chosen option2*
You chosen option 2 value
*if he chosen option3*
You chosen option 3 value
String body = ProcessTemplate("TemplateName", new
{
   User = the user name,
   ID = this user id,
   ChoosenOption = ReturnChoosenOptionHtml()
});

private String ReturnChoosenOptionHtml()
{
    String html = String.Empty;
    if(chooseOption1)
        html += "xptoHTML";
    if(choosenOption2)
        html += "abcdHTML";
    return html;
}


最终结果将是一封电子邮件,其中的[变量]将随您传递的值而更改。

当您从用户提交表单时,将其信息保存在会话中,发送邮件后,显示一个弹出窗口并将您的信息与会话连接起来。

当您从用户提交表单时,在会话中保存他们的信息,并在发送邮件后,显示一个弹出窗口并将您的信息与会话连接起来。

请显示一些代码的详细信息。使用
StringBuilder
在代码隐藏文件中生成HTML正文:)感谢
StringBuilder
idea:)请显示一些代码的详细信息。使用
StringBuilder
在代码隐藏文件中生成HTML正文:)谢谢你的
StringBuilder
idea:)因为我看到这段代码并没有解决问题。第四行:
您选择的选项:{1}
将始终在邮件中。如果用户没有选择选项,我不想向用户显示这行代码:)因为我没有完整源代码的好处,所以我只能提供一个通用的解决方案。显然,您可以在代码中进行检查,以查看客户是否选择了选项,如果他们没有选择,请将选项文本设置为
no option selected
。。。这是一个简单但很好的技巧:)我不知道我怎么会没有想到它。谢谢,我将使用它:)因为我看到这段代码并没有解决这个问题。第四行:
您选择的选项:{1}
将始终在邮件中。如果用户没有选择选项,我不想向用户显示这行代码:)因为我没有完整源代码的好处,所以我只能提供一个通用的解决方案。显然,您可以在代码中进行检查,以查看客户是否选择了选项,如果他们没有选择,请将选项文本设置为
no option selected
。。。这是一个简单但很好的技巧:)我不知道我怎么会没有想到它。谢谢,我将使用它:)我正在使用一个模板,但这就是问题所在。我有5个选项字段。因此,这意味着对于每个可能的选项组合(可能选择1个选项字段或2个选项和4个选项字段等等),我必须制作不同的模板。。。我认为这不是一个好主意:)不,在我的示例中,我创建了一个模板。[ChooseOptions]参数是根据您的情况设置的。是的,我看到了,但我有5个不同的选项。它们都可以被选择,或者只是其中一个。。。如果我理解错了你的例子,我很抱歉。如果不选择该选项,您只需编写
ChosenOption=“”
?是,选择option=“”;但我不知道你可以选择多个选项。在这种情况下,您需要编写一个方法,该方法将包含这些选项。我将编辑我的答案。我正在使用模板,但这就是问题所在。我有5个选项字段。因此,这意味着对于每个可能的选项组合(可能选择1个选项字段或2个选项和4个选项字段等等),我必须制作不同的模板。。。我认为这不是一个好主意:)不,在我的示例中,我创建了一个模板。[ChooseOptions]参数是根据您的情况设置的。是的,我看到了,但我有5个不同的选项。它们都可以被选择,或者只是其中一个。。。如果我理解错了你的例子,我很抱歉。如果选项不可用