繁体   English   中英

下拉列表以选择要作为邮件正文发送的html页面

[英]dropdownlist to select the html page to be sent as mail body

我做了一个邮件发送器,我想在其中发送一个HTML页面作为邮件正文。 这是代码:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    {
        SendHTMLMail();
    }

    void SendHTMLMail()
    {
        MailMessage Msg = new MailMessage();

        Msg.From = new MailAddress(txtUsername.Text);

        Msg.To.Add(txtTo.Text);
        Msg.Subject = txtSubject.Text;
        Msg.Body = myString.ToString();
        Msg.IsBodyHtml = true;

        if (fuAttachment.HasFile)
        {
            string FileName = Path.GetFileName(fuAttachment.PostedFile.FileName);

            Msg.Attachments.Add(new Attachment(fuAttachment.PostedFile.InputStream, FileName));
        }

        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.gmail.com";
        smtp.Port = 587;
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = new System.Net.NetworkCredential(txtUsername.Text, txtpwd.Text);
        smtp.EnableSsl = true;
        smtp.Send(Msg);
        Msg = null;
        ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Email sent.');", true);
    }
}

我的应用程序数据文件夹中有某些html页面。 现在我想要的是一个下拉列表,从中可以选择作为邮件正文发送的html页面。 如何填充下拉菜单以在这些html页面中进行选择?

由于我不确定要尝试使用哪个平台。 因此,我将编写一种通用方法。 为了从App_Data文件夹中读取文件及其内容,您需要首先获取App_Data的路径:

对于网络应用

DirectoryInfo di = new DirectoryInfo(HostingEnvironment.MapPath("/App_Data"));

对于Windows应用程序

string projectFolder = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).FullName;
string folderAppData = Path.Combine(projectFolder, "App_Data");

现在,要从App_Data文件夹中获取所有文件,请使用此函数,该函数将返回List<KeyValuePair<string,string>>

对于Web应用程序:

public List<KeyValuePair<string, string>> getFiles()
{            
     DirectoryInfo di = new DirectoryInfo(HostingEnvironment.MapPath("/App_Data"));
     var fi = di.EnumerateFiles("*.html", SearchOption.TopDirectoryOnly);
     var files = new List<KeyValuePair<string, string>>();
     foreach (FileInfo file in fi)
     {
       files.Add(new KeyValuePair<string, string>(file.Name, file.FullName));
     }
     return files;
}

对于Windows应用程序:

public List<KeyValuePair<string, string>> getFiles()
{
   string projectFolder = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).FullName;
   string folderAppData = Path.Combine(projectFolder, "App_Data");
   var diw = new DirectoryInfo(folderAppData);
   var fiw = diw.EnumerateFiles("*.html", SearchOption.TopDirectoryOnly);
   var filesw = new List<KeyValuePair<string, string>>();
   foreach (FileInfo file in fiw)
   {
      filesw.Add(new KeyValuePair<string, string>(file.Name, file.FullName));
   }
   return filesw;
}

现在,使用此功能,您将获得键值对格式的数据,如下所示:

     Key    |    value
file1.html  |  c://somefolder/App_Data/file1.html
..... other files

现在,您可以使用此列表填充dropdown列表中的数据,其中key对象是可以用作text字段的文件名, value对象是可以用作value字段的文件路径。

现在,要读取文件内容,您必须通过传递文件路径来传递从上面声明的函数获得的文件路径:

public string getFileContent(string path)
{
   return System.IO.File.ReadAllText(path);
}

绑定webForms:

在Page_load()事件中,只需添加以下行

if (!IsPostBack)
{
    var list = getFileNames();
    ddl.DataSource = list;
    ddl.DataTextField = "Key";
    ddl.DataValueField = "Value";
    ddl.DataBind();
}

注意 :为了更好的方法,建议创建一个单独的类来处理文件。 而在生产环境中,不要在客户端(以HTML格式)存储文件路径,而是在客户端存储文件路径,并在文件中指定文件ID作为下拉列表的值,而不是在邮件中发送即可。从数据库获取文件路径,然后获取内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM