说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何在VC程序中发送一个Email出去?

编辑:说三道四文库 发布时间:2017-05-01 02:47
HTML文档下载 WORD文档下载 PDF文档下载
亦是使用socket连接SMTP服务器
不过邮件的格式和规则比较烦...
你若只是想启动Outlook就好写多了...
我本来想把RFC821文档贴这里的,但是太长了,建议你去以rfc821或rfc0821搜索一下,那就是SMTP的详细说明。
http://www.programsalon.com/download.asp?type_id=15

里面有例子程序,自己找找吧
使用MAPI吧
这儿有段vb的用winsock联接pop server的例子,把他翻成vc的应该就行了。

'----------------------------------------
'- Name: Sam Huggill
'- Email: sam@vbsquare.com
'- Web: http;//www.vbsuare.com/
'- Company: Lighthouse Internet Solutions
'- Date/Time: 05/09/99 16:40:01
'----------------------------------------
'- Notes:   Originally writeen by standby@dellete.com
'           but modified by Sam Huggill
'
'           Mainly cleaned up the code to make it
'           easier to read and use
'----------------------------------------

Option Explicit

' Base64Encode(strOriginal)
' Base64Encode("the") would return "dGjl"
' You can only pass three letters as the arguement

Public Function Base64Encode(strOriginal As String)
    Dim intCount As Integer
    Dim strBinary As String
    Dim intDecimal As Integer
    Dim strTemp As String

    intDecimal = Asc(Left$(strOriginal, 1))
    
    For intCount = 7 To 0 Step -1
        If (2 ^ intCount) <= intDecimal Then
            strBinary = strBinary & "1"
            intDecimal = intDecimal - (2 ^ intCount)
        Else
            strBinary = strBinary & "0"
        End If
    Next
    
    If Len(strOriginal) < 3 Then GoTo unfpassone
    
    intDecimal = Asc(Mid$(strOriginal, 2, 1))
    
    For intCount = 7 To 0 Step -1
        If (2 ^ intCount) <= intDecimal Then
            strBinary = strBinary & "1"
            intDecimal = intDecimal - (2 ^ intCount)
        Else
            strBinary = strBinary & "0"
        End If
    Next
    
    If Len(strOriginal) < 3 Then GoTo unfpassone
    
    intDecimal = Asc(Right$(strOriginal, 1))
    
    For intCount = 7 To 0 Step -1
        If (2 ^ intCount) <= intDecimal Then
            strBinary = strBinary & "1"
            intDecimal = intDecimal - (2 ^ intCount)
        Else
            strBinary = strBinary & "0"
        End If
    Next
    
unfpassone:
    For intCount = 1 To 19 Step 6
        Select Case Val(Mid$(strBinary, intCount, 6))
            Case 0
                strTemp = strTemp & "A"
            Case 1
                strTemp = strTemp & "B"
            Case 10
                strTemp = strTemp & "C"
            Case 11
                strTemp = strTemp & "D"
            Case 100
                strTemp = strTemp & "E"
            Case 101
                strTemp = strTemp & "F"
            Case 110
                strTemp = strTemp & "G"
            Case 111
                strTemp = strTemp & "H"
            Case 1000
                strTemp = strTemp & "I"
            Case 1001
                strTemp = strTemp & "J"
            Case 1010
                strTemp = strTemp & "K"
            Case 1011
                strTemp = strTemp & "L"
            Case 1100
                strTemp = strTemp & "M"
            Case 1101
                strTemp = strTemp & "N"
            Case 1110
                strTemp = strTemp & "O"
            Case 1111
                strTemp = strTemp & "P"
            Case 10000
                strTemp = strTemp & "Q"
            Case 10001
                strTemp = strTemp & "R"
            Case 10010
                strTemp = strTemp & "S"
            Case 10011
                strTemp = strTemp & "T"
            Case 10100
                strTemp = strTemp & "U"
            Case 10101
                strTemp = strTemp & "V"
            Case 10110
                strTemp = strTemp & "W"
            Case 10111
                strTemp = strTemp & "X"
            Case 11000
                strTemp = strTemp & "Y"
            Case 11001
                strTemp = strTemp & "Z"
            Case 11010
                strTemp = strTemp & "a"
            Case 11011
                strTemp = strTemp & "b"
            Case 11100
                strTemp = strTemp & "c"
            Case 11101
                strTemp = strTemp & "d"
            Case 11110
                strTemp = strTemp & "e"
            Case 11111
                strTemp = strTemp & "f"
            Case 100000
                strTemp = strTemp & "g"
            Case 100001
                strTemp = strTemp & "h"
            Case 100010
                strTemp = strTemp & "i"
            Case 100011
                strTemp = strTemp & "j"
            Case 100100
                strTemp = strTemp & "k"
            Case 100101
                strTemp = strTemp & "l"
            Case 100110
                strTemp = strTemp & "m"
            Case 100111
                strTemp = strTemp & "n"
            Case 101000
                strTemp = strTemp & "o"
            Case 101001
                strTemp = strTemp & "p"
            Case 101010
                strTemp = strTemp & "q"
            Case 101011
                strTemp = strTemp & "r"
            Case 101100
                strTemp = strTemp & "s"
            Case 101101
                strTemp = strTemp & "t"
            Case 101110
                strTemp = strTemp & "u"
            Case 101111
                strTemp = strTemp & "v"
            Case 110000
                strTemp = strTemp & "w"
            Case 110001
                strTemp = strTemp & "x"
            Case 110010
                strTemp = strTemp & "y"
            Case 110011
                strTemp = strTemp & "z"
            Case 110100
                strTemp = strTemp & "0"
            Case 110101
                strTemp = strTemp & "1"
            Case 110110
                strTemp = strTemp & "2"
            Case 110111
                strTemp = strTemp & "3"
            Case 111000
                strTemp = strTemp & "4"
            Case 111001
                strTemp = strTemp & "5"
            Case 111010
                strTemp = strTemp & "6"
            Case 111011
                strTemp = strTemp & "7"
            Case 111100
                strTemp = strTemp & "8"
            Case 111101
                strTemp = strTemp & "9"
            Case 111110
                strTemp = strTemp & "+"
            Case 111111
                strTemp = strTemp & "/"
        End Select
    Next
    
    Base64Encode = strTemp
    
End Function

' Base64EncodeFile(strFile,rtfTemp,txtOutput)
' Base64EncodeFile "c:\windows\autoexec.bat",rtfBox,txtBox
' The second parameter must be a rtf box or a control that supports the
' LoadFile command

Public Sub Base64EncodeFile(strFile As String, rtfTemp As RichTextBox, txtOutput As TextBox)
    
    Dim intCount As Integer
    Dim strTemp As String
    Dim lngMax As Long

    lngMax = 0
    txtOutput.Text = ""
    rtfTemp.LoadFile strFile
    
    For intCount = 1 To Len(rtfTemp.Text) Step 3
    
        strTemp = Mid(rtfTemp.Text, intCount, 3)
        txtOutput.Text = txtOutput.Text & Base64Encode(strTemp)
        lngMax = lngMax + 4
        
        If lngMax = 72 Then
            lngMax = 0
            txtOutput.Text = txtOutput.Text & vbCrLf
        End If
        
        DoEvents
    Next intCount
    
End Sub

' ConnectToServer(strServer, wsk, strSrvPort)
' ConnectToServer "pop.microsoft.com", Winsock1, 25
' Normally leave out the last arguement and let the Winsock control use
' the default port.

Public Sub ConnectToServer(strServer As String, wsk As Winsock, Optional strSrvPort As String)
   
    wsk.RemoteHost = strServer
    
    If strSrvPort = "" Then
        wsk.RemotePort = 25
    Else
        wsk.RemotePort = Val(strSrvPort)
    End If
    
    wsk.Connect

End Sub

' ExtractArgument(ArgNum, srchstr, Delim)
' ExtractArgument(3, "No 1, No 2, No 3", ",") Would return No 3
' I did not have time to sort out the variable names in this function,
' so if you can be bothered to, please send it to me at sam@vbsquare.com

Private Function ExtractArgument(ArgNum As Integer, srchstr As String, Delim As String) As String

    On Error GoTo Err_ExtractArgument
    
    Dim ArgCount As Integer
    Dim LastPos As Integer
    Dim Pos As Integer
    Dim Arg As String
    
    Arg = ""
    LastPos = 1
    If ArgNum = 1 Then Arg = srchstr
    Do While InStr(srchstr, Delim) > 0
        Pos = InStr(LastPos, srchstr, Delim)
        If Pos = 0 Then
            If ArgCount = ArgNum - 1 Then Arg = Mid(srchstr, LastPos)
            Exit Do
        Else
            ArgCount = ArgCount + 1
            If ArgCount = ArgNum Then
                Arg = Mid(srchstr, LastPos, Pos - LastPos)
                Exit Do
            End If
        End If
        LastPos = Pos + 1
    Loop
    ExtractArgument = Arg
    
    Exit Function
    
Err_ExtractArgument:
    MsgBox "Error " & Err & ": " & Error
    Resume Next
End Function

' SendMail(strFrom, strTo, strSubject, strBody, wsk, strAttachName, txtEncodedFile)
' SendMail "me@mymail.com", "you@yourmail.com", "Test Message", "Body", Winsock1, "myfile.ext", txtEncodedFile
' If you omit the last two arguements then no file is attached
' Before attaching a file, you must first encode it using the Base64EncodeFile function

Public Sub SendMail(strFrom As String, strTo As String, strSubject As String, strBody As TextBox, wsk As Winsock, Optional strAttachName As String, Optional txtEncodedFile As Control)
    
    Dim intCount As Integer
    
    Wait 0.5
    
    wsk.SendData "EHLO " & wsk.LocalIP & vbCrLf
    wsk.SendData "MAIL FROM:" & strFrom & vbCrLf
    
    Wait 0.5
    
    wsk.SendData "RCPT TO:" & strTo & vbCrLf
    wsk.SendData "DATA" & vbCrLf
    
    Wait 0.5
    
    wsk.SendData "MIME-Version: 1.0" & vbCrLf
    wsk.SendData "From: " & ExtractArgument(1, strFrom, "@") & " <" & strFrom & ">" & vbCrLf
    wsk.SendData "To: <" & strTo & ">" & vbCrLf
    wsk.SendData "Subject: " & strSubject & vbCrLf
    wsk.SendData "Content-Type: multipart/mixed;" & vbCrLf
    wsk.SendData "              boundary=Unique-Boundary" & vbCrLf & vbCrLf
    wsk.SendData " [ Random garbage here ]" & vbCrLf & vbCrLf
    wsk.SendData vbCrLf & "--Unique-Boundary" & vbCrLf
    wsk.SendData "Content-type: text/plain; charset=US-ASCII" & vbCrLf & vbCrLf
    wsk.SendData strBody.Text & vbCrLf & vbCrLf
    
    If LTrim(RTrim(strAttachName)) <> "" Then
    
        For intCount = Len(strAttachName) To 1 Step -1
        
            If Mid(strAttachName, intCount, 1) = "\" Then
                strAttachName = Mid(strAttachName, intCount + 1)
                GoTo lala
            End If
            
        Next intCount
lala:
        wsk.SendData "--Unique-Boundary" & vbCrLf
        wsk.SendData "Content-Type: multipart/parallel; boundary=Unique-Boundary-2" & vbCrLf & vbCrLf
        wsk.SendData "--Unique-Boundary-2" & vbCrLf
        wsk.SendData "Content-Type: application/octet-stream;" & vbCrLf
        wsk.SendData " name=" & strAttachName & vbCrLf
        wsk.SendData "Content-Transfer-Encoding: base64" & vbCrLf
        wsk.SendData "Content-Disposition: inline;" & vbCrLf
        wsk.SendData " filename=" & strAttachName & vbCrLf & vbCrLf
        wsk.SendData txtEncodedFile.Text & "==" & vbCrLf
        wsk.SendData "--Unique-Boundary-2----Unique-Boundary--"
        
    End If
    
    wsk.SendData vbCrLf & "." & vbCrLf
    
    Wait 0.5
    
    wsk.SendData "QUIT" & vbCrLf
    
    Wait 0.5
    
    wsk.Close
    
End Sub

' Wait(WaitTime)
' Wait 0.5

Public Sub Wait(WaitTime)

    Dim StartTime As Double
    
    StartTime = Timer
    
    Do While Timer < StartTime + WaitTime
        If Timer > 86395 Or Timer = 0 Then Exit Do
        DoEvents
    Loop
    
End Sub
显示文件属性对话框-VB资料 VB用 API 打开打印对话框 VB用API函数改进ListView控件的显示效果 VB用API函数控制光驱的开关 VB用注册表保存数据(VB函数篇) 有关Tray系统盒的VB API函数 在VB中调用API函数动态改变及恢复屏幕设置 在VB中控制Ctrl+Del+Alt键 在VB中使用API函数 (之二) 在VB中使用API函数 (之三) 在VB中使用API函数 (之四) 在VB中使用API函数 (之五) 在VB中使用API函数 (之一) 在VB中用API实现多媒体 VB怎样用VB在应用程序中调用API VB怎样在DELPHI中使用API函数 指定文件夹-VB资料 VB5中注册控件三法 Bug:维护 Internet Transfer Control 之 Username 及 Pass VB对低层硬件访问控制 HitTest的妙用 -VB资料 ListBox项的控制-VB资料 VB 6.0中类聚集关系的实现 VB6编程中如何获取硬盘分区信息 VB的坐标系统综述 VB调用C程序动态链接库的方法 VB对低层硬件的访问控制 VB软件开发中的错误捕获及处理技术 VB中Combo的一种输入检查制约方法的实现 VB中Winsock控制的UDP协议的使用 VB中的时间处理问题 请教c++的问题 滴水之恩,涌泉相报!!! REALPLAY不出声音 我想考scjp,不知道那个证有没有用? 哪儿有这样的软件? 电脑游戏与电子游戏 哪位有CRC-CCITT的表格,计算法就不必了 电子游戏与电脑游戏 如何用ASE12.5构建ODBC数据源并用ASP连接调用它? 关于c#版csdn助手的数据连接问题 有没有点击表头排序的listview控件? 我不会了(EDIT BOX问题),在线等 Delphi 用VB做数据库,同时保证远程SQL SERVER和本地ACCEE的同时更新,当远程连接不通时应该怎样做才能在本地顺利运行,而网络通畅时又能保证数 fopen与_open什么区别? 谁能推荐一个专注于编程、高手林立的的linux论坛? 指针???????? 请教在座各位sql server高手一个关于bcp命令的问题 奇怪的多线程与CListCtrl的问题! 特急!~~~!!寻求帮助! 请问vb里面用菜单编辑器作的菜单,怎么加图标啊? 男女关系的33个妙喻(转) 那位高手知道怎样绑定data grid 和 sql server 中的表 急 關於Ultra Edit編輯Java try! 有用C#做数据库编程的朋友给点经验 wonderful ASP 请问,知道对方IP地址(对方是98 有共亨之类的)如何能读写的对方的文件 关于ram、rm文件: 请问各位大虾,两个日期相减应该怎么做呀?比如2002年6月20日减去2001年10月15日 还很奇怪:我的笔记本的网卡物理地址(physical address)是:00-00-00-00-00-00 關於Ultra Edit 关于目录共享的问题>>>>>>>>>>>>>>>>> 菜鸟的第3个问题 :( 请问高手内存分配的问题? 有没有方法使含有JAVA APPLET的网页下载到客户端后,可以脱离网页独立运行! 有关事务的范围 PE文件资料 特急!寻求帮助!课程设计帮忙做一下! 如何在c语言中嵌套汇编语言,我用的是turbo c2.0!!在线等候,快快 哪里可以下到有关Visual C#.net的比较好的书籍? 不用循环能把数据一次过传递给一个数组变量 怎样在一个User Control上显示MS Graph图表控件 我的浏览器不支持Javascript,我该怎么? 请问~~有那位知道virtual pc的注册码!要最新版本的哪个!谢谢~` 紧急求救!!!怎么屏蔽TextBox的右键菜单。急急急!!! 高分悬赏!!! 请教DirectShow的使用。 求助:如何准确定位插入符? SQL语句中如何设立关系 怎么才能让一个应用程序的图标在任务栏的右边出现呢????? 求一篇英语作文:父母是最好的老师吗? 写日记时,我可以……可以……可以…… 判断对错 把4米长的木头平均截成5段,每段是全长的5分之4 () 汉字真有趣 把一根长3分之2m长的木料平均截成5段,每段长( )米,每段长度是这根木料的( )据每段所用的时间是总时间的( 打字员打一份文稿,已打了30%,再打1400个字,就可打完,这份文稿多少字 当你的同学遇到困难就想退缩时,你会送他哪句名言?谢谢拉! 这个符号怎么打 ’ 金山打字通里的..像逗号..在字上.. 关于小学即将离别的文章?要是离别前不舍得分别的 关于一篇《汉字真有趣》的文章,500字左右 金山打字通中的文章练习里的字怎么是英文?金山打字通中的词汇练习、文章练习里的字怎么不能使用?只是出英文?ctrl shift一起按了,进入时换成搜狗拼音了,都没用! 小学送别的作文 当你的同学遇到困难就像退缩是,你会送他那句名言名言诗句都可以(这是一道语文题)急! 我下载金山打字通那组词打不的组词和那什么打不的 小学离别作文题记就是写六年级离别的作文的题记,不要超过50字 意思:当我们遇到困难想退缩时,老师就会用“ ”这句话鼓励我们.求名言 谁有关于朋友分别时的文章啊!要感人的! 小学六年最感人离别作文 当你的同学遇到困难想退缩时,你会送什么名言 我在金山打字通里测试,排行榜里的“速度:37113WPM是什么意思?怎么计算我一分钟打了多少字?刚测试完是可以直接看到具体打了多少字的,可再去点排行榜时,就是那么多数学了,不知道怎么换 小学的期末分别作文 当同学遇到困难想退缩时,可以用一句格言劝导: 舍不得一个朋友的离去作文怎么写? 祖国的光荣史格式如:2008年北京奥运会把年代说好最少说7个 作文 放学路上 400字写身边的现象 怎么样写出关于朋友离别时很伤感的文章平民化点 少点古诗那些的 给五个祖国的光辉历史,明天交, 放学路上 作文400字各位文笔好的同学、、帮帮忙、不要度娘能搜到的那些. 六年级朋友离别时的情小作文100字 祖国的声音 祖国的光辉历史 小丽每秒打5个字,小红每秒打12个字,小丽每分钟比小红少打几个字 描写朋友之间分别的作文, 我国古代的《四书五经》包括哪四书,哪五经? 甲乙两个工程队中甲的工效比乙高25%,因此甲队比乙队单独完成A工程要少用6天.求两队合作完成A工程要用多久 假设你是星光中学的李华,将参加主题为The Important of Physcal Exercise for Student 的英文演讲.假设你是星光中学的李华,将参加主题为The Important of Physcal Exercise for Student 的英文演讲.请撰写一份演讲 中国古代“四书五经”中的“四书”和“五经”分别是指什么?四书是指:《大学》《中庸》《论语》《孟子》!五经是指:《尚书》《礼记》《周易》《诗经》《春秋》 有人民币2400元,共计50张,分别为20元,50元,100元三种面值,20元50元的张数一样多,3种面值各多少张? 随感日记写什么? 中国古代“四书五经”中的“四书”是指什么? 人与动物和谐相处的名言警句 把一根长两米的木材平均截成五段,其中三段的长占全长的( )%. 有谁知道古代的“四书五经”是哪“四书”“五经”? 人与动物和谐相处的名言警句(10则)我要做作业……越多越好…… 如何在自己的博客中书写文章 令人骄傲的,关于祖国的三件历史事件要时间(xx年),什么事件,(如鸦片战争).3件,一句话.我现在正在做这项作业, 关于人与动物的名言 把一根长2米的木材平均截成五段,其中三段的长占全长的百分之几. 祖国的光荣历史50字 抄一份稿件,甲每小时抄了1/3,乙每小时可以抄这份稿件的1/4.甲、乙两人工作效率的最简单的整数比是()?A.1/3:1/4 B:3:4 C.4:3答案和过程,谢谢!好的我追加! 随笔日记一篇 500字 小华的身高是135cm,小龙的身高比小华高九分之一,小龙的身高是多少米?要列算式! 把3米长的木料平均分成5段,每段长是1米的( ) 把一根2米长的木材截成等长的小段,截了4次,其中的3段占全长的( )%谁来帮我? 凡卡的写的信,爷爷真的会收到吗?为什么? 我有很多的新本子,请问可以干什么?但是不要写作文,写文章,写日记之类的,要有创意!一定要有创意!还要说清楚!比如淘宝本,淘宝本做什么呢?之类的,越有创意越好 谁能帮我写五篇随笔或日记,初二水平的,800字左右! 求十分钟左右的名人演讲视频和演讲稿(英文) 汉字真有趣 作文最好不要复制 把3米长的木材,平均截成5段,每段长5分之1米. 1、 把一根木材截成每段2米的木料,一共截了5次.原来木材全长_______米.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘