最近,我发布了几篇关于 .NET 和 EML 文件的邮件相关 的博文,引来了一些网友的关注与讨论。尤其是对于“如何解析EML文件的内容”和 “发送现有的EML文件”。
目前,比较主流的解析EML文件的方式,基本是对MIME格式的分析,基于对 RFC822及其后续扩展的标准 的理解。但是,此种方法工作量太大,且过于繁琐。
我是个懒人,喜欢找捷径
大家都知道,微软的 outlook express 是可以保存和打开并发送EML文件的。那么很明显,outlook express 肯定是可以解析EML文件的。
问题就来了:我们可不可以利用微软现有的成果呢?
针对这个问题,我们再回到.NET中发送邮件的功能上,为了体现的明显,我们回到.NET 1.1上,.NET 1.1 发送邮件的是 System.Web.Mail ,这个System.Web.Mail 当时是比较弱的,原因就是它是基于 cdosys.dll 的基础上的且并未做富实现。
cdosys.dll是从windows 2000 开始被正式引入的,后续的操作系统都支持,关于cdosys.dll的细节,请看MSDN。
经过一个晚上对cdosys的研究,终于得出了结果:CDOSYS是可以加载eml文件并进行解析和直接发送的。
cdosys属于COM,在.NET使用,需要添加COM引用。
添加引用,会在项目的引用里出现下面的2项:
下面我对发送EML文件,封装了一个类(只做了基本封装,大家可以自己扩展)


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 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

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103



104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121



122

123

124

125



126

127

128

129

130

131



<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1

2

3

4

5

6

至此, 我关于.NET 发送MAIL和保存EML,以及对EML的发送和解析相关的内容, 算是告一段落了。
希望大家多拍砖吧。