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

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

编辑:说三道四文库 发布时间:2017-03-26 07:48
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
这是一场潜在的战争:谷歌与Facebook、苹果在搜索上的博弈 设计新闻类网站需要注意的关键点:移动友好、宽带…… 直接开始用:5个免费的在线思维组织工具 招聘开发者常见的九大误区 开源影响销售,维护赞助商? 盘点黑客攻击途径:最常用的7个策略及简单的防护方法 专访AngularJS框架创始人Misko Hevery:让Web开发更便捷 果粉的又一个节日:新iPad或于10月22日发布 新车间李大维:到集装箱里来看创客嘉年华 亚马逊推“登录与支付”功能 直接冲击PayPal Google编程之夏新里程碑:5000万行源代码 8500名学生开发者 非常实用的15款开源PHP类库 Runnable:一站式代码片段服务平台,打造编程界的YouTube 谷歌向所有开发者开放Google App Engine PHP Runtime “沟通”电子表格和矢量图形的“桥梁”:在线可视化工具Raw Facebook北极圈数据中心,Open Compute Project的力作! 最后三天!4折抢购2013移动开发者大会门票 电子书追踪统计,App Annie for eBooks上线 先驱还是模仿者?细数海外移动应用推广平台 IDC:PC出货量下滑终于放缓 联想销量再次第一 为什么说,用一块屏幕玩游戏是远远不够的? 编写代码?先熟悉一下编程语言界限吧! Spanner vs. F1:谷歌两大数据管理利器的整体对比及关联 移动设计需摒弃的几大PC应用设计方法 响应式导航设计案例解析(多图) 所见即所得:七大无需编程的DIY开发工具 前Google员工发布无痕搜索产品,阻老东家财路 VMware推出vCloud Suite及vSphere新版:可用性及性能双丰收 TIOBE 2013年10月编程语言排行榜:Groovy首次挤进Top 20 Cookie时代将结束:微软将开发跨PC、移动和Xbox跟踪技术 Web设计里需要避免的八大糟糕趋势 Delphi 6 的 lib path 丢失!! help?谁知道Tab Control 控件的用法,12分的感谢!!!! 请问:如何在一般用户环境下启动管理员程序? 我想捕获网卡收到的数据包,该怎么搞? vb中调用sql server和ORACLE数据库的问题 北京的朋友,有谁知道这东西那里有卖的?? 想在c#和java中选一个,给点意见.客观点. 如何得到在另外一个窗口中所选择的结果 dcc32如何使用? 大哥,大姐们,这到题没分给,但我真的想知道答案 求对VSS或者Team Source开发的例子 科鼎校园网V2.3测试版网上演示 关于 WINDOWPLACEMENT Structure 关于用DELPHI联接ACCESS数据库怎样使用insert命令的问题(很急很急)加分多多!!! 学c#要那些知识前提。 请问新建怎么做? 为什么在excel表中可以看到的数字,用data连接后,在text和dbgrid中却看不到。(只显示出了其中的一部分) 简单问题,关于toolbar CTime类型变量的值存到数据库中datetime类型的小问题! vc怎样打开access数据库!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !求助,我的机子不能启动了。。。 XML中华网有好多的C#资料哦! 比较问题一道,关于 == 版主请进 ~ CrystalReport的一个奇怪的问题,Help! 唉,终于解决不了了,如何在运行时,改变LISTBOX的风格。MSDN说不能解决 AnsiString与TStrings之间的区别与联系,急! 有谁知道下载cobol的编译器,能在window下用的 各位兄弟、姐妹,谁能给我一个超星的账号阿!!谢谢了 再请教 Delphi的EXE 请问关于数组的问题 机器的速度太快,玩不了挖金子,有什么办法? web应用中使用Window ActiveX OCX技术存在问题 请教灰色凹下直线问题 jbuilder编译的问题 有关网络视频会议系统的开发模型问题??? 如何实现在DW中取数据? 如何注册一个DCOM,让它跑在别的机子上? 关于条码阅读器输入数据的控件 如何注册一个DCOM,让它跑在别的机子上? 开机后,总是弹出了一个窗口? 闲着没事,贴个歌词,先~~~ editbox控件问题 Delphi6安装之后怎么会… 请教一个非常难的问题,请高手入席! 如何实现在DW中取数据? 请教:我在CMyView中的菜单消息响应函数中调用一个对话框,为什么有的能打开,有的对话框打不开? 取消ADO大批量查询的问题 如何设置临时文件夹目录? 关于条码阅读器输入数据的控件 两个同方向同频率的简谐振动,其振动表达式分别为:x1=0.06cos(5t+0.5π) (SI) ,x2=0.02cos(π-5t) (SI)它们的合振动的振辐为_____________,初相为____________. 流体力学题目 有关单位质量力请问单位质量力的国际单位是什么 最后能给我看个根据的文献 E和N两个符号在地理中表示什么? 什么是斯托克斯方程?是沉降速度计算式 某班有40名同学参加竞赛,其中参加数学和化学竞赛各有30名,参加物理竞赛的同学有28名,则同时参加三科竞赛的同学至少有()名, 什么是地理纬度 粒子胶体中胶粒带电荷那它怎么显的中性?有什么东西中和它?粒子胶体是一般都带正电么? 流体力学,水的阻力问题观察雨滴从空中落下,形状是酷似鱼雷.也就是说象鱼雷/雨点这种头大尾小的形状前进时所收阻力最小.那么象梭子这样的两头尖,中间大的形状也是流线型啊,为什么梭子 地图上表示各种地理事物的符号叫? 电势降低的方向就是电场强度的方向.这句话错在哪? 已知φθ(Hg2+/Hg)=0.854V,Ks([HgI4]2-)=6.8*10^29,则φθ([HgI4]2-/Hg)为:A.-0.028VB.0.028VC.-0.911VD.0.911VE.-0.056V 电势差 电势 电场强度的关系 什么是信息技术?他经过了哪些发展?并将如何影响人类社会的发展? 请问地质年代上的Ma是什么意思?比如说新太古代末期(2412~2600Ma)一Ma是多少年呢? 电场强度与电势和电势差有什么关系 电场强度的方向就是电势降落的方向、为何不对 关于流体力学求局部阻力系数问题已知AB管长l,管径d,沿程阻力系数λ,用装置测验数据有(1)AB两断面测压管水头差h,(2)流量Q,求弯头的局部阻力系数...(AB段之间有个弯头,A断面高于B断面)不好 科技改变我们的生活的事例 科技进步对社会的影响英语作文一篇 要求用词四级 120词 .要点 1 科技的进步对现代社会的manner(关键词是这个)有深刻影响2上门拜访或者面谈很多被电话交谈所代替3人们上网与人交流,部分 4600MA是地质年代的什么意思?哪位大侠知道,看一本书反复出现一些地质年代的标记:4600MA,冥古代 3800MA,太古代……,4600MA是什么意思呢?是万年还是亿年?还是什么? 如何判断胶粒所带的电是正还是负搞不大清楚了~答的好会追加分数哦 胶体中与胶粒带相反电荷的粒子为什么不会使胶粒聚沉 流体力学 低雷诺数时阻力一垂直悬臂的尾部刚进水,进水的体绩大概是 1mm X 25mm X5mm当悬臂开始被摇动(从上),请问水对悬臂的阻怎麼算?大概在 10Hz pk-pk 8mm 左右的摇动距离悬臂长250mm悬臂的St 淀粉胶粒带什么电性 电势降低的方向就是电场强度的方向 胶体粒子带电,为什么胶体不带电?难道胶体里还有与胶粒相反的电荷吗? 地质学中的Ma BP是什么意思 急求2010年全国生物竞赛联赛试卷答案!注意是2010年5月9日考的全国生物联赛是浙江赛区的! 问原方程有几个根和问原方程有几个解一样吗?说明原因,最好举几个个例子如题, m在地质单位中是什么意思?比如Ma 为什么电场强度的方向就是电势降低的最快方向 信息技术发展历程信息技术有哪些历程 怎么判断胶体中胶粒的带电性? 科技发展对我们的生活带来了哪些负面影响 传递信息的技术是怎样发展的 符号"Ka" 3Q 电话给我们的生活带来了哪些危害,哪些方便 流体力学关于纳威斯托克斯方程(NS方程).图中,哈密顿算子为什么有的正常写,有的写在式子底部.如上图圈出的. 符号"Ka" 在地质中代表什么意思 ?FGH 为什么胶体粒子可以带电荷,但整个胶体呈电中性? 流体力学中,连续方程适用条件… 电器符号PA,PJ,KA, 电势降低的方向,一定是电场强度的方向吗?请举出反例 还可以告诉我发生什么样的反应吗?如果可以,请写一下表达式, ka电气图符号代表什么? 全国生物学奥林匹克竞赛省赛区一等奖与广东省生物学联赛一等奖有区别吗? 怎么写,要用方程, 为何多云时,气温比晴天低大气辐射和散射 电场强度的方向一定是电势降低的方向.为什么? 方程怎么解,如果不对请告诉我怎么写 KA和KU是什么电器符号? 全国高中生物学联赛与高中生物奥林匹克竞赛的说明?有什么奖?加多少分?一个省多少人获得名次?其他学科呢? 1.简述信息技术发展对企业组织的影响. 胶体中胶粒带电荷的正负由什么决定?麻烦详解 检验报告的有效期是多久请问304不锈钢管的检验报告有效期为多久?施工单位报上来的是2003年的,是否能用?还有就是钢管进场后是否要做复试?是做栏杆扶手用的 ;我找过了,报告上没标明有效 国内外信息技术在物流企业发展中的作用的研究现状 红外光谱图求分析里面含有 无水乙醇(少) 正硅酸乙酯 聚乙烯吡咯烷酮 十二胺 经过同学帮忙 -NH伸缩振动 3500cm-1CO双键吸收峰 1700cm-1左右C-O伸缩振动 N-H变形振动 1000~1250cm-1同学告诉我有这 一项工程,原计划8天完成,实际每天工作效率提高20%,几天可以完成?【方程解】 高中化学竞赛的物理化学部分基础很薄弱要看什么书?物化基础很薄弱,如果想快些提高要看什么书?南大傅献彩的物理化学如何?我看很多物化的书都有看不懂的数学符号,那如果涉及高数要怎 谁能帮忙分析下这个红外光谱图?这是一种胶黏剂在250°C硅油锅加热分离剩下的橙黄色橡胶状固体,应该是某种橡胶,帮忙分析下各种峰对应的基团,推测下是什么物质,
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘