我们从各个实体接收文件,这些文件中可能包含base64编码的MIME部分(PDF)。我们将其提取并存储以供以后打开。对于除其中一个实体以外的所有实体,此方法都正常运行。他们的文件将保存,但无法打开。
这是代码:
public byte[] GetAttachmentByName(string name)
{
foreach (var attachment in _mimeMessage.BodyParts.OfType<MimePart>())
{
if (attachment.ContentId != name)
continue;
using (var stream = new System.IO.MemoryStream())
{
using (var filtered = new FilteredStream(stream))
{
filtered.Add(DecoderFilter.Create("base64"));
attachment.ContentObject.DecodeTo(filtered);
return stream.ToArray();
}
}
}
return null;}
这是MIME的一部分:
MIME版本:1.0 内容类型:多部分/相关; boundary =“ =-antAW7IrKfe1DvH3559M9g ==”
...
-=-antAW7IrKfe1DvH3559M9g == 内容类型:应用程序/ pdf 内容传输编码:base64 内容描述: 内容ID:“ AC13127925.pdf”
...
bGVyDTw8IA0vU2l6ZSAxODkgDS9Sb290IDE4OCAwIFIgDS9JbmZvIDEgMCBSIA0 + PiANc3Rh cnR4cmVmDTU3MzU3MiANJSVFT0YN
-=-antAW7IrKfe1DvH3559M9g ==-
(我包括了MIME部分的开始,中间和结尾。文件的另一部分中也有XML,但这已经可以很好地处理了。我们遇到的问题是MIME / PDF。)< / p>
任何指导都值得赞赏。
答案 0 :(得分:1)
MimeContent.DecodeTo()
方法已经为您解码了base64,因此您需要将代码更改为此:
public byte[] GetAttachmentByName(string name)
{
foreach (var attachment in _mimeMessage.BodyParts.OfType<MimePart>())
{
if (attachment.ContentId != name)
continue;
using (var stream = new System.IO.MemoryStream())
{
attachment.ContentObject.DecodeTo(filtered);
return stream.ToArray();
}
}
return null;
}