如果邮件含有附件,如果正确分离出来呢?

解决方案 »

  1.   

    Private Sub cmdAttachment_Click()
        On Error Resume Next
        
        With CommonDialog1
            .DialogTitle = "Insert Attachment"
            .Filter = "All Files (*.*)|*.*"
            .ShowOpen
            
            If Dir(.FileName) <> "" Then
                txtAttachment.Text = .FileName
                
                ' 顯示 Attachment 的 Icon
                oleAttachment.SourceDoc = .FileName
                oleAttachment.CreateEmbed .FileName
            Else
                MsgBox "Attachment is not available.", vbCritical
            End If
        End With
    End SubPrivate Sub cmdSend_Click()
        ' 開始 MAPI Session
        MAPISession1.SignOn
            
        ' 當 MAPI Session 建立後,
        ' Session 所產生的 Handle 會存於 SessionID 屬性中
        If MAPISession1.SessionID <> 0 Then
        
            ' 建立 MAPIMessages 與 MAPISession 間之有效關聯
            MAPIMessages1.SessionID = MAPISession1.SessionID
            
            ' 建立新的 E-Mail Message
            MAPIMessages1.Compose
            
            ' 收件者 (Recipient's Name)
            MAPIMessages1.RecipDisplayName = txtName.Text
            
            ' 收件者的 E-Mail Address
            MAPIMessages1.RecipAddress = "smtp: " & txtAddress.Text
            
            ' 是否要檢查收件者有無存在於全域 (Global) 或個人 (Personal) 通訊錄裏
            MAPIMessages1.AddressResolveUI = True
            
            ' 檢查收件者有無存在於全域 (Global) 或個人 (Personal) 通訊錄裏
            MAPIMessages1.ResolveName
            
            ' E-Mail 的主旨
            MAPIMessages1.MsgSubject = txtSubject.Text
            
            ' E-Mail 的內文
            MAPIMessages1.MsgNoteText = txtNote.Text
            
            ' 設定 Attachment (附件)
            If Dir(txtAttachment.Text) <> "" Then
                MAPIMessages1.MsgNoteText = MAPIMessages1.MsgNoteText & vbCrLf
                MAPIMessages1.AttachmentPosition = Len(MAPIMessages1.MsgNoteText) - 1
                MAPIMessages1.AttachmentPathName = txtAttachment.Text
            End If
           
            ' 傳送 E-Mail 且不顯示"郵件對話盒" (直接傳送)
            MAPIMessages1.Send False
        End If
            
        ' 結束 MAPI Session
        MAPISession1.SignOff
    End SubPrivate Sub cmdExit_Click()
        End
    End Sub
    我發附件就是這樣的呀
      

  2.   

    哦,你看看我的题目:是winsock,不是mapi控件
    如果不装outlook你的程序就等于废了,所以现在已没有人再用mapi写邮件程序了
    另外
    还是看看题目:是接收附件,发送附件我早已解决最后,这个问题大家可以不再回,因为我已搞定了,还是自己有用哈哈
      

  3.   

    邮件附件是用Base64加密的!解开后用你的分解邮件信息算法!37哦~呵呵!
      

  4.   

    我也用winsock写了个发送邮件,但发一个base64编码后60k的文件,结果取回来的只有8k大,发现只有最后8k发送出去,其他的都不见了,不知道是?原因
             我用的代码
                dd = FreeFile
              Open "d:\temp" For Input As #dd
            
              
             While Not EOF(dd)
              Line Input #dd, ff
              Debug.Print ff
              
              Winsock2.SendData ff & vbCrLf
              Wend
              Close #dd
      不是winsock本身有8k限制把
      

  5.   

    哦,你看看我的题目:是winsock,不是mapi控件
    ///偶最近在寫這個方面的文章,在整理中,因為突然加案子,一直在拖。
      

  6.   

    我的代码能正常发送小的邮件(及"写新邮件.Fsemail"如数据较小,则能发送正常,如数据较大,则不能正常发送,发送到显示"邮件送完毕"后,就不见反应了.时间长了,就提示超时),还请高手帮助修改一下,谢谢!!!!
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim strServerResponse   As String
        Dim xjnr
        Dim llen As Long
        Dim mbyte() As Byte
        Dim strResponseCode     As String
        Const RandString As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"
        Dim Globalstr As String
        For jd = 1 To 24
            uniquey = Int(Rnd * Len(RandString)) + 1
            Globalstr = Globalstr + Mid(RandString, uniquey, 1)
        Next jd
            Select Case m_State
                Case MAIL_CONNECT
                    m_State = MAIL_HELO
                     Winsock1.SendData "HELO " & UsreuserFXRDZ & vbCrLf
                     StatusTxt = "登陆服务器"
                     Winsock1.GetData strServerResponse
                    If Left(strServerResponse, 3) <> "220" Then
                    Winsock1.Close
                    Unload Me
                    MsgBox "无法登陆服务器"
                    End If
                Case MAIL_HELO
                     m_State = MAIL_USER
                     Winsock1.SendData "AUTH LOGIN" & vbCrLf
                     StatusTxt = "正在校验用户名"
                      Winsock1.GetData strServerResponse
                     If Left(strServerResponse, 3) <> "250" Then
                    Winsock1.Close
                    Unload Me
                    MsgBox "无法打开邮件发送对话"
                    End If
                Case MAIL_USER
                     m_State = MAIL_PASS
                     Winsock1.SendData (Base64_Encode(Trim(UseruserNAME))) & vbCrLf
                     StatusTxt = "校验用户密码"
                      Winsock1.GetData strServerResponse
                Case MAIL_PASS
                     m_State = mail_login
                     Winsock1.SendData (Base64_Encode(Useruserpass)) & vbCrLf
                     StatusTxt = "发送人邮件地址"
                      Winsock1.GetData strServerResponse
                Case mail_login
                      Winsock1.GetData strServerResponse
                      m_State = MAIL_from
                      Winsock1.SendData "MAIL FROM:" & Trim$(UsreuserFXRDZ) & vbCrLf
                     StatusTxt = "接收人邮件地址"
                Case MAIL_from
                     m_State = MAIL_RCPTTO
                     Winsock1.SendData "RCPT TO:" & Trim$(InsertHtmlCodeede(Trim$(InsertHtmlCodee(写新邮件.Text1)))) & vbCrLf
                     StatusTxt = "邮件发送之中..."
                     Winsock1.GetData strServerResponse
                Case MAIL_RCPTTO
                     m_State = MAIL_DATA
                     Winsock1.SendData "DATA" & vbCrLf
                     StatusTxt = "获取邮件内容"
                     Winsock1.GetData strServerResponse
                Case MAIL_DATA
                    m_State = MAIL_DOT
                   Dim strDataToSendend     As Variant
                   Dim strDataToSend       As Variant
                    Winsock1.SendData "From:" & " <" & 写新邮件.Text4 & ">" & vbCrLf
                    MsgBox InsertHtmlCodeede(Trim$(InsertHtmlCodee(写新邮件.Text1)))
                    Winsock1.SendData "To:" & " <" & InsertHtmlCodeede(Trim$(InsertHtmlCodee(写新邮件.Text1))) & ">" & vbCrLf
                  strDataToSend = Split(写新邮件.Fsemail, vbCrLf)
                    For Each strDataToSendend In strDataToSend
                        Winsock1.SendData CStr(strDataToSendend) & vbCrLf
                    Next
                    Winsock1.SendData "." & vbCrLf
                    StatusTxt = "邮件送完毕"
                    Winsock1.GetData strServerResponse
                Case MAIL_DOT
                    m_State = MAIL_QUIT
                    Winsock1.SendData "QUIT" & vbCrLf
                    MsgBox "VVVVVVVVVV"   '有时执行不到这句 
                Case MAIL_QUIT
                   Winsock1.Close
                   Unload 写新邮件
                   Unload Me
                  End Select
                  Debug.Print strServerResponseEnd Sub
      

  7.   

    to:: AHBC123() 
    之所以长时间不退出,是因为你的程序中的Winsock1.SendData "QUIT" & vbCrLf没有执行导致的,邮件服务器只有在收到"Quit"命令,它才会退出。
      

  8.   

    to: : usaspy(行走的鱼) 
    谢谢您,谢谢!!!为何Winsock1.SendData "QUIT" & vbCrLf没有执行,该如何改,还请您帮助,谢谢!!!!
      

  9.   

    "把这段代码拷贝到一个记事本,然后保存成test.eml文件,打开看就知道了"这叫什么?还不如直接用outlook收发邮件呢,还写代码干什么
      

  10.   

    to:: AHBC123() 
    你确定每次发送完毕,都回执行quit命令吗?
    多半你的程序在发送邮件时卡在什么地方了。
      

  11.   

    to: usaspy(行走的鱼)我发送小文件都能发送成功(300k以下),300k以上的有时能,有时不能,还请教是何原因
    因,谢谢!!!
      

  12.   

    兄弟,我在一年前就写好了,要不要看看??给出您的邮件地址,将免费获得一套主控代码!我业余时间开发的一个界面和功能和OUTLOOK一样的软件,开放主控代码,帮我看看!运行效果图:
    http://www.efile.com.cn/efile/huangtao/SmartMail.bmp安装盘及其代码下载地址:
    http://www.cnkernel.com/opensoft.asp?soft_id=3&url=4本软件开始出售源代码
      

  13.   

    to: xiaohuangtao(绿毛网虫)
    谢谢您,谢谢!!!!
    [email protected]
      

  14.   

    to: xiaohuangtao(绿毛网虫)
    谢谢!!!!
    http://www.cnkernel.com/opensoft.asp?soft_id=3&url=4无法下载,您能发送给我吗,谢谢!!!
      

  15.   

    AHBC 123()
    你提供的代码好像在那里见过,你是不是南京审计学院的
    我不相信那样的代码能发送300k的信体,winsock的8k缓冲区决定了大于8k的数据不可能在一次发送完毕的//
     我的信箱[email protected] ,有空大家一起探讨winsock缓冲区问题如何
      

  16.   

    To:kelink(小飞猪) 
    真的见过吗,一年前我倒是发布过,不过这一年来,我很少上网了,一直在改善该软件,以及作相关应用,昨天一进来,发现信誉分大大下降.现在该软件基本上已经形成一个开发平台.并开始出售产品!您说的问题,必须在一此发送完毕后,才能发送下一个包,因为带宽有限阿.并不是我写数据到端口写多少就成功发送多少了.如果是那样的话,一个200M的东西,不出10秒就可以读完并写完,实际上我还没有看见这样的带宽阿.
      

  17.   

    我现在也在做这样的程序,邮件的解码已经做好,完全没有问题。
    我正在做邮件的发送的程序,如果有意我们可以交换,你可以给我邮件发送的程序,包括发送附件,内嵌资源一起发送的,可靠的话给我留言。
    我用的是POP3协议收,和准备使用SMTP来发。
      

  18.   

    如果你能够发送附件,我想用pop3接收附件也是没有问题的。哈哈。
    我也是自己在网上找了好久,没有找到答案,最后还是自己研究解决了。
      

  19.   

    http://jinesc.6600.org/myweb/disp.asp?idd=1174&room=10