我用通过socks5代理访问E-mail服务器,像foxmail一样
由于不清楚socks5的协议细则(查过RFC,未果)所以用sniffer监视foxmail的网络数据包,通过分析和模拟,已经可以针对某个特定的邮件服务器进行通讯。
过程是这样的
通过winsock控件先和socks5代理服务器建立连接,然后
1.发送:05 01 00 (注:ASCII码16进制,其余为转换过的字符串)
2.返回:05 00
3.发送:05 01 00 03 0C pop3.126.com 00 6E
4.返回:05 00 00 01 D2 53 CA B0 9 C7
5.返回:+OK Welcome to coremail Mail Pop3 Server (126com[030901])
6.发送:USER tuzi59421
7.返回+OK core mail
8.发送PASS 5211314
9.返回+OK 0 message(s) [0 byte(s)]
...以后就是SMTP的通讯内容了
现在有个疑问,就是第三步pop3.126.com 字符串前的 0C 这个标志,我发现每个不同的邮件服务器这个标志是不同的,我自己算不出来,用其他的数字代替就出错了。小弟比较笨,问题是出在不知道怎样通过给代理服务器发指令连接邮件服务器造成的,所以请高手替我解决这个问题,或者告诉我其他的方法通过代理服务器连接邮件服务器也行,CSDN的帖子我翻了好几遍了也没找到合适的答案。

解决方案 »

  1.   

    0C会不会是后面跟着的字符串的长度呢
    hex(len("pop3.126.com"))=0C
      

  2.   

    supergreenbean(超级绿豆)的回答很有道理啊,我试了其他的几个服务器,都有这个规律。
    pop3.sina100.com=10
    pop.163.com=11
    pop.yeah.net=0c
    pop3.126.com=0c这个问题解决了,supergreenbean(超级绿豆) 谢谢你啊,一会给你分,我还有一些问题,就是怎样通过winsock控件接收和发送邮件附件(一定是附件,不是编码在邮件里的文本),请大家帮帮忙
      

  3.   

    你打开个邮件看看他的源码就知道了,其实附件也是经过了base64编码然后贴在邮件正文后面的
      

  4.   

    哦,我的意思是怎样生成标准的附件格式,我看到有些邮件源码加入的附件都只有自己能按照预期的格式打开,要是用其他程序收就不能正确识别出附件,比如foxmail。
    哪里有这方面的资料?
      

  5.   

    发送部分
    '該函數用于构造信件內容
    Private Sub GenMail(bAttachment As Boolean)
    Dim fnum As Integer, FAttin As Integer
    Dim strLine As String
    strSendName = txtSName.Text
    strReceiveName = txtRName.Text
    strFromMail = txtFrom.Text
    strToMail = txtTo.Text
    m_Date = Format(Date, "Ddd") & ", " & Format(Date, "dd Mmm YYYY") & " " & Format(Time, "hh:mm:ss") & "" & " -0600"
    strSubject = txtSubject.Text
    strContent = txtContent.Text
    fnum = FreeFile()
    Open App.Path & "\mail.tmp" For Output As fnum
    '构造信件標題字段
    Print #fnum, "From:" & Chr(32) & strSendName
    Print #fnum, "Date:" & Chr(32) & m_Date
    Print #fnum, "X-Mailer: BigAnt Smtp Mailer V1.0"
    Print #fnum, "To:" & Chr(32) & strReceiveName
    Print #fnum, "Subject:" & Chr(32) & strSubject
    If bAttachment = False Then
        Print #fnum, ""
        Print #fnum, strContent
        Exit Sub
    End If
    Print #fnum, "MIME-Version: 1.0"
    Print #fnum, "Content-type:multipart/mixed;"
    Print #fnum, " boundary =""----=_NextPart_000_000A_01BF9F1A"""
    Print #fnum, ""
    '書寫信件的正文內容
    Print #fnum, "--" & "----=_NextPart_000_000A_01BF9F1A"
    Print #fnum, "Content-Type: text/plain;"
    Print #fnum, "    Charset = ""gb2312"""
    Print #fnum, "Content-Transfer-Encoding: 8bit"
    Print #fnum, ""
    Print #fnum, strContent
    '附件內
    Dim i As Integer
    For i = 0 To cobAtt.ListCount - 1
        Base64Encode cobAtt.List(i), App.Path & "\attachment" & i & ".tmp"
        Print #fnum, "--" & "----=_NextPart_000_000A_01BF9F1A"
        Print #fnum, "Content-Type: Application/octet-stream"
        Print #fnum, "  name=" & cobAtt.List(i)
        Print #fnum, "Content-Transfer-Encoding: base64"
        Print #fnum, "Content-Disposition: attachment;"
        Print #fnum, "  FileName=" & cobAtt.List(i)
        Print #fnum, ""
        FAttin = FreeFile
        Open App.Path & "\attachment" & i & ".tmp" For Input As #FAttin
        While Not EOF(FAttin)
            Line Input #FAttin, strLine
            Print #fnum, strLine
        Wend
        Close FAttin
    Next i
    Print #fnum, "--" & "----=_NextPart_000_000A_01BF9F1A" & "--"
    Close fnum
    End Sub
    接收呢?谁有现成的让我参考一下,自己写时间来不及了。
      

  6.   

    容我说一句废话:这东西的确很麻烦,而且得参考相关的RFC文档才行哦……