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

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

编辑:说三道四文库 发布时间:2017-02-23 02:27
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
全栈工程师会是未来的发展趋势吗? 大数据整理:囊括分片、存储方法、扩展等多个方面 物联网 ,下一个云计算市场 一位数据挖掘工程师眼中的“大数据与企业的数据化运营” 揭开“iOS in the Car”的神秘面纱 与Apple对峙:法律途径,并非是我想要 Halfbrick新作市场表现低迷:前作辉煌难续 专访豌豆荚:融资,会给技术团队带来哪些影响? 前端开发必备 40款优秀CSS代码编写工具推荐 新环境下的新体验是互联网硬件火热的根本原因 信息安全救星 ——变形代码产品ShapeShifter AWS启动大规模降价,引领行业降价潮流 Windows 8.1 Update 1最新版的截图再遭曝光 2013年软件领域因缺陷导致的五大事件 专访AMD技术高管 详解Kaveri技术性能及新开发特性 网络的东西南北:从SDN到网络虚拟化 Bug让Chrome浏览器成了窃听器 联想23亿美元收购IBM X86服务器硬件及服务 Mozilla联手富士康推出Firefox OS平板 基于Web提供服务 GitHub中国游记最终回——开源与车库的碰撞 学以致用,光棍极客通过大数据搞定女朋友 1月24日:Mac步入了而立之年,生日快乐! 微软2014财年Q2财报:Surface营收翻倍 趣文:假如编程语言在一起聚餐 AOL收购个性化服务公司Gravit,耗资9070万美元 谷歌三月将办Pwnium 4黑客大赛 奖金高达271.828万美元 研发周报:精简代码,为网站减负的十大建议 教育自由日:让教育资源更开放 Win8.1下解决IE11浏览器不兼容的方法 移动周报:找你妹版权战、访俄民手游、GitHub游记终回 一周消息树:1月23日全国顶级域名根服务器疑遭黑客攻击 影响巨大 存储过程的问题 有关报表问题,绝对简单,但是我不会? 在程序中如何使用tabel.filter语法来过滤不同类型的数据???小菜虫我是有分必加 怪事!CString类怎么了? 如何去掉记录中的怪字符? 困惑初学者的难题:如何在VC7.0中编译调试运行小程序?哪位大哥能说清楚高分送上!帮帮我们这些在地狱中水深火热的难兄。。,谢谢。。。 急死我了!!用Table连接时总要密码,那位大哥能帮帮我!!! 如何用SQL Plus查看Oracle中表间关联? CWnd中的声明空成员函数OnSize究竟有何作用? 有谁知道关于电子版的windows api相关的书下载的网址呀。我在线等呀。 怎样用网卡对接电脑 抗议!IE是否自动为收藏夹做过备份? 如何通过NDIS编程取得以太网地址 今晚有多少人通宵? socket客户端能发,不能收是怎么回事? FDISK不能用了吗?真是奇怪呀?谁能帮我啊!!! 想通过sql语句找出这样重复的记录?如何写这个语句? 如何在delphi中显示和编辑sql server中超过256字节的字段 《程序员》的合定本有卖了吗? 最近我防问了一个黑客网站。一下中啦。桌面没有图标我看完啦。有没有高人帮我一下啊。 现有一个dll转为静态库的问题 请问怎样添加一个从CObject继承而来的新类啊? 如何在VB中用Outlook发电子邮件??? 妈呀,上午54,下午33,有戏吗?我完了。 请教:通过VB+ADO访问SQL Server 7数据不能更新记录? 低分低级问题 简单问题,送分喽!!文件调用问题!!! 如何定义IOCTL代码: 谁能推荐一本有关网络与通信的入门书? 看官们注意HttpURLConnection!!! 如何获得Edit控件中当前输入的是第几个字符? 大家是如何调试WDM程序的 在游标中如何更新数据表的当前行 哪里有内幕新闻看? 怎么突然不能解析了,不只是什么原因,昨天我的asp.net都配好了,今天.aspx怎么又不能解释了? 好奇怪!为何不执行Page_Load()函数? 简单问题:关于一个控件,50个大洋。 广州的科友听过没有?听说是搞网络安全的,挺牛B的。全是C,unix高手。。。 如何使用vbs,javas,修改注册表??? 睡不着觉的快来数绵羊啊——什么?你要数星星呀?那也行啊;-p 我只使用了一个MScomctLib里面的listview,我不想把整个dll包进去,怎么办?。。。 谁知道Microsoft的CAB文件用什么工具可以解开? 我对ADO访问MDB比较菜. 这是我的做的练习请大家帮我看一看 有关针对特定人的邮件用特殊格式显示的可行性探讨 SQL SERVER中的怪问题 几年下来,我们一直用着英文版的VC,不知道VS.NET中有没有中文版的VC? 还没有睡觉的兄弟过来帮我看看这段代码,为什么有错?? ADO最新版哪儿有下载啊? 捆饶很久的问题!!! 急,明天就要交程序了,请问怎么才能知道产生的异常的名称,并拦截? 上午56、下午68,散分先 如何离开月亮去地球呢? 开春这一文章表达了作者什么样的思想感情?急15点前好的加分 直流电机与交流电机的工作原理? 月亮离开地球后,地球会变成怎么样? 《开春》表达了作者怎样的思想感情 直流电机以励磁方式分类的各种直流电机的应用方面有何不同``` 随着增塑剂量的变化PVC的哪些力学性能会有怎样的变化趋势?除了拉伸强度和断裂伸长率会有变化外,其他性能哪些会随着增塑剂量的增加有哪些变化?为什么?是检测医用输液管PVC的指标的变化 《开春》 《开春》表达了作者怎样的思想感情? 月球正在远离地球为什么啊,要是月球没了,我们不热死?地球会不会毁灭,好怕啊 功率2200W,电压380V或功率2200W,电压220V用电量会是一样吗? 《老家》阅读题答案 1文章叙诉了哪些问题 2抒发对故乡感情的一句话是 3作者的情感 直流电机的工作原理 用图做说明 220V和380V的功率计算方式 短文第一次表达了怎么样的思想感情 钠的熔点和沸点是多少 水有思想感情?后面为什么要加一个问号 哪些农药可以溶解在水中? 《野鸭》表达了作者什么样的思想感情?好的话,我会补充分数 玻璃在高温融化后怎样将粘度降低!还有就是什么物质可以吸收或者中和玻璃 农药被分解后会有害么? 闻一多《一句话》表达了作者什么样的思想感情 玻璃是怎样融化的要怎样才能始玻璃融化 需要什么皿器?或温度多少? 常用农药有哪些?它们如何分解而无害? 一句话中 咱们的中国!这句话 表达了作者怎样的思想感情 玻璃的融化的温度是多少?用什么可以融化的快? 臭氧能否分解农药 阅读题 飘香的生命 表达了作者怎样的思想感情和主要内容?泪求~ 什么玻璃最容易融化?大概在多少度~融化后透明度高的 用什么溶液溶解农药用壳聚糖 月亮距离地球多远?这不是开玩笑. 地球到月球要多久 直流电动机靠什么来控制转速?家庭电路50HZ,那好像只能是50R/S啊. 密糖的沸点 月球过多久就会离开地球 直流电动机的转速与什么有关? 葡萄糖的沸点怎样? 比喻关系或感情融洽的成语:水()()()谁教教我啊在线等 直流电动机的转速与啥有关 在水中放糖会影响沸点吗? 比喻意气相投,感情融洽用一个水开头的成语叫什么?快!急用! 直流电动机转速太慢怎么搞? 在水中加糖,沸点怎样变化? 比喻关系非常融洽或结合得十分紧密叫"水( )( )( )" 直流电动机稳定运行时,其电枢电流和转速取决于哪些因素? 直流电机和交流电机工作原理有哪些区别语言通俗一点谢谢 比喻事情或意见的融洽叫 水什么什么 语文阅读理解中某个人物形象的作用例如:某个人(并不是要主要说明的人物或景)在文中有什么作用不要复制那些长篇大论. 地球与月球距离多远 有哪些开头是水的成语比喻关系融洽的急! 语文阅读题里,什么叫“表明作者的什么情感”文章是小说,小说段落表明是说,作者对哪个人物的喜爱或者厌恶,还是借人物来表现什么什么的道理呢?阅读无力了突然... 月球距离地球的距离?发生日全食和日环食的概念上说 是由于月球距离地球的远近而挡住太阳得多少来定义,但是月球不是在围绕地球在一个圆形轨道上转吗?半径是一定的,为什么会有远近呢? 如何算出月球每年离开地球3.8厘米? 求初中生做语文阅读题的诀窍.改如何解答.比如像某人的思想感情之类的 关于《记承天寺夜游》的阅读题文章:元丰六年十月十二日,夜,解衣欲睡,月色入户,欣然起行.念无与乐者,遂至承天寺,寻张怀民.怀民亦未寝,相与步于中庭.庭下如积水空明,水中藻荇交横,盖竹 高鼎 《村居》这首诗描写了作者怎样的生活情景?这首诗表达了诗人怎样的思想感情?急 直流电机的转速和功率有什么关系?怎么换 人物赏析怎么写 古诗《村居》作者高鼎是哪个朝代的人?《所见》的作者袁枚呢? 磁场强度与直流电机的转速有什么关系? 如何在做领悟不了思想感情或表达意思的语文阅读题时,保证阅读题不会丢太多的分.求初中阅读题题型(全面点)和阅读题的解题技巧,还有,文言文和古诗这类阅读题,较难,麻烦全面的说说该如
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn