-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMimeConverter.cs
86 lines (68 loc) · 2.32 KB
/
MimeConverter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
using System.Collections;
using System.Text;
using System.IO;
using System.Xml;
using NI.Email.Mime.Message;
using NI.Email.Mime.Field;
using NI.Email.Mime.Util;
namespace Docextractor
{
public class MimeConverter
{
public MimeConverter() { }
public string ConvertToXml(MimeMessage msg)
{
StringWriter strWr = new StringWriter();
XmlTextWriter xmlWr = new XmlTextWriter(strWr);
xmlWr.Formatting = Formatting.Indented;
GenerateXml(xmlWr, msg, "", "1");
return strWr.ToString();
}
protected void GenerateXml(XmlWriter xmlWr, Entity e, String prefix, String id)
{
if (e is MimeMessage)
{
xmlWr.WriteStartElement("message");
}
else
{
xmlWr.WriteStartElement("body-part");
}
xmlWr.WriteStartElement("header");
foreach (MimeField fld in e.Header.Fields)
{
xmlWr.WriteElementString("field", fld.Raw);
}
xmlWr.WriteEndElement();
if (e.Body is Multipart)
{
xmlWr.WriteStartElement("multipart");
Multipart multipart = (Multipart)e.Body;
IList parts = multipart.BodyParts;
xmlWr.WriteElementString("preamble", multipart.Preamble);
for (int i = 0; i < parts.Count; i++)
{
GenerateXml(xmlWr, (Entity)parts[i], prefix, id + "_" + (i + 1).ToString());
}
xmlWr.WriteElementString("epilogue", multipart.Epilogue);
xmlWr.WriteEndElement();
}
else if (e.Body is MimeMessage)
{
GenerateXml(xmlWr, (MimeMessage)e.Body, prefix, id + "_1");
}
else
{
IBody b = e.Body;
String name = prefix + "_decoded_" + id
+ (b is ITextBody ? ".txt" : ".bin");
String tag = b is ITextBody ? "text-body" : "binary-body";
xmlWr.WriteStartElement(tag);
xmlWr.WriteAttributeString("name", name);
xmlWr.WriteEndElement();
}
xmlWr.WriteEndElement();
}
}
}