VB实现邮件的接收 点击:652 | 回复:1



水中鱼 --王者之师

    
发表于:2012-03-12 18:38:03
楼主

         邮件接收程序比邮件发送程序要复杂一些,这个程序首先需要使用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事件中的代码会读取新邮件,如果有新邮件,就显示第一个新邮件,如果有多个新邮件,则可以使用“上一封”和“下一封”命令按钮前后翻阅。你再看看,这封收取下来的邮件是不是我们刚才发送出去的?



楼主最近还看过



水中鱼 --王者之师

  • 精华:43帖
  • 求助:4帖
  • 帖子:324帖 | 3802回
  • 年度积分:0
  • 历史总积分:15038
  • 注册:2011年11月10日
发表于:2012-03-12 20:49:29
1楼

上次写了个发送邮件,这次是接收。        

SSI ļʱ