将电子邮件保存到磁盘 [英] Saving Email Message to disk

查看:111
本文介绍了将电子邮件保存到磁盘的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

关于本文:向系统添加Save()功能.Net.Mail.MailMessage [ ^ ]



我发现有人已将此转换为VB所以我复制了它:





Regarding this article: Adding Save() functionality to System.Net.Mail.MailMessage[^]

I found someone had already converted this to VB so I copied it:


Public Shared Sub WriteEmailMessageToFile(Message As MailMessage, FileName As String)

        Dim assembly As Assembly = GetType(SmtpClient).Assembly

        Dim _mailWriterType As Type = assembly.[GetType]("System.Net.Mail.MailWriter")

        Using _fileStream As New FileStream(FileName, FileMode.Create)
            ' Get reflection info for MailWriter contructor
            Dim _mailWriterContructor As ConstructorInfo = _mailWriterType.GetConstructor(BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, New Type() {GetType(Stream)}, Nothing)

            ' Construct MailWriter object with our FileStream
            Dim _mailWriter As Object = _mailWriterContructor.Invoke(New Object() {_fileStream})

            ' Get reflection info for Send() method on MailMessage
            Dim _sendMethod As MethodInfo = GetType(MailMessage).GetMethod("Send", BindingFlags.Instance Or BindingFlags.NonPublic)


            ' Call method passing in MailWriter
            _sendMethod.Invoke(Message, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, New Object() {_mailWriter, True}, Nothing)


            ' Finally get reflection info for Close() method on our MailWriter
            Dim _closeMethod As MethodInfo = _mailWriter.[GetType]().GetMethod("Close", BindingFlags.Instance Or BindingFlags.NonPublic)


            ' Call close method
            _closeMethod.Invoke(_mailWriter, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, New Object() {}, Nothing)


        End Using

    End Sub





当我执行时,它挂起就行:



When I execute, it hangs on the line:

_sendMethod.Invoke(Message, BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, New Object() {_mailWriter, True}, Nothing)





请帮我确定这行代码有什么问题。



Please help me determine what is wrong with this line of code.

推荐答案

请看我对这个问题的评论。避免做这样的事情。



我可以建议你使用另一种方法:使用与发送邮件相同的方法将邮件保存到文件: System.Net.Mail.SmptClient.Send

为此,您可以使用 System.Net.Mail.SmptClient的实例并修改其实例的两个属性:将 DeliveryMethod 设置为 SmtpDeliveryMethod.SpecifiedPickupDirectory 并设置 PickupDirectoryLocation 到某个目录(以后可以重命名在那里创建的文件,因此它可以是一个临时目录)。您的 SmptClient 实例将为您保存一条消息副本。



请参阅:

https://msdn.microsoft.com/en-us/library/ swas0fwc(v = vs.110).aspx [ ^ ],

https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.deliverymethod(v = vs.110)的.aspx [ ^ ],

https://msdn.microsoft.com/en-us/library/system.net.mail.smtpdeliverymethod%28v=vs.110%29.aspx [< a href =https://msdn.microsoft.c om / en-us / library / system.net.mail.smtpdeliverymethod%28v = vs.110%29.aspxtarget =_ blanktitle =New Window> ^ ],

https:// msdn。 microsoft.com/en-us/library/system.net.mail.smtpclient.pickupdirectorylocation(v=vs.110).aspx [ ^ ]。



-SA
Please see my comment to the question. Avoid doing such things.

I can suggest you the alternative method I use: saving a mail message to file using the same method as sending it: System.Net.Mail.SmptClient.Send
To do so, you can use your instance of System.Net.Mail.SmptClient and modify two properties of its instance: set DeliveryMethod to SmtpDeliveryMethod.SpecifiedPickupDirectory and set PickupDirectoryLocation to some directory (you can later rename the file created there, so it could be a temporary directory). Your SmptClient instance will save a message copy for you.

Please see:
https://msdn.microsoft.com/en-us/library/swas0fwc(v=vs.110).aspx[^],
https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.deliverymethod(v=vs.110).aspx[^],
https://msdn.microsoft.com/en-us/library/system.net.mail.smtpdeliverymethod%28v=vs.110%29.aspx[^],
https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.pickupdirectorylocation(v=vs.110).aspx[^].

—SA


这篇关于将电子邮件保存到磁盘的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆