我需要将程序创建的EXCEL附加到应用程序中的SMTP MAIL。。。。我已经使用一种方法将数据表转换为EXCEL。该方法在我运行该应用程序时下载EXCEL文件,但我的要求是将创建的文件附加到我的smtp。。。我不知道如何从该方法返回创建的excel文件。。。有人能帮我吗?
这是将数据表转换为EXCEL:的代码
public static void ExportToSpreadsheet(DataTable table, string name)
{
HttpContext context = HttpContext.Current;
context.Response.Clear();
foreach (DataColumn column in table.Columns)
{
context.Response.Write(column.ColumnName + ";");
}
context.Response.Write(Environment.NewLine);
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
}
context.Response.Write(Environment.NewLine);
}
context.Response.ContentType = "text/csv";
context.Response.AppendHeader
("Content-Disposition", "attachment; filename=" + name +".csv");
context.Response.End();
}
以下是一些可能有所帮助的重构代码:
private static Stream DataTableToStream(DataTable table)
{
const string semiColon = ";";
var ms = new MemoryStream();
var sw = new StreamWriter(ms);
foreach (DataColumn column in table.Columns)
{
sw.Write(column.ColumnName);
sw.Write(semiColon);
}
sw.Write(Environment.NewLine);
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
sw.Write(row[i].ToString().Replace(semiColon, string.Empty));
sw.Write(semiColon);
}
sw.Write(Environment.NewLine);
}
return ms;
}
private static MailMessage CreateMail(string from,
string to,
string subject,
string body,
string attname,
Stream tableStream)
{
// using System.Net.Mail
var mailMsg = new MailMessage(from, to, subject, body);
tableStream.Position = 0;
mailMsg.Attachments.Add(
new Attachment(tableStream, attname, CsvContentType));
return mailMsg;
}
private const string CsvContentType= "text/csv";
private static void ExportToSpreadsheetInternal(Stream tableStream, string name)
{
HttpContext context = HttpContext.Current;
context.Response.Clear();
context.Response.ContentType = CsvContentType ;
context.Response.AppendHeader(
"Content-Disposition"
, "attachment; filename=" + name + ".csv");
tableStream.Position = 0;
tableStream.CopyTo(context.Response.OutputStream);
context.Response.End();
}
public static void ExportToSpreadsheet(DataTable table, string name)
{
var stream = DataTableToStream(table);
var mailMsg = CreateMail("from@example.com",
"to@example.com",
"spread",
"the spread",
name,
stream);
ExportToSpreadsheetInternal(stream, name);
// send the mailMsg with SmtpClient (config in your web.config)
var smtp = new SmtpClient();
smtp.Send(mailMsg);
}
将其添加到你的web.config中,假设你使用gmail,用你的…替换user
和pwd
。。。。
<system.net>
<mailSettings>
<smtp deliveryMethod="network" from="you@example.com">
<network
host="smtp.gmail.com"
port="587"
enableSsl="true"
userName="user"
password="pwd"/>
</smtp>
</mailSettings>
</system.net>