以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  能有办法根据邮件的uid来下载附件吗  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128545)

--  作者:fubblyc
--  发布时间:2018/12/10 11:19:00
--  能有办法根据邮件的uid来下载附件吗
老师,获取了邮件列表,有个 下载 的逻辑列,想要实现点击按钮,有 下载列 打钩的,下载对应的附件。
原来的例子是按第几封来下载附件的,但是如果他有删除,原来列表的第几封的值就与实际不相符了,
能有办法根据邮件的uid来下载附件吗?

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20181210111704.png
图片点击可在新窗口打开查看

--  作者:fubblyc
--  发布时间:2018/12/10 11:26:00
--  
Dim pop3Server As String = ""
Dim pop3Port As Integer = "995"
Dim pop3UseSsl As Boolean = True
Dim username As String = ""
Dim password As String = ""

Using pop3 As New LumiSoft.Net.POP3.Client.POP3_Client()
pop3.Connect(pop3Server, pop3Port, pop3UseSsl)
pop3.Login(username, password )
Dim infos As object = pop3.messages()
\'\'msgbox(Infos.count)
Dim msgs As object = pop3.messages()
Dim i As Integer
\'获取某邮件信息
For i=0 To 50
    \'  If i<5 Then
    \'\'output.show(i)
    output.show("正在比对第" & i+1 & "封邮件")
    \'try
    Dim dr As DataRow=DataTables("inbox").find("uid=\'" & msgs(i).uid & "\'")
    If dr Is Nothing Then
        Dim messageBytes = msgs(i).MessageToByte
        Dim mime_message = LumiSoft.Net.Mail.Mail_Message.ParseFromByte(messageBytes)
        \'If i=2 Then  \'i=Infos.count-1
        \'output.show("收件完成!本次共接收" & i & "封邮件!")
        \'End If
        output.show("共有" & Infos.count & "封邮件,正在接收第" & i+1 & "封")
        \'\'Application.DoEvents()
        \'\'output.show(i & ":" & mime_message.Subject)
        If mime_message IsNot Nothing  Then
            Dim fjs = mime_message.GetAttachments(True, True)
            Dim r As Row=Tables("inbox").addnew
            r("uid")=msgs(i).uid
            If mime_message.From(0).DisplayName="" Then
                r("发件人")= mime_message.From(0).Address
            Else
                r("发件人")=mime_message.From(0).DisplayName
            End If
            r("发件时间")=mime_message.Date
            r("主题")=mime_message.Subject
            r("附件数")=fjs.length
            \'r("收件人")=_UserName
            \'r("部门")=_UserGroup
            \'If mime_message.BodyText IsNot Nothing Then
                \'r("正文")=mime_message.BodyHtmlText
            \'Else
                \'r("正文")=mime_message.bodytext
            \'End If
            r("发件地址")=mime_message.From(0).Address
            r("第几封") = i
            \'r.locked=True
            \' r.save
            \'For Each entity As object In fjs
                \'\'\'output.show(entity.Contentid)
                \'\'\'output.show(entity.ContentDisposition.Param_FileName)
                \'If entity.ContentType IsNot Nothing Then
                    \'\'\' Dim fileName As String = entity.ContentType.Param_Name
                    \'Dim fileName As String= ""
                    \'If entity.ContentType.Param_Name <> ""
                        \'fileName  =entity.ContentType.Param_Name
                    \'Else
                        \'fileName =entity.ContentDescription
                        \'\'MessageBox.show(entity.ContentType.Param_Name)
                        \'\'MessageBox.show(entity.ContentDescription)
                    \'End If
                    \'Dim id As String
                    \'If entity.Contentid <> "" Then
                        \'id=entity.Contentid
                        \'id=id.TrimStart("<")
                        \'id=id.TrimEnd(">")
                        \'\'\'MessageBox.show(id)
                    \'End If
                    \'If Not String.IsNullOrEmpty(fileName) Then
                        \'try
                            \'Dim dir As New io.DirectoryInfo(ProjectPath & "bin\\temp\\")
                            \'If Not dir.Exists Then
                                \'dir.Create()
                            \'End If
                            \'\'\'filename=filename.Replace(" ","")
                            \'\'\'MessageBox.show(filename)
                            \'Dim path__1 As String = io.Path.Combine(dir.FullName, fileName)
                            \'Dim byteObj As object= entity.Body
                            \'Dim decodedDataStream As io.Stream = byteObj.GetDataStream()
                            \'Using fs As New io.FileStream(path__1, io.FileMode.Create)
                            \'LumiSoft.Net.Net_Utils.StreamCopy(decodedDataStream, fs, 4000)
                        \'End Using
                        \'Dim tr As Row=Tables("附件").addnew
                        \'tr("uid")=msgs(i).uid
                        \'tr("cid")=id
                        \'Dim ifo As new FileInfo(path__1)
                        \'tr("文件名")=ifo.name.Replace(ifo.Extension,"")
                        \'tr("格式")=ifo.Extension
                        \'tr.save
                        \'\'  tr.DataRow.SQLInsertFile("附件",path__1)
                    \'catch ex As Exception
                        \'\'\'\'\' MessageBox.show(ex.ToString)
                        \'Dim ttr As Row=Tables("附件").addnew
                        \'ttr("uid")=msgs(i).uid
                        \'If ex.ToString.contains("非法字符") Then
                            \'ttr("文件名")=filename
                            \'ttr("说明")=ex.ToString
                        \'Else
                            \'ttr("文件名")=filename
                            \'ttr("说明")=ex.ToString
                        \'End If
                    \'End try
                \'End If
            \'End If
        \'Next
    End If
End If
\'Catch ex As Exception
\'End try
\'End If
Next
pop3.disconnect
End Using

--  作者:有点甜
--  发布时间:2018/12/10 11:33:00
--  
循环每一个右键,然后判断比较uid的值,即可,匹配的,就是你需要的邮件。
--  作者:fubblyc
--  发布时间:2018/12/10 14:23:00
--  
恩恩,甜老师,这个可以
--  作者:liufucan
--  发布时间:2019/3/9 18:39:00
--  
遍历邮件虽然可以,但是效率太低了