如何使用vb通过outlook收发邮件

   2023-02-09 学习力0
核心提示:制作邮件发送、接收程序 原文地址:http://flydoos.blog.163.com/blog/static/11975604020095220422284/ 你还认识我吗?记得两年前我哥哥小飞侠教我学习VB编程的时候你还是一名旁听生呢。呵呵,我就是小叮当,自从上次和哥哥学习了VB之后就痴迷上了编写


制作邮件发送、接收程序
 原文地址:
http://flydoos.blog.163.com/blog/static/11975604020095220422284/
 你还认识我吗?记得两年前我哥哥小飞侠教我学习VB编程的时候你还是一名旁听生呢。呵呵,我就是小叮当,自从上次和哥哥学习了VB之后就痴迷上了编写程序,凭借着我过人的编程技能和敏捷的思维能力,现在已经在一家大型软件公司担任程序员了。
  最近天气太热,本来准备趁着休假时间在家好好调整一番,没料到表弟小蘑菇也看准了休假时间来这里玩,说是还要我教他VB编程,真是刚出虎穴又入狼窝呀。我这个人心地特善良,经不住他几句甜言蜜语就这么上钩了,好在小蘑菇他以前接触过VB,用不着我再从头讲解一些繁琐的基础知识,所以决定每天花一点时间给他来一个短期提高快捷的实例培训,这样既可以让他学习到VB知识,我也不用太劳累,可以多一些时间休息呢。
  第一天、使用VB收发电子邮件
  小叮当:我说小蘑菇呀,既然你已经学习过VB的基础知识,也做过一些简单的程序,那么我也就不浪费口水教你认识界面、了解控件和学习语法了。不如我来教教你怎么样制作出一些切实可用的程序,这样既能够加深对VB的认识,还可以让你拥有十足的成就感呢!
  小蘑菇:好呀,那做一些什么程序呢?
  小叮当:当然不会像我哥哥当年那样简单至极的程序,而是一些具有实用性的程序,也可以做一个小游戏之类的,你看怎么样?
  小蘑菇:好的,不过今天别教我做游戏,不然明天就没有心思学了。
  小叮当:这个我自然知道,那我们就开始动手制作一个收发电子邮件的程序吧。
  小蘑菇:收发电子邮件?这个会不会很难呢?
  小叮当:正所谓会者不难,难者不会,有我这位名师指点,你还怕什么呢?开始动手吧!
  一、准备工作
  小叮当:在VB中编写电子邮件程序需要通过调用微软公司的MAPI(Messaging Application Programming Interface,消息应用程序编程接口),这需要借助两个实现电子邮件收发功能的核心控件:MAPI会话控件和MAPI消息控件。MAPI会话控件用于建立和控制一个Microsoft Mail会话,MAPI消息控件用于创建和收发邮件消息。此外,Windows系统中必须要有遵从MAPI的邮件系统,比如Exchange、Outlook等软件,而还要进行一番设置,确保邮件系统可以正常使用。
  小蘑菇:呵呵,没关系,我用的就是Outlook,正好符合要求。不过你说的MAPI控件在哪里找呢?
  小叮当:在VB中就有现成的,不过程序没有直接放置在工具箱里,需要我们自己将MAPI控件加入VB工具箱。首先直接在VB左边的控件栏中右击鼠标,并在弹出菜单中选择“部件”命令,这时可以激活部件设置窗口,在其中的“控件”列表框中选取“Microsoft MAPI Controls”一项(如图1所示),接着按下“确定”按钮之后可以发现工具箱中将多出了两个图标,这就是MAPI会话控件和MAPI消息控件的图标(如图2所示)。
图一图二
图一
图二

  二、邮件发送程序
  小叮当:添加好我们所需要的控件之后,就开始定制邮件的发送程序吧。这个邮件发送程序的基本处理过程是:根据用户输入信息组成邮件,然后使用MAPI消息控件的Send方法将邮件发出。具体的方法按照下述步骤完成:
  1、新建一个VB项目,并将缺省窗体Form1的Caption属性设置为“发送邮件”。   2、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessages1。
  3、在Form1中加入三个TextBox控件,将它们的名称属性分别设置为“txtSendTo”、“txtSubject”和“txtMessage”,另外还要将txtMessage的Multiline属性设置为“True”。这三个TextBox控件将分别用于填写邮件的收件人地址、邮件主题和邮件正文。
  4、在Form1中加入三个Label控件,将它们的Caption属性分别设置为“收件人”、“主题”和“内容”,并将它们放在合适的位置用以标注相应的TextBox控件。
  5、在Form1中加入一个Command Button控件,将其Caption属性和名称属性分别设置为“发送”和“Send”。
  所有的控件添加完毕之后应该如图3所示。
图三
图三
  小蘑菇:还挺像这么回事的呢,接着应该填写代码了吧。
  小叮当:是呀,下面就是代码部分的内容:
  1、将下列代码加入Form1的Form_Load事件:
  Private Sub Form_Load()
  MAPISession1.SignOn  /运行程序之后进行邮箱登录操作
  End Sub
  2、将下列代码加入Form1的Form_Unload事件:
  Private Sub Form_Unload(Cancel As Integer)
  MAPISession1.SignOff  /退出程序时候进行退出邮箱操作
  End Sub   3、将下列代码加入cmdSend的Click事件:
  Private Sub cmdSend_Click()
  With MAPIMessages1
  .MsgIndex = -1
  .RecipDisplayName = txtSendTo.Text  /收信人地址
  .MsgSubject = txtSubject.Text    /邮件主题
  .MsgNoteText = txtMessage.Text    /邮件正文
  .SessionID = MAPISession1.SessionID  /发送程序和邮件工具之间建立的任务数
  .Send
  End With
  MsgBox "邮件发送完毕!", , "发送邮件"  /发送成功显示信息框
  End Sub
  这样一个电子邮件发送部分就制作完成了,运行程序之后只要填写好邮件的收件人、主题和内容后,按下“发送”命令按钮,邮件就已经成功地发往目的地了(如图4所示)。图4
图四
  小蘑菇:真的发送出去了,不过这是不是你的障眼法呢?我要收到这封信才相信!
  小叮当:对我还不相信?好吧,下面再制作一个邮件接收程序来收取这封信件。
  三、邮件接收程序
  小叮当:邮件接收程序比邮件发送程序要复杂一些,这个程序首先需要使用MAPI消息控件的Fetch方法读取邮件,这个过程将把用户收件箱中所有未读邮件全部装入MAPI消息控件中。接着,检查MAPI消息控件的MsgCount属性以确定通过Fetch方法读取的邮件的总数,然后可以通过设置MAPI消息控件的MsgIndex属性来指定具体需要处理哪一封邮件。需要说明的是,MsgIndex属性值的计数是从0开始的,也就是说,第一封邮件的索引号是0,第二封邮件的索引号是1,依次类推。具体步骤如下:   1、新建一个VB项目,将缺省窗体Form1的Caption属性设置为“接收邮件”。
  2、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessages1。
  3、在Form1中加入三个Label控件和一个TextBox控件,将三个标签控件的名称属性分别设置为“lblMsgDateReceived”、“lblMsgOrigDisplayName”和“lblMsgSubject”,将TextBox控件的名称属性设置为“txtMsgNoteText”,并将标签控件的Caption属性和文本框控件的Text属性的内容清空。这四个控件将分别用于显示邮件的日期、发件人、主题和内容。
  4、将txtMsgNoteText控件的Locked属性和Multiline属性设置为“True”,ScrollBars属性设置为“2-Vertical”。
  5、在Form1中再加入四个Label控件用于标注上述四个控件,将它们的Caption属性分别设置为“日期”、“发件人”、“主题”和“内容”。
  6、在Form1中加入一个Label控件,将其名称属性设置为“lblMsgCount”,Caption属性设置为“第 0 封邮件,总计 0 封邮件”。这个控件用于显示接收的邮件总数以及当前正在处理第几封邮件。
  7、在Form1中加入三个Command Button控件,将它们的名称属性分别设置为“cmdPrevious”、“cmdNext”和“cmdClose”,Caption属性分别设置为“上一封”、“下一封”和“关闭”。
  小蘑菇:那么具体的程序代码呢?
  小叮当:又着急了不是?我还会骗你吗?下面就是具体的程序代码:
  1、编写一个子程序FetchNewMail:
  Public Sub FetchNewMail()
  MAPIMessages1.FetchUnreadOnly = True
  MAPIMessages1.Fetch  /Fetch命令将信件抓到系统存贮器的inbuffer中
  End Sub
  2、编写一个子程序DisplayMessage:
  Public Sub DisplayMessage()
  lblMsgCount.Caption = "第 " & Ltrim(Str(MAPIMessages1.MsgIndex + 1)) & " 封邮件,总计 " &       Ltrim(Str(MAPIMessages1.MsgCount)) & " 封邮件"    /由MsgCount知道信件数量,再用MsgIndex设置要看                             哪一封信件的内容、标题
  lblMsgDateReceived.Caption = MAPIMessages1.MsgDateReceived  /收取信件的日期
  txtMsgNoteText.Text = MAPIMessages1.MsgNoteText    /收取信件的内容
  lblMsgOrigDisplayName.Caption = MAPIMessages1.MsgOrigDisplayName  /发送邮件的姓名
  lblMsgSubject.Caption = MAPIMessages1.MsgSubject  /邮件主题
  End Sub   3、将下列代码加入Form1的Form_Load事件:
  Private Sub Form_Load()
  MAPISession1.SignOn
  MAPIMessages1.SessionID = MAPISession1.SessionID
  FetchNewMail    /调用Fetch子程序
  DisplayMessage    /调用DisPlayMessage子程序
  End Sub
  4、将下列代码加入cmdPrevious的Click事件:
  Private Sub cmdPrevious()
  If MAPIMessages1.MsgIndex > 0 Then
  MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex - 1  /当收取信件超过1封的时候,通过“上一封”按钮查看前面的信件
  DisplayMessage
  Else
  Beep
  End If
  End Sub
  5、将下列代码加入cmdNext的Click事件:
  Private Sub cmdNext_Click()
  If MAPIMessages1.MsgIndex < MAPIMessages1.MsgCount - 1 Then
  MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex + 1  /当收取信件超过1封的时候,通过“下一封”按钮查看后面的信件
  DisplayMessage
  Else
  Beep
  End If
  End Sub
  6、将下列代码加入cmdClose的Click事件:
  Private Sub cmdClose_Click()
  Unload Me
  End Sub
  程序运行后,在窗体加载过程中,窗体Load事件中的代码会读取新邮件,如果有新邮件,就显示第一个新邮件,如果有多个新邮件,则可以使用“上一封”和“下一封”命令按钮前后翻阅。你再看看,这封收取下来的邮件是不是我们刚才发送出去的?
  小蘑菇:呵呵,真厉害!其实刚才我知道你肯定可以收到这封邮件的,只不过是说着玩的,嘿嘿。我来试着给别人发送一些邮件。
  小叮当:那你就用它给好朋友发送几封邮件,告诉他们是用你自己编写的程序发送的,他们保证大吃一惊呢。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Windows API Reference for C#, VB.NET
    不错的.net 下用API的参考站点地址在:http://www.webtropy.com/articles/Win32-API-DllImport-art9.asp 下面摘抄分类,便于大家直接就拿来用: File, Memory, Process, Threading, Time, Console, and Comm control(kernel32.dll) _hread_hwrite_lclose_lcr
    03-16
  • 一个基于API的VB.net串口通讯类 vbnet串口通信
    VB.net的串口通讯支持总是让人觉得有所不足,在使用VB6的MsComm32.ocx时,很多人都会在VB.net的开发中觉得很困扰。    这里讲述的VB.net串口通讯类使用native代码,并且它是通API调用实现的,你会发现VB.net的串口通讯就是这么简单。    在说明如何使
    02-12
  • [VB][ASP.NET]FileUpload控件「批次上传 / 多档
    FileUpload控件「批次上传 / 多档案同时上传」的范例 (VB语法) http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/14/3986.aspx    FileUpload控件真的简单好用,不使用它来作批次上传,却要改用别的方法,实在不聪明。要用就一次用到底,公开File
    02-10
  • 第八章 VB中ActiveX控件的使用
    轉自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm第八章          VB中ActiveX控件的使用8.1  概述     这里的ActiveX控件是指VB标准工具箱里没有的控件,用时需从“工程”菜单里选择“部件…”(或右键单击工具箱,从快捷菜单中选择“部
    02-10
  • 第二章 VB的界面设计
    轉自:http://wwww.hyit.edu.cn/edu/vb/study/index.htm第二章         VB的界面设计2.1  VB用户界面设计基础1. 概述   界面的设计有两步:先绘制控件,然后确定控件属性。   绘制控件:在工具箱里单击想画的控件,在窗体里按下鼠标并拖曳,然后
    02-10
  • C#/VB.NET 获取Excel中图片所在的行、列坐标位置
    C#/VB.NET 获取Excel中图片所在的行、列坐标位
    本文以C#和vb.net代码示例展示如何来获取Excel工作表中图片的坐标位置。这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列、纵坐标即顶点所在的第几行。下面是获取图片位置的详细方法及步骤。【程序环境】按照如下方法来引
    02-09
  • VB操作XML
    VB操作XML
    XSL(可扩展样式表语言)是对CSS的一种扩展,功能比CSS强大得多。XML链接是在HTML链接的功能之上加以扩展,可以支持更为复杂的链接,通过XML链接,不仅可以在XML文件之间建立链接,还可以建立其他类型数据之间的链接,其规范分为三个部分:XLink语言,XPointe
    02-09
  • VB6多线程,关键段操作 vb6.0 多线程
    Option Explicit Declare Function GetLastError Lib "kernel32" () As Long 'Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 'Declare Sub ExitThread Lib "kernel32" (Optional ByVal dwExitCode
    02-09
  • VB.NET调用IE,并且等待
                Dim p As New Process            '获得URL            aURL = GetURL()            '获得IE路径            p.StartInfo.FileName = System.Environment.GetFolderPath( _ 
    02-09
  • vb的VSFlexGrid控件 vb msflexgrid
    多行选中VSFlexGrid的SelectionMode = flexSelectionListBox,现在可以配合Ctrl进行多行选择循环取值用vsflexgrid.SelectedRows 可以得到你选择的行的总数量然后用循环可以得到具体的行中具体列的内容Dim Temp  As StringDim i As IntegerFor i =
    02-09
点击排行