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

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

编辑:说三道四文库 发布时间:2017-12-15 06:14
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
拥抱Spark,机遇无限——Spark Summit 2013精彩回顾 1月10日:改变世界的iPhone七岁了,你是传奇! 同洲电子推出首款手机操作系统960OS 免费授权使用 如何在Windows 8.1的IE11中打开同步选项卡? 25年老对手评价微软:换CEO可行,但是太迟了 【PPT集萃】十位一线专家分享Spark现状与未来(三) 万元奖品等你拿!2014创客118新年大Party! Firefox OS的2013回顾和2014展望 Strom8 CEO:搞好手游开发,合伙人很重要 2013年Q4全球PC出货量同比下滑6.9% 已连续下滑七个季度 一周消息树:2013年十大产品、图书、公司盘点 专访Wunderlist主设计师Jan Martin:永远不要盲目跟风流行趋势 研发周报:超实用的JavaScript技巧及最佳实践 2013最吃香的技能:Java称霸、Android势头正猛 移动周报:最火原型设计工具盘点 “京东电商云”起航,零售企业及品牌商是重点 教育乃立国之本:教育类开源项目大汇集 Hugo Barra首度谈离开谷歌后在中国工作的感受 对中国赞不绝口 母婴行业最早试水者 优谈宝宝借助轻应用全面布局移动产品线 腾讯云平台部总经理纪顺友:微云将彻底迈过文件传输的门槛 豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 求简单木马代码(vc)来者有分 如何将CString类型的字符串转换成Char *型的 求Crystal Reports8.5版本下载(不要9) 请帮忙看一下!! 在vb里调用我动态库的一个函数,结果发现在动态库中的局部变量未被正确初始化,这是为什么呢?其它语言都正常。 如何动态生成弹出式菜单???有点急! 9.12 阅读理解 (Unit 8) 如何动态生成弹出式菜单???有点急! 十六进制数与二进制数如何互换 請問團隊開發同一個系統代碼該怎樣管理(包括開發中) 请问各位,SUN公司是怎么个盈利模式? 打包以后问题多多. 在sql中怎么不能插入毫秒级的数据啊 急!!!如何得到上一个页面的ID值 使用axis写web services,生成客户端出错 ejb不能执行的问题? 关于showModalDialog方法生成的窗口问题 关于网上邻居 在vb里调用我动态库的一个函数,结果发现在动态库中的局部变量未被正确初始化,这是为什么呢?其它语言都正常。 SQL Server的恢复(100分相送) 哪里有BoundsChecker下载!带注册码的!知道的进来!然后给100分!不知道的不要来! 如何在SQL 语句中加入参数? 如何统计服务器上面的session实例的个数 中病毒,症状:打开很多应用程序,系统无反应,运行金山毒霸,系统无反应;点击“开始”-“关机”-“重新启动”,死机! 这是scanf的漏洞吗? 哪一个网站可以很好地查图书资料? web service 及 net remoting中调用com组件问题 当老师了,教计算机,有哪个的小孩敢拿来让我教 当老师了,教计算机,有哪个的小孩敢拿来让我教 控件被其他控件覆盖 听说JFreeChart的文档都是收费的,哪位高人用的熟,整理一个说明拿来看看.小弟谢过了 那为师兄能详细的介绍以下javasmart怎么用吗? 想换心情! 求救,硬盘故障!!! 高手快来!!不知是什么错误!! 讨论架构 求救,硬盘故障!!! 从一个TQuery中的数据如何快速的存放到另一个表中? 创建临时表空间时出错了 VC6的命令行工具 unix下 oralce 8.0.5 连接unix 下8.1.6的问题 帮助中的一段话 关于delphi中类之间成员的访问问题 请教一条sql语句 IE 不能正常浏览applet? SQL语句的简单问题 求救!树形菜单,请高手赐教 求救!!谁有写过安全策略方案,给个模板呀? winrunner怎么获取工具条中的按钮对象? 这个update为什么报错?该如何改? 招兼职图片程序员 queen怎么读? it\'s t__to go home now.这个单词是什么 仒和帛,谁可以告诉我这两个字的读法?帛和仒,谁可以告诉我这两个字的读法? 1.一轮船以40m/s航行,在距离港口一段距离处,发出一声音,4s后收到回声,问发声处距港口多远?2.一人经过桥上向下扔一块石头,2s听到水声,问桥距水面多高?石头落下去的时间不计? 草创未就,会遭此祸.难为俗人之言.翻译 聚龙集团的食用油有什么特别的? 擒油龙, 龙大食用油怎么样 哪位大哥能告诉我红色警戒3和起义时刻如何联机玩.越详细约好.谢谢各位啦最好是局域网的详细联机法.俺在网吧玩呢,在网吧能连上就行 两位数的加法要记住什么对齐,从什么加起,什么满十,向什么进一 命令与征服:红警3 还有红警3 世界大战和红警3起义时刻,有什么区别,都是红警3.剧情和内容一样不? 洛杉矶机场枪击案致航班受阻 华人伸援印尼黑客袭击澳大利亚200多家网站 玻利维亚北部发生坠机事故 已致8人死日本防卫省对大规模军演限制报道让日媒德国海关在一公寓中查获逾1500幅绘刚果(金)反政府武装陷入绝境 要求立伊拉克总理访美寻求武器技术支持 防内日本企业为免无期限雇佣临时工 设定合孙杨谎称驾照未带被识破?律师:若属实东方卫视知名主持人朱桢离婚 前妻炫富埃及前总统穆尔西到达受审地点 将接受新泰市谷里镇劳保所原科员鲍峰挪用养老蓬莱旅游度假区荣获“全国知名品牌示范国新办发表中国与菲律宾在南海的有关争淄博周村:车改之后,他们这样出行冒高温升级改造勒夫留任德国队主帅中国男篮热身险胜法国第56届国际小姐大赛河北赛区开赛邓肯退役,风轻云淡保级路艰难!永昌战鲁能 难兄难弟谁都美商务部初裁中国不锈钢产品存在补贴行无限神降超级宠物外挂超级系统人生超能战神重生之大经纪天才名医我的篮球进行时武战魂股仙小小部落战神天赋北山森林公园旅游黄山鲁森林公园旅游羚羊峡旅游丽谯楼旅游温汤旅游清风阁旅游浪石金滩旅游七夕文化广场旅游珠村旅游双塔山旅游金寨县革命烈士陵园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘