简介
本次文章介绍使用VB.Net,利用LumiSoft获取Email邮件。计划使用VB.Net写一个能够自动获取Email邮箱所有邮件,逐个邮件读取标题、收件时间、发件人、邮件正文,然后根据设定好的条件进行相应操作。
本以为会比较容易,轻敌乃是兵家大忌,碰到许多意想不到的技术难题:
- 现在的Email光是协议就一大堆:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,貌似最初的POP3协议因为安全性基本淘汰,暂时选定使用IMAP协议;
- .Net本身无相应的库支持IMAP协议,只能在NutGet中寻找免费的库。免费的还真是不好找,最终选择LumiSoft。
- LumiSoft库网上的文章少之又少,而且使用多事C#语言,对于某些语句转换为VB.Net总是报错,更多的则是B转载A的,C转载B的,D转载C的…,不得不赞叹百度的算法!
开始动手
- 因LumiSoft库所依赖的开发环境,经测试不能使用VisualStudio2022,降低至一直使用的VisualStudio2015版本。新建一个Windows窗体应用程序,框架为.Net Framework4.5.2。
- 依次点击“工具”-“NuGet程序包管理器”-“管理解决方案的 NuGet 程序包”:
- 在出现的NuGet管理窗口中输入“lumisoft”,进行搜索,在搜索结果中选择“LumiSoft.Net”,进行安装:
- 安装完毕后,就开始程序界面的设计。这里使用我自己QQ邮箱举例,具体设置百度,或者进入QQ邮箱自行查找,也有较为详细的介绍,这里不在赘述,直接看界面效果:
代码
- 本文只是便于测试和操作,没有研究的太深,够用就行。首先定义一个邮件信息的结构体。
Public Class fm_MailMessage
Public UID As Long'邮件的id,很关键
Public strSubject As String'邮件主题
Public strDate As String'邮件接收日期
Public strFrom As String'发件人
Public strBody As String'邮件正文
End Class
- 利用LumiSoft库接收邮件时,需要使用回调函数,这里我们将邮箱登陆、邮件收取、邮件删除,全部放在一个类中,方便前端调用。
Imports LumiSoft.Net
Imports LumiSoft.Net.IMAP
Imports LumiSoft.Net.IMAP.Client
Public Class csEmail
#Region "内部变量"
Private _m_bolFlag As Boolean
Private _m_errMsg As String
Private _i_MailClient As IMAP_Client
Private _i_isLogin As Boolean
Private _m_strServerURL As String
Private _m_intPort As Integer
Private _m_bolSSL As Boolean
Private _m_strUserName As String
Private _m_strPassword As String
Private _m_listMail As List(Of fm_MailMessage)
#End Region
#Region "属性"
Public Property strServerURL As String
Get
Return _m_strServerURL
End Get
Set(value As String)
_m_strServerURL = value
End Set
End Property
Public Property intPort As Integer
Get
Return _m_intPort
End Get
Set(value As Integer)
_m_intPort = value
End Set
End Property
Public Property bolSSL As Boolean
Get
Return _m_bolSSL
End Get
Set(value As Boolean)
_m_bolSSL = value
End