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

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

编辑:说三道四文库 发布时间:2017-10-18 10:08
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
以史为镜,剖析PaaS大迷局 “心脏出血”还不够?又曝OAuth和OpenID登录漏洞 走近讲师:搜狐于顺治讲述搜狐PaaS云平台实践之路 AppFlood 2014 Q1报告:亚洲和中东市场成为开发者出海首选 华为联合运营商构建能力开放平台 Facebook产品设计主管:揭秘公司如何招聘优秀设计师 【附信息图】美国因软件缺陷导致的十大事件 二十一世纪Windows简史 为什么用户体验和生态系统决定云公司的成败 三星Tizen,路漫漫其修远兮 用户体验是新优势,互联网会受到何种影响? 从GitHub看编程语言流行度 陈沙克:Openstack Horizon Icehouse Blueprint简介 叶琪:Hadoop不是万能的 要明确场景扬长避短 云网融合驱动数据中心技术聚变 给想持续编码CEO的4个建议 盘点开发者最喜爱的十大开源Xcode插件 Cloudera CTO:取代MapReduce 未来会加大Spark等框架投入 中航信资深分析师李洋:自主搭建云平台 助力民航业低成本迎接大数据挑战 安全狗创始人陈奋:借助Hadoop与Spark,欲打造服务器上的360 业界良心:Square开源Viewfinder,25万行代码全公布! 比尔&#183;盖茨:核心业务Bing虽不赚钱,却不能拆分 不可错过,参加第六届中国云计算大会的十大理由 章津楠:未来三年,OpenStack将成为企业去V首选 EMC收购闪存初创公司DSSD,走出联合储存战略第一步 创业失败的七个原因及解决之道 集结号:最受开发者欢迎的跨平台游戏引擎 Cocos2d-x v3.0正式版本发布!优化C++、Lua、JavaScript接口 定价99元首发1万台 360安全路由器启动预约 AMD新产品线曝光 首次实现X86与ARM针脚融合 IT界最难以替代的9个角色 散分! 我的ASP。NET的应用程序的控件显示问题! 紧急求就`~ 哪里有delphi6,5等等自带的报表控件下载呢? 关于while 循环的问题! 问:网站后台怎么实现这样的管理? 我终于找到了可以赚钱的网战 字符型的id 三国群英传3怎么这么多bug呀!!玩一会,就不能玩了!!!怎么会事??? 哪位高手,请帮忙,我的硬盘不行了,有什么办法吗? 引导制约参数是什么? 菜鸟问题!请教数据输出格式! 如何做到在datagrid中对数据的修改不直接影响到数据库 Duwamish中一个看不懂的句子,请大家指教 如何让网页适应不同尺寸的显示器? 再问一个有关电脑上发传真的问题 DataGrid删除,对话框问题 怎么检查当前的XML文件是否服合相应的DTD标准? 问题代码,请指出 progressBar 怎么使用? 在linux下调试时,session出了问题!急!在线等待! 数据窗口里有一个子数据窗口,初始时,如何使子数据窗口选择某一行 线程传递消息有时出现乱码 如何随机生成6位密码,但不能有重复 如何在邮件的信头立加入自己喜欢的图片??谢谢 请问:为什么可以给一般对话框上的按钮添加位图,在CDialogBar上却不行?如何在CDialogBar上的按钮上显示位图?谢谢回复。 救命!在线等!再发。 怎末实现 统计图片的点击率??? 在线等待,解决即给分!!! 求助!连接数据库问题? VC.NET和VC6.0的语法差别大吗? 图像处理和计算机视觉方面有什么牛公司嘛? 高分求服务器c#向客户端javascript传递数据的各种不同方法!!! 用过C196开发196KC/KB的请进,谢谢 我用MFC编写了一个ActiveX控件,如何实现安全接口? 如何实现 XP 中目录窗口左边那种菜单 有关界面设计的两个问题? drawString时怎样规定一个区域,在这个区域内的文字显示,超出的不显示 急!在线等!Excel文件导入的问题。找不到可安装的ISAM 结识搞PHP的朋友 关于cell组件 郁闷当中,谁能给个用vb做DLL然后在DLL中增加数据库记录,在asp调用的例子。 singleton模式实现的问题 100分 谁讲一下定点数和浮点数的区别 急急急.请各位大虾帮帮忙啊! 請問語句的意思,謝謝 (Oracle8i)以SYSMAN登录控制台 斑竹9我! 求教高手!!!TEXTBOX与DATAGRID的问题 求助!关于用74LS181模拟8位机的资料!(散分啦,小弟急用啊!) 我的WINDOWS2003的DIRECTX 3D功能用不了,为什么? 如何用命令来修改设置计算机的ip,网关和dns等内容 不知道到那里问,借个人气了 二踢脚 直径求普通规格二踢脚直径 家门口不能种桑树?有这样的说法吗? Cu2O加热会有什么现象 树的年轮 二踢脚原理 Fe2(SO4)3怎么念?RT有硫酸亚铁吗 - - 世界上最轻的哺乳动物? 硝酸钾能烘干吗? 为什么在外面吃的凉皮都是黄色的,自己做是白色的?有网友说凉皮用摊煎饼的方式摊的?传统凉皮不是蒸的吗 世界上最大的哺乳动物是…?它大约有多重?说下我很想知道它有多重 雁门太守行中,黑云压城城欲摧,这句诗好在哪里? 为什么在海边捡的贝壳有些上面有像是人工打的小洞 最轻的哺乳动物是什么 “黑云压城城欲摧……”的整首诗是什么? 怎么在贝壳上面打小洞?在海边捡了很多贝壳,想做一串风铃,如何穿孔?就是不用到很复杂的设备,简单工具就能做到的,请指教, 确定物体位置的方法 4m ftth的上行速度是多少?求教ftth是光缆入户. 这些是什么,在海边捡到的(不像是贝壳,中间没有洞) 诗句补充 日出江花红胜火,下句? 对于FTTH光纤熔接机,使用者最在意的是什么性能,低损耗?小体积?价格?希望大家各抒己见. 在海边收集的贝壳怎么用绳子串起来(怎么在贝壳上开个小洞)? 我们可以用什么的方法确定某一物体的位置 _to the English-speaking environment helps..______to the English——speaking environment helps to improve your English much faster.A.Being exposed B.exposed 为什么选A.. 把四根长度为80厘米的纸条接成一个圈,连接部分的长度为5厘米,这个圈的长度为多少 怎样确定一个物体的位置 日出江花红胜火全诗 ( )The best way to learn English is_____you____in an English-speaking environment.A.let;live B.to let;to live C.letting;living D.to let;live 中国历史上的忠心文臣武将事迹或名言 举出两个人 列举两个像诸葛亮那样忠心报国的文臣武将的名人,并写出他们留下来的名言或事迹! 高数,变上限函数中的x什么时候看做常量什么时候看做变量,什么时候可以提出积分号外 32的意思在计算机中代表什么?system32 WIN32 fat32 nod32 还有一大堆,忘了能在全面点吗?比如 SYSTEM 和SYSTEM32 有什么区别?64位操作系统就是SYSTEM64了?位数是什么? 计算机中的-1,在16位机器上为什么是1000000000000001?而在32位机器上为32个1,这是怎么定义的呢?刚在CSDN上看到关于-1的上面说法, 哪位高手可以帮忙对函数costx/(λ^2+x^2 )进行x的(—∞,+∞)积分?谢过!(其中λ、t为常量) 听说32位操作系统,64位操作系统,又貌似这个位数跟CPU有关.跟什么有关系 家用水泵生锈不转了,怎么办?有一段时间没有用水泵了,现在用只有“翁”的声音,水上不来 同样的物体摩擦能否起电 二踢脚用的是什么火药 像诸葛亮这样忠心报国的文臣武将有哪些? 导体易导电的原因:导体内部有大量的( )金属导电靠的是( )酸碱盐水溶液导电靠的是( )绝缘体不导体易导电的原因:导体内部有大量的( )金属导电靠的是( )酸碱盐水溶液导电 你属二踢脚的, 水在室温时,从液态变固态为什么是自发的呀? 请问金属导电的原理和绝缘体不导电的原理请问金属导电的原理(围绕“自由电子”来说);绝缘体不导电的原理 女生提示数字32是什么意思?..互相喜欢! 春节期间燃放双响炮,如图所示,把双响炮用橡皮条系在一根竖直插在地里的竹竿上,悬在半空中,点燃后,双响炮“砰”一声竖直升上高空,“啪”一响而炸裂.关于双响炮第一响后竖直上升的运 刚刚看到一个新闻,说发现4000光年外的星球?按我的理解:光年是距离,光走一年的距离,世界上最快的速度就是光,那么发现了4000光年外的星球,光都要走4000年,我们怎么发现的?难道说4000年前就 文件名中有32这个数字代表什么意思为什么有些文件夹或者文件的名称带有32这个数字.比如:system32文件夹和regedit32.exe文件,什么是32位操作系统?(不知道是不是这样说)有16位和64位的吗?如果有 水里种蒜 Fe2(SO4)3固体是什么颜色? 身材32,18,数字单位是什么 大蒜为什么用水种 Fe2(SO4)3是什麼颜色? 什么自行车最轻 两者若为自由故,两者皆可抛.上两句是怎样? Fe2(SO4)3 中华儿女报效祖国名言 “若为自由故,两者皆可抛”的前一句是? 关于.磁铁能相斥多久.都知道磁铁同极相斥异极相吸,但同极能相斥多久.就是说如果把同极放到一块,是不是过一年或两年相斥力度就没那么大了.或都根本就没有相斥的力度了..问问老师们.在 三角形的面积是18平方理米,底边长是12厘米,高是多少? ‘‘若为自由故二者皆可抛’’是什么意思? 为什么磁铁相吸和相斥 葛兰素史克在华销售额暴跌六成可口可乐中国第43家厂投产美军一美分卖掉退役航母美官员抹黑总统被炒美军方:因财政扣押明年将裁减最少6架明治奶粉宣布撤出中国大陆市场奶粉进药店多问题待解 本周开始安装售美国肯尼迪家族亲戚杀人案将重审 72朝韩在非军事方面保持合作 朝鲜遣返6明治奶粉放弃中国市场 停售前未跟供应朝鲜表态强化核力量 美韩揣测朝“核冒俄媒:斯诺登面临美政府“天罗地网”杭州推新能源交通 新能源车:年底再推上海大众宁波分公司建成 未来每分钟有国考报名昨结束 湖州邮政一个岗位33浙江推广餐馆厨房阳光化 从洗菜到上菜第二届世界浙商大会明开幕 2000余临安破获特大涉毒涉枪案 缴获整枪43《爸爸,我们去哪儿》:韩国开花中国也财富全球最适宜工作跨国公司排行 谷歌美媒:美军一美分卖掉超级航母 当作废你不敢相信的欧冠大战第16批公车拍卖19日开拍 2000我从哪里来15快来为自己要种的树选个“座位”新快报邀请读者 免费看《上海王》挪用经费买手机壳,折射科研腐败冰山一今年别指望楼市能大跌抄底这样施工安全吗?先来这里体验吧《星光灿烂》开播,范伟演绎中国版“阿谨防地方保护主义 杯葛盐业改革被废职业资格“复活”海口住建局局长被“举牌式”搅局对付职业乞丐新生可申请保留入学资格去创新创业最高人民法院原副院长奚晓明受贿被判无烟台北磁山大火 疑因违法狩猎蒙牛倾情打造全民冰雪季 传递冬日运手握赛点 女篮努把劲Honda举办新年媒体大会为共享单车铺路,关乎城市福祉餐馆老板做自媒体半年获数万粉丝热身赛-杨善平补射破门 天津权健1-
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘