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

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

编辑:说三道四文库 发布时间:2017-08-23 12:42
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
大数据应用(下):应用驱动技术,DaaS创造价值 大数据研究与发展专题论坛:大数据在各领域中的应用及发展策略 雅虎新目标:欲收购照片分享网站Imgur 移动开发工具访谈《近匠》第01期:七牛云存储—BaaS进化论 ShareSDK:A轮融资到位!将推社会化评论SDK 70美元,你也能用Raspberry Pi做个专属iBeacon基站 7个鲜为人知却超实用的PHP函数 从管理远程式团队和分布式团队中所获得的宝贵经验 Netflix开源数据流管理器Suro Google新创意:天花板加麦克风 人脑植芯片 苹果获弯曲屏新专利 可给手机弄个大波浪卷 真正的跨平台硬件测试:3DMark已打通PC、iOS、Android 将Chrome浏览器变成终端工具 【开源推荐】AllJoyn:打造全球物联网的通用开源框架 21张图带你走进Google数据中心 Snapchat C轮融资5000万美元 投资方是Coatue Management 又一个被谷歌寄生的平台,Chrome应用启动器现来到OS X上 雷军遇上刘德华:创业、艺术、移动互联网 为了抗衡Android,传微软开始考虑WP和WinRT免费 维护代码库的五个精华实践 微软发布安全补丁 IE11.0.2随之而来 Qt 5.2正式版发布 全面支持移动平台 如何节约手游制作成本?揭秘CocoStudio编辑器强悍功能 市场竞争白热化:三大云服务商上演双十二“三国杀” UCloud联手盛科实现SDN硬件应用 AWS,还有多远? Instagram推新私信功能Direct:支持照片、视频和文本信息 微软CEO鲍尔默最后一次受访:我的正确决定远远大于过错 中国创新碰撞硅谷思潮, 2013云世界大会定义云时代 Mozilla与设备商、运营商成立开放Web设备联盟 研发周报:暴露程序员身份的8个行为 大哥大姐们!小弟碰见了感情问题,大家帮帮小弟好吗,郁闷中……痛苦中……这里真的有一种家的温馨,所以小弟畅谈心扉,望大哥大姐帮忙! vc6的mfc里有CUIntArray、CStringArray,为什么没有CFloatArray,自己写怎样实现? 请问fastreport破解版哪里有下载? 这是我作的jsp和bean作的程序为什么不能运行:这一次发的是运行错误的信息。 谁敢拍着自己胸口摸着良心说没有用过马甲的 麻烦了:) 如何建立一个button清空文本框? 关于在RedHat2.1As上安装Oracle9i(9.0.1)的错误问题,帮帮我吧,火烧眉毛了! 急等答案 ,请问数据库中 的Null和零值有什么区别,请给详细解释一下 用FLASHGET无法下载. 趁着各位斑竹到任,赶紧把几个悬而未决的问题提出来,呵呵! com+的调用方式 哪位大侠知道今年计算机等级考试二级C语言还是用Turbo C2。0吗?还是在Dos环境下吗?(100相赠) 关于多媒体定时器的问题,各位进来看看 session出的问题,高手请进来!! 请问,大连雅奇培训如何?请指点。。。。。。 怎样用header()做下载文件? 关于检测组合键的程序怎样写? 菜鸟问题!!!页面显示后台数据 请问软件包LEDA -- library of the data types and algorithms 哪里有下载的? 如何获得当前页面中的所有Textbox控件集合? 如何对两个表操作???谢谢! java的程序在写Dreamweaver 4里写完不可以直接用,是不是 打印的问题 DELPHI5的资源编辑器用起来很不爽,有没有好点的? 帮帮忙~~~~ 请问软件包LEDA 哪里有下载的?谢谢 ado连接远程数据库是以文件共享方式,还是c/s方式啊? 有没有工作的JAVA程序员吗? 简单的语法问题 vb还是不太会用 求教 最菜的问题 如何保存无法保存的网页? 只要每人献出一点爱,人人都能成为程序员 呵呵,又有问题了 苦恼,大家帮忙啊 关于声音处理的一个问题 求英文资料,急!!! 帮忙解释一下程序,谢谢:) 怎样实现这样的存储过程?高手快来! 用过websnap的进来看一下,巨简单! 调试版本与发布版本的区别? 急等答案, sql的基本表是用一个存储文件表示还是用若干个存储文件表示 我的Windows 2000有时无法关机(重起) ********通过编号找名称!*******求最快的方法!!! 格式化硬盘后安装WIN98过程中为什么出现蓝屏,继续安装下去连软件都安装不了? 请教一个让人郁闷的问题! 寻找一本人民邮电出版社出版的有关 GSM 网络优化的书 请问高手:能不能动态creatLayer? select * ????? 问候大家 晚上好 ,有个问题请教,立即给50分! 怎样使模式对话框最大化显示? 调谐电路的可变电容器的动片完全旋入到完全旋出仍接收不到 某一频率电台 发出的信号?那么采用什么办法能接收到 该信号? 隋朝末年长安守将是谁?隋朝末年,群雄并起,在太原李渊起兵攻打长安之时,当时的长安留守是谁,有知道的没? 【急』十字绣,怎么把六股线拆成4股十字绣一根粗线里有六股,但需要用四股线,怎么分呢?分开了,如果很散,怎样拧成一大股? R.E.S.U.N组成一个单词 隋朝都城到底是在大兴还是长安?怎么说法不同呢? 已知集合A={x|-2 e s a q u r能组成什么单词 隋朝人说都城时是长安还是大兴城 集合A={y|y=-x^2+4,x∈N.y∈N}的真子集的个数为( ).A.9 B.8 C.7 D.6 检查装置的气密性时,为什么要用手握紧试管? 行业分类中仪器仪表属于第几类 隋朝的长安和洛阳分别是什么时期营建的都城 氯酸钾自分解为放热反应,那么为什么制氧气要催化剂还要加热 仪器仪表及文化办公用机械制造业属于高新技术产业吗 你们经常用哪个动物的表情看看哪个好看好笑的 属于哺乳动物,但要靠生蛋来繁殖后代的是 组成无机自然界最多的元素是什么 青蛙的益处 [脑筋急转弯]既是哺乳动物,又要靠生蛋来繁殖后代...这是什么?既是哺乳动物,又要靠生蛋来繁殖后代...脑筋急转弯! 人体内含量最多的无机元素是? 求一篇有关养宠物的好处的英文对话,急! 检验气密性为什么要握住试管? 这是什么表情动物 养宠物好处英文 ,一些中文词语我在学习毛邓三,经常会出“如何正确认识……的意义”和“如何正确理解……意义”.这两个一样吗?还有如果回答简答题是不是写上该问题意义的答案就行了.语文理解能力不 这个是什么动物的表情 成都离最近大海有多远 我的话题很简单,就是一个词“家庭”. 鸟窝有什么好处?鸟窝有什么好处呢?以前好早好早,还是我小时候的时候,好像听说,吃鸟吐出来的唾沫有好处?还是什么?鸟用唾沫编制成的鸟窝到底有什么好处阿. 小行星最近离我们的地球有多远?有意者都给我一个答案我吧? 黑洞是怎样产生的? 先天性行为和非条件反射有何区别? 一个人面对另一个人时都会看着对方的脸,因为人类能够读懂面部表情.但是你发现没有,当动物面对你时,也是看着你的面部,即使是个体比人小得多的猫,当它面对你时也绝不会盯着你的脚看.难 氧气有毒吗 非条件反射和先天性行为哪个含义更加广泛?或者说这两个概念含义根本就是相同的?非条件反射是人生来就有的、遗传决定的,比较低级、简单的神经调节方式;先天性行为是动物的一种本能, 求许多动物做同一动作的表情 比如 兔斯基 嘻哈猴这类的都做一个表情 比如揉脸、鼓掌啥的 有的发804931395@com最好要动态的哇 2L 搜的到还找你呀 氧(O2)有毒吗? 一个小孩用10N的力踢了石块,石块滑行1M,则小孩对石块做功多少?答案写位移不知无法计算 光子到底有没有质量 氧中毒:氧气有毒吗? 非条件反射是不是先天的啊对相关的知识也要说一下又要具体 某人站在高楼的平台边缘,以 20m /s的速度竖直向上抛出一石子,求抛出后石子经过离抛出点 15m 处所需要的时间.(g= 10m /s2). 请问氧气有毒吗? 十字绣的法兰西节怎么打? 胎生的是哺乳动物,那下蛋的叫什么动物像老虎,狗,猫喂奶的叫哺乳动物,那鸡,鸭这些下蛋的叫什么动物啊? 《地震中的父与子》一文中,父亲创造了什么奇迹? 既属于哺乳动物,又要靠生蛋来繁殖后代的是: 谁能告诉我有关简单的细菌与霉的知识细菌的认识和什么是霉 自然界金属元素分布请给出详细回答 r、s、e、n、u组成什么单词 为啥子有的哺乳动物会下蛋? 有什么动物不生蛋又不是哺乳动物? p u s e r 组成什么单词 细菌靠生物而活那么什么靠细菌活? 用实物来形容下300克大概有多重? 隋朝时长安属于什么省份的?隋朝时长安属于哪个省份的? 为什么有的哺乳动物会下蛋?不许抄袭答案 高二一道物理 哪种哺乳动物是通过生蛋来繁衍后代? 十字绣4股线应该折几折? 杭州一处小区五只大老鼠钻进配电箱致停《一个中国人的一生》:走红法国的中国外媒:拘泥于过去的中印将错失机会菲律宾村庄选举异常血腥 已致22名候日本“老爸地位指数”预测经济走势联大连续22年通过决议要求美国解除对朴槿惠为韩国职棒开球 因穿日本品牌球波兰曝光美国驻华沙使馆内的窃听设备(美国家安全局局长否认针对欧洲盟友“窃欧盟官员要求美国加强隐私保护以重建互美国得州一男子五地疯狂射杀 致其母在奥巴马考虑停止窃听盟国领导人日媒称安倍秀强硬让中日问题难解决 损钓鱼岛问题成安倍实现外交和安保战略工中方敦促日本说明扩军真实意图美国会将彻查全部监视项目利武装人员劫走5000万美元美智库报告称朝鲜为发射大型导弹扩建卫朝鲜搭建新导弹发射平台叙利亚公布41处化武设施菲律宾村庄选举异常血腥 已致22名候支持插卡播放 奋达A521_你没有体全凭“十”力 七彩虹GeForce 迎GTX1080 影驰GTX 980实惠显卡不用等 市售热门千元显卡推荐耕升GTX950关羽_实惠显卡不用等七彩虹iGame950_实惠显卡不用昂达GTX950神盾_实惠显卡不用等映众GTX950冰龙版_实惠显卡不用影驰GTX950 GAMER_实惠显分析直流电机调速细节问题?迪兰R9 370X酷能_实惠显卡不用蓝宝石R9 370_实惠显卡不用等 CES Asia 2016:看见智能CES Asia 2016:雷哈科技CES Asia 2016:宏天数码CES Asia 2016:幻宇科技大屏液晶统治市场已无悬念 明星机推荐三星 S27E510C_大屏液晶统治明基 EW2775ZH_大屏液晶统治苹果4S官方回收价感人,中国厂商表示AOC I2781F/BW_大屏液晶
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘