0

我对 System.Net.Mail 有一个奇怪的用例,因为我不想在交易中的任何时候保存物理文件。

我有一个充当邮件路由器的 wcf Web 服务。您发出一个简单的发送电子邮件请求,它工作正常。您也可以向它发送一个字符串文件路径,它会拾取文件并正确发送。

不起作用的是一种尝试获取有效 excel XML 字符串的方法(我知道它是有效的,因为如果您使用文件编写器将其保存到文件中,它会按预期打开),将其转换为字节数组,然后将其发送到将创建附件并将其添加到 MailMessage 的 Web 服务。当我收到附件时,它只是以 Excel 工作表的形式打开,每一行都是 XML 文档的一行。

这是当前的输出:

Row1: <?xml version="1.0"?>
Row2: <?mso-application progid="Excel.Sheet"?>
Row3: <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
Row4: xmlns:o="urn:schemas-microsoft-com:office:office"
Row5: xmlns:x="urn:schemas-microsoft-com:office:excel"
Row6: xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
Row7: xmlns:html="http://www.w3.org/TR/REC-html40">
Row8: <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">

当我在 Notepad++ 中打开文件时,我看到行尾只有 LF 元素,而不是我通常期望的 LF 和回车。

这是我在客户端的代码:

byte[] data = new byte[reportXml.Length * sizeof(char)];
System.Buffer.BlockCopy(reportXml.ToCharArray(), 0, data, 0, data.Length);

var result = emailClient.SendMailfromBinaryData(to, from, cc, subject, body, data, "attachment.xlsx");

以下是将附件添加到 MailMessage 的 WCF 服务中的代码:

 if (argFileStream != null && !string.IsNullOrEmpty(argFileName))
 {
     var stream = new MemoryStream(argFileStream);
     var attachment = new Attachment(stream, argFileName, "text/plain");
     attachment.NameEncoding = new UTF8Encoding();
     message.Attachments.Add(attachment);
 }

并不是说我也尝试将 MIME 类型更改为 excel:

     var attachment = new Attachment(stream, argFileName, "application/vnd.ms-excel");

有任何想法吗?我没有收到任何错误,只是excel根本无法识别XML实际上是一个作为XML的excel文件。

4

0 回答 0