我正在做一个项目.我必须比较两个文件的内容,看看它们是否精确匹配.
在进行大量错误检查和验证之前,我的初稿是:
DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory + "\\TestArea\\");
FileInfo[] files = di.GetFiles(filename + ".*");
FileInfo outputFile = files.Where(f => f.Extension == ".out").Single<FileInfo>();
FileInfo expectedFile = files.Where(f => f.Extension == ".exp").Single <FileInfo>();
using (StreamReader outFile = new StreamReader(outputFile.OpenRead()))
{
using (StreamReader expFile = new StreamReader(expectedFile.OpenRead()))
{
while (!(outFile.EndOfStream || expFile.EndOfStream))
{
if (outFile.ReadLine() != expFile.ReadLine())
{
return false;
}
}
return (outFile.EndOfStream && expFile.EndOfStream);
}
}
Run Code Online (Sandbox Code Playgroud)
有嵌套using语句似乎有点奇怪.
有一个更好的方法吗?
我正在开发一个会发送大量电子邮件的网站.我想设置页眉和页脚文本,甚至是模板,以便用户在需要时轻松编辑这些电子邮件.
如果我将HTML嵌入到C#字符串文字中,那就很难看了,他们不得不担心转义.包括页眉和页脚的平面文件可能会起作用,但关于它的一些东西感觉不对.
什么是理想的.ASPX是以某种方式使用页面作为模板,然后告诉我的代码服务该页面,并使用为电子邮件返回的HTML.
有这么好的方法吗?有没有更好的方法来解决这个问题?
更新:
我添加了一个答案,使您可以使用标准的.aspx页面作为电子邮件模板.只需像通常那样替换所有变量,使用数据绑定等.然后只需捕获页面的输出,瞧!你有HTML电子邮件!
更新
了CAVEAT !!!:我在一些aspx页面上使用MailDefinition类就好了,但是当在运行的服务器进程中尝试使用这个类时,它失败了.我相信这是因为MailDefinition.CreateMailMessage()方法需要一个有效的控件来引用,即使它并不总是做某事.因此,我建议使用aspx页面的方法,或使用ascx页面的Mun方法,这看起来好一点.
假设我需要通过客户详细信息和订单详细信息向客户发送邮件.我在html文件中有模板html数据.客户数据存在,并且订单详细信息也存在于同一个html模板文件中.我的HTML看起来像
<html>
<body>
Hi {FirstName} {LastName},
Here are your orders:
{foreach Orders}
Order ID {OrderID} Quantity : {Qty} <strong>{Price}</strong>.
{end}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
现在我想用{}填充所有带有实际值的示例关键字,并迭代并填写订单.
我搜索谷歌,发现微软提供了一个名为MailDefinition的类, 通过它我们可以动态生成邮件正文.我有一个示例代码也喜欢
MailDefinition md = new MailDefinition();
md.From = "test@domain.com";
md.IsBodyHtml = true;
md.Subject = "Test of MailDefinition";
ListDictionary replacements = new ListDictionary();
replacements.Add("<%Name%>", "Martin");
replacements.Add("<%Country%>", "Denmark");
string body = "
Hello <%Name%> You're from <%Country%>.";
MailMessage msg = md.CreateMailMessage("you@anywhere.com", replacements, body, new System.Web.UI.Control());
Run Code Online (Sandbox Code Playgroud)
通过上面的代码,我们可以用实际值替换伪值,但我不知道如何迭代Orders详细信息并填充订单数据.
所以,如果可以使用MailDefinition类,那么请指导我如何迭代循环并生成订单详细信息的代码.
string to = "email@hotmail.co.uk";
string body = "Test";
SmtpClient SMTPServer = new SmtpClient("127.0.0.1");
MailMessage mailObj = new MailMessage(urEmail, to, subject, body);
SMTPServer.Send(mailObj);
Run Code Online (Sandbox Code Playgroud)
这就是我目前发送测试电子邮件的方式.我如何制作这个HTML并能够通过添加图像等使发送的电子邮件看起来更好?
谢谢
使用asp.net发送邮件和嵌入式图像
我已经使用了以下但它无法正常工作
Dim EM As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage(txtFrom.Text, txtTo.Text)
Dim A As System.Net.Mail.Attachment = New System.Net.Mail.Attachment(txtImagePath.Text)
Dim RGen As Random = New Random()
A.ContentId = RGen.Next(100000, 9999999).ToString()
EM.Attachments.Add(A)
EM.Subject = txtSubject.Text
EM.Body = "<body>" + txtBody.Text + "<br><img src='cid:" + A.ContentId +"'></body>"
EM.IsBodyHtml = True
Dim SC As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient(txtSMTPServer.Text)
SC.Send(EM)
Run Code Online (Sandbox Code Playgroud) 我在ASP.NET MVC应用程序中嵌入了一个资源(一个XSD文件).现在,我想从代码中检索此文件.
查看文档Assembly.GetManifestResourceStream(),它需要一个字符串参数,即"请求清单资源的区分大小写的名称".
好吧,我发现它没有那么有用,当然,在MSDN上找不到任何示例.清单资源的名称是什么?它是文件的名称吗?它是文件的完整路径和名称吗?或者它是一个单独的名称,给予资源本身,如果是这样,我该如何设置该名称?
c# ×7
asp.net ×4
.net ×2
asp.net-mvc ×1
email ×1
file ×1
html ×1
mailmessage ×1
templates ×1
using ×1