vb.net如何收邮件 vbs发送邮件带附件

怎样用vb编写电子邮件收发

VB:收发电子邮件

成都创新互联公司是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,微信小程序,十年建站对纸箱等多个行业,拥有丰富设计经验。

发送和接收电子邮件,对于某些执行特殊任务的应用程序而言,是一个十分有用的功能。例如,一个监视网络服务器资源使用情况的工具软件,如果它具有自动发送电子邮件的功能,那么当它发现服务器的资源使用已经接近事先设定的临界状态时,便可以向系统管理员发送一封告警的电子邮件,从而使系统管理员能够及时地采取措施,以避免重大事故的出现。在Visual Basic中,应用程序可以通过调用微软公司的MAPI(Messaging Application Programming Interface,消息应用程序编程接口),实现收发电子邮件的功能。笔者将在本文中结合简单实例,向大家介绍在VB程序中实现电子邮件收发功能的编程方法。

编制具有收发电子邮件功能的VB程序,必须使用Visual Basic 4.0以上的版本,因为只有4.0以上的Visual Basic才带有两个实现电子邮件收发功能的核心控件:MAPI会话控件和MAPI消息控件。MAPI会话控件用于建立和控制一个Microsoft Mail会话,MAPI消息控件用于创建和收发邮件消息。此外,程序必须运行在采用遵从MAPI的消息系统(如:Microsoft Exchange、Microsoft Mail、Outlook等)的环境中。

在开始编程之前,首先需要将MAPI控件加入VB工具箱。具体操作是:在VB菜单栏中选择Tools菜单项中的Custom Controls命令,调出"Custom Controls"对话框,在其中的"Available Controls"列表框中选中"Microsoft MAPI Controls"表项,然后按"OK"命令按钮退出该对话框。此后,工具箱中将新添两个图标,这就是MAPI会话控件和MAPI消息控件的图标。

下面,笔者将以两个简单的VB程序为例,分别介绍发送邮件和接收邮件的程序编制方法。

邮件发送程序

邮件发送程序的基本处理过程是:根据用户输入信息组成邮件,然后使用MAPI消息控件的Send方法将邮件发出。编程步骤如下:

1、新建一个VB项目。

2、将缺省窗体Form1的Caption属性设置为"发送邮件"。

3、将MAPI控件加入VB工具框。

4、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessages1。

5、在Form1中加入三个文本框控件,将它们的Name属性分别设置为txtSendTo、txtSubject、txtMessage,并将txtMessage的Multiline属性设置为True。这三个文本框控件将分别用于填写邮件的收件人、主题和内容。

6、在Form1中加入三个标签控件,将它们的Caption属性分别设置为"收件人"、"主题"和"内容",并将它们放在合适的位置用以标注相应的文本框控件。

7、在Form1中加入一个命令按钮控件,将其Caption属性和Name属性分别设置为"发送"和"cmdSend"。

8、将下列代码加入Form1的Form_Load事件:

Private Sub Form_Load()

MAPISession1.SignOn

End Sub

9、将下列代码加入Form1的Form_Unload事件:

Private Sub Form_Unload(Cancel As Integer)

MAPISession1.SignOff

End Sub

10、将下列代码加入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

在填写完邮件的收件人、主题和内容后,按"发送"命令按钮,如果没有出现运行时错误提示,那么就表明邮件已经成功地发往目的地了,否则,请检查填写的收件人地址是否准确无误以及系统中运行的消息系统工作是否正常。

邮件接收程序

邮件接收程序比邮件发送程序稍微复杂一些。首先需要使用MAPI消息控件的Fetch方法读取邮件,这个过程将把用户收件箱中所有未读邮件全部装入MAPI消息控件中。然后,检查MAPI消息控件的MsgCount属性以确定通过Fetch方法读取的邮件的总数。接着,可以通过设置MAPI消息控件的MsgIndex属性来指定具体需要处理哪一封邮件。需要说明的是,MsgIndex属性值的计数是从0开始的,也就是说,第一封邮件的索引号是0,第二封邮件的索引号是1,依次类推。编程步骤如下:

1、新建一个VB项目。

2、将缺省窗体Form1的Caption属性设置为"接收邮件"。

3、将MAPI控件加入VB工具框。

4、在Form1中加入一个MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessages1。

5、在Form1中加入三个标签控件和一个文本框控件,将三个标签控件的Name属性分别设置为lblMsgDateReceived、lblMsgOrigDisplayName、lblMsgSubject,将文本框控件的Name属性设置为txtMsgNoteText,并将标签控件的Caption属性和文本框控件的Text属性的内容清空。这四个控件将分别用于显示邮件的日期、发件人、主题和内容。

6、将txtMsgNoteText控件的Locked属性和Multiline属性设置为True,ScrollBars属性设置为2 - Vertical。

7、在Form1中再加入四个标签控件用于标注上述四个控件,将它们的Caption属性分别设置为"日期"、"发件人"、"主题"、"内容"。

8、在Form1中加入一个标签控件,将其Name属性设置为lblMsgCount,Caption属性设置为"第 0 封邮件,总计 0 封邮件"。该控件用于显示接收的邮件总数以及当前正在处理第几封邮件。

9、在Form1中加入三个命令按钮控件,将它们的Name属性分别设置为cmdPrevious、cmdNext、cmdClose,Caption属性分别设置为"上一封"、"下一封"、"关闭"。

10、编写一个窗体级子例程FetchNewMail:

Public Sub FetchNewMail()

MAPIMessages1.FetchUnreadOnly = True

MAPIMessages1.Fetch

End Sub

11、编写一个窗体级子例程DisplayMessage:

Public Sub DisplayMessage()

lblMsgCount.Caption = "第 " _

LTrim(Str(MAPIMessages1.MsgIndex + 1)) " 封邮件,总计 " _

LTrim(Str(MAPIMessages1.MsgCount)) " 封邮件"

lblMsgDateReceived.Caption = MAPIMessages1.MsgDateReceived

txtMsgNoteText.Text = MAPIMessages1.MsgNoteText

lblMsgOrigDisplayName.Caption = MAPIMessages1.MsgOrigDisplayName

lblMsgSubject.Caption = MAPIMessages1.MsgSubject

End Sub

12、将下列代码加入Form1的Form_Load事件:

Private Sub Form_Load()

MAPISession1.SignOn

MAPIMessages1.SessionID = MAPISession1.SessionID

FetchNewMail

DisplayMessage

End Sub

13、将下列代码加入cmdPrevious的Click事件:

Private Sub cmdPrevious_Click()

If MAPIMessages1.MsgIndex 0 Then

MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex - 1

DisplayMessage

Else

Beep

End If

End Sub

14、将下列代码加入cmdNext的Click事件:

Private Sub cmdNext_Click()

If MAPIMessages1.MsgIndex MAPIMessages1.MsgCount - 1 Then

MAPIMessages1.MsgIndex = MAPIMessages1.MsgIndex + 1

DisplayMessage

Else

Beep

End If

End Sub

15、将下列代码加入cmdClose的Click事件:

Private Sub cmdClose_Click()

Unload Me

End Sub

在窗体加载过程中,窗体Load事件中的代码会读取新邮件,如果有新邮件,就显示第一个新邮件。如果有多个新邮件,则可以使用"上一封"和"下一封"命令按钮前后翻阅。

接收邮件

本例是读取用户收件箱中所有未读邮件,如果要读取收件箱中所有的邮件,那么只需在执行Fetch方法之前,将MAPI消息控件的FetchUnreadOnly属性设置为False。具体接收的邮件是否已经读过,可以通过MsgRead属性来判别。如果邮件的正文或附件曾经被浏览过,那么该邮件就会自动标记为已读,不过只浏览邮件的主题不会标记该邮件已读。

邮件附件

与处理邮件的方式一样,MAPI也为邮件的附件提供了一个计数器和一个索引。在处理收到的邮件时,可以通过检查AttachmentCount属性来确定该邮件携带了多少个附件,然后可以通过设置AttachmentIndex属性依次处理每一个附件。

AttachmentIndex的合法取值范围为0至AttachmentIndex-1。在设置了AttachmentIndex属性值后,可以读取附件的下列属性:

AttachmentName:当附件是一个文件时,该属性用于指定文件的名称。当附件是一个OLE对象时,该属性用于指定对象的类型。

AttachmentPath:该属性用于指定做为附件的文件的全路径名。

AttchmentPosition:该属性用于指定附件在邮件内容部分中的位置。当邮件收发程序显示邮件内容时,将使用该属性提供的信息把附件的标志放在合适的位置。

AttachmentType:该属性用于指定附件的类型,其合法取值为三个整数型数值,在VB中分别由下列常量表示:

·mapData-附件是一个数据文件

·mapEOLE-附件是一个嵌入式OLE对象

·mapSOLE-附件是一个静态OLE对象

发送邮件时,上述属性的使用方法与接收邮件时相同,只不过由读操作改为写操作了。值得一提的是AttachmentIndex属性,发送邮件时可以将其设置为任意值。而AttachmentCount属性则会自动设置为正确的值,无需人为设置。

小结

通过分析上述两个程序的代码,可以归纳出具有收发电子邮件功能的VB程序的基本流程如下:

1、使用MAPI会话控件建立一个邮件会话。

2、使用MAPI消息控件进行邮件的处理工作。

3、再次使用MAPI会话控件释放邮件会话。

由于上述两个VB程序只是简单的示例,因而略去了一些与本文主题关系不大的细节,如错误处理等。在编制实用程序时,为了保证程序的可靠性,应该考虑加入这些细节部分。

VB 如何用 jmail 接收邮件

抄个自己的回答:

建议你去看阿江翻译的JMAIL开发文档:

把这几个对象看一下:

POP3。MESSAGES,MESSAGE,ATTS,ATT

过程:

1。先用POP3对象连接邮件服务(当然你邮箱要开POP设置)并接受到MESSAGES

2。取到MESSAGES后,轮循到MESSAGE对象后。

3。对MESSAGE解析,得到邮件标题,内容,收发人,

4。如果有附件还要对ATTS对象轮循并解析(可以把附件存在本地或写链接)

MESSAGES是信件集

MESSAGE是单封信件

ATTS是附件集

ATT是单个附件

————————————————————————

发信分割线

————————————————————————

拿个别人的回答改了一下,俺VB几乎没用过,只会VB。NET

先注册DLL

然后VB代码如下:

Private Sub Command1_Click()

SendMail "标题", "正文"

End Sub

Sub SendMail(Optional ByVal sSubject As String, _

Optional ByVal sBody As String)

Dim jmail

Set jmail = CreateObject("jmail.Message")

jmail.Charset = "gb2312"

jmail.Silent = False

jmail.Priority = 1 '邮件状态,1-5 1为最高

jmail.MailServerUserName = "XXX" 'Email帐号

jmail.MailServerPassWord = "XXX" 'Email密码

jmail.FromName = "XXX" '发信人姓名

jmail.From = "XXX@XXX.XXXX" '发邮件地址地址

jmail.Subject = sSubject '主题

jmail.AddRecipient "XXX@XXX.XXXX" '收信人地址

jmail.body = sBody '信件正文

jmail.Send ("smtp.163.com") 'SMTP服务器,如smtp.sohu.com

Set jmail = Nothing

End Sub

全了。FromName 和FROM 建议都用邮件地址,不然有的邮箱不收的

要一段VB.NET发邮件的代码

'创建发件连接,根据你的发送邮箱的SMTP设置填充

Dim smtp As New System.Net.Mail.SmtpClient("smtp.163.com", 25)

'发件邮箱身份验证,参数分别为 发件邮箱登录名和密码

smtp.Credentials = New System.Net.NetworkCredential("用户名", "密码")

'创建邮件

Dim mail As New System.Net.Mail.MailMessage()

'邮件主题

mail.Subject = "邮件主题"

'主题编码

mail.SubjectEncoding = System.Text.Encoding.GetEncoding("GB2312")

'邮件正文件编码

mail.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312")

'发件人邮箱

mail.From = New System.Net.Mail.MailAddress("example@163.com")

'邮件优先级

mail.Priority = System.Net.Mail.MailPriority.Normal

'HTML格式的邮件,为false则发送纯文本邮箱

mail.IsBodyHtml = True

'邮件内容

mail.Body = "邮件正文内容"

'添加收件人,如果有多个,可以多次添加

mail.To.Add("收件人地址")

'定义附件,参数为附件文件名,包含路径,推荐使用绝对路径

'如果不需要附件,下面三行可以不要

Dim a As New System.Net.Mail.Attachment("附件文件")

'附件文件名,用于收件人收到附件时显示的名称

a.Name = "附件文件名"

'加入附件,可以多次添加

mail.Attachments.Add(a)

'发送邮件

Try

smtp.Send(mail)

MessageBox.Show("发送成功")

Catch

MessageBox.Show("发送失败")

Finally

mail.Dispose()

End Try

vb 如何 接收 邮件??

可以明确告诉你,不用控件是办不到的,不过使用的控件也很简单,只需要

MAPI会话控件MAPISession1和一个MAPI消息控件MAPIMessages1,不用一个小时就可以学会了

vb制作邮箱收信程序

我只有ACCESS的VBA代码供你参考,vba与vb很多代码是可以共用的,你不妨参与研究下:

ACCESS发送邮件代码

access 2009-02-11 16:41 阅读23 评论0 字号: 大大 中中 小小 Private Sub Command1_Click() '发送邮件,依据ACCESS开发答疑200问P226页

'首先,确保已经安装了OutLook,然后在引用中引用Microsoft OutLook对象,在输入以下代码就可实现创建一个新邮件,并添加一个附件到邮件中,然后发送邮件的功能。

'通过引用OutLook.Application对象,Access可以循环OutLook对象里面的所有内容,例如可以读取OutLook里的所有邮件、联系人、约会、日记等信息,还可修改OutLook内置的“规则精灵”

'的内容。

Dim myOlApp As Object

Dim myNamespace As Object

Set myOlApp = CreateObject("OutLook.Application") '创建OutLook应用程序对象

Set myNamespace = myOlApp.getNamespace("MAPI") '获取MAPI命名空间

Set myFolder = myNamespace.getDefaultFolder(6) '获取默认的文件夹

Set myitem = myOlApp.CreateItem(0) '创建新邮件

myitem.Display

Set myRecipient = myitem.Recipients.Add("rcylbx@21cn.com") '为邮件添加收件人

myRecipient.Type = 1

myitem.Subject = "test" '设置邮件主题

MsgBox "ok"

myitem.Attachments.Add ("d:\test.txt") '添加邮件附件,注意确保硬盘下有这个文件

myitem.Save

myitem.Send

MsgBox "ok"

End Sub

Private Sub Command2_Click()

'代码说明:

'本代码可以在安装了outlook(2000以上版本的)的机器上运行。不过outlook xp 以上

'的版本由于出于防止邮件病毒的目的,对发送邮件进行监控,运用本程序每发送一封

'email都需要用户确认,会有点麻烦,但是还是出于安全的角度考虑。

'可以将这段代码嵌入access的模块?excel的宏中运行?

'程序要求:

'需要引用 "microsoft outlook x.x library"

'代码:

Dim olkapp As Outlook.Application '在使用outlook之前必须先声明outlook应用程序的对象,应用程序

Dim newmail As MailItem '在使用outlook之前必须先声明outlook应用程序的对象,邮件项目对象

Dim emailadd, para As String

Set olkapp = CreateObject("outlook.application") '指定outlook应用程序的实体变量

Set newmail = olkapp.CreateItem(olMailItem) '指定邮件项目的实体变量

'邮件正文内容

para = para + "祝新春快乐,并友情提醒注意新的邮件病毒。"

'收件人的email地址,这里没有输入内容。

emailadd = "rcylbx@21cn.com"

With newmail

.To = emailadd '发送邮件地址

.Subject = "新春快乐" ' 邮件的主题

.Importance = olImportanceHigh '邮件的为重要等级

.Body = para '将邮件正文内容指定para变量内容

'.Send '发送

.Display '启动视窗

End With

On Error GoTo continue

SendEmail:

newmail.Display

DoEvents

SendKeys "%s", Wait:=True

DoEvents

AppActivate newmail

GoTo SendEmail '发送不成功誓不罢休

continue:

On Error GoTo 0

Set olkapp = Nothing

Set newmail = Nothing

End Sub

Sub email_send()

Dim olkapp As Outlook.Application

Dim newmail As MailItem

Dim emailadd, para As String

Set olkapp = CreateObject("outlook.application")

Set newmail = olkapp.CreateItem(olMailItem)

'邮件正文内容

para = para + "祝新春快乐,并友情提醒注意新的邮件病毒。"

'收件人的email地址,这里没有输入内容。

emailadd = ""

With newmail

.To = emailadd

.Subject = "新春快乐" ' 邮件的主题

.Importance = olImportanceHigh '邮件的为重要等级

.Body = para '将邮件正文内容指定para变量内容

.Send '发送

End With

End Sub

Private Sub Command3_Click()

'方法一是用代码模拟发送邮件确认 (代码引用论坛前辈的代码)

Dim objOL As Object

Dim itmNewMail As Object

'引用Microsoft Outlook 物件模型

Set objOL = CreateObject("Outlook.Application")

Set itmNewMail = objOL.CreateItem(olMailItem)

With itmNewMail

.Subject = "chijanzen Mail Test" '主旨

.Body = "发送邮件测试2222" '本文

.To = "rcylbx@21cnl.com" '收件者

.Attachments.Add "d:\test.txt", olByValue, 1, "4th Quarter 1996 Results Chart"

.Display '启动视窗

End With

On Error GoTo continue

SendEmail:

AppActivate itmNewMail

DoEvents

SendKeys "%s", Wait:=True

DoEvents

AppActivate itmNewMail

GoTo SendEmail '发送不成功誓不罢休

continue:

On Error GoTo 0

Set objOL = Nothing

Set itmNewMail = Nothing

'再次测试中发现,窗口标题为中文时,AppActivate命令不能执行。将AppActivate命令改为Display方法,可解决此问题,即将AppActivate itmNewMail改为itmNewMail.display。

End Sub

'方法一是用代码模拟发送邮件确认 (代码引用论坛前辈的代码)

Sub SendMail()

Dim objOL As Object

Dim itmNewMail As Object

'引用Microsoft Outlook 物件模型

Set objOL = CreateObject("Outlook.Application")

Set itmNewMail = objOL.CreateItem(olMailItem)

With itmNewMail

.Subject = "chijanzen Mail Test" '主旨

.Body = Application.UserName "发送邮件测试2222" '本文

.To = "171262953@qq.com" '收件者

.Attachments.Add "C:\PDOS.DEF", olByValue, 1, "4th Quarter 1996 Results Chart"

.Display '启动视窗

End With

On Error GoTo continue

SendEmail:

AppActivate itmNewMail

DoEvents

SendKeys "%s", Wait:=True

DoEvents

AppActivate itmNewMail

GoTo SendEmail '发送不成功誓不罢休

continue:

On Error GoTo 0

Set objOL = Nothing

Set itmNewMail = Nothing

End Sub

'再次测试中发现,窗口标题为中文时,AppActivate命令不能执行。将AppActivate命令改为Display方法,可解决此问题,即将AppActivate itmNewMail改为itmNewMail.display。

**************************************

***************************************

Sub Send_Order_Mail()

Dim cnn As ADODB.Connection

Dim rst_cusid, rst_order_list As ADODB.Recordset

Dim olkapp As Outlook.Application

Dim newmail As MailItem

Set olkapp = CreateObject("outlook.application")

Set cnn = New ADODB.Connection

cnn.Open CurrentProject.Connection

Set rst_cusid = New ADODB.Recordset

rst_cusid.Open "select distinct CustomerID,CompanyName,Email from v_order_list", cnn, adOpenKeyset, adLockReadOnly

If rst_cusid.RecordCount 1 Then Exit Sub

Set rst_order_list = New ADODB.Recordset

For i = 1 To rst_cusid.RecordCount

rst_order_list.Open "select * from v_order_list where CustomerID = " + "'" + rst_cusid.Fields(0) + "'", cnn, adOpenKeyset, adLockReadOnly

With rst_order_list

para = "Dear " + .Fields(1) + ":" + Chr(10)

para = para + Space(3) + "Your Company " + .Fields(0) + " has Order those Good:" + Chr(10)

For j = 1 To .RecordCount

para = para + Space(3) + "Good Name :" + .Fields(2) + " Order Date :" + CStr(.Fields(3)) + " Price:" + CStr(.Fields(4)) + Chr(10)

Next

End With

rst_order_list.Close

para = para + Space(30) + "Yours Loadhigh" 'para为信件内容

Set newmail = olkapp.CreateItem(olMailItem)

With newmail

.To = rst_cusid.Fields(2) '接收邮件的信箱

.Subject = rst_cusid.Fields(1) + " Order List" '信件标题

.Body = para

.Send '发送

End With

rst_cusid.MoveNext

para = ""

Next

rst_cusid.Close

Set rst_cusid = Nothing

Set rst_order_list = Nothing

cnn.Close

Set cnn = Nothing

End Sub

***********************************************************

Function test1()

Dim objMail As MailItem

Dim objAttachments As Attachment

Dim App As New Outlook.Application

Set objMail = App.CreateItem(olMailItem)

objMail.Save

Set objAttachments = objMail.Attachments.Add("c:\temp\a.xls", olByValue, 1, "a.xls")

With objMail

.To = "chenge@shtip.com.cn" '接收邮件的信箱

.Subject = "test" '信件标题

.Body = "test"

.Send '发送

End With

'objMail.Display

End Function

*********************************************************

VBScript code

Set Msg =

CreateObject("CDO.Message")

With Msg

.To = "someone@microsoft.com"

.From = "userX@microsoft.com"

.Subject = "Lunch meeting"

.TextBody = "I have attached the suggested menu."

.AddAttachment ""

.Send

End With

另,若因发垃圾邮件被163.com封账号,可以联系客服解释是电脑中了病毒。

如何用VB.Net收发邮件

在Identity2.0里面封装了IIdentityMessageService接口,可以用来发送接收邮件。

看看

Imports System.Threading.Tasks

Imports System.Security.Claims

Imports Microsoft.AspNet.Identity

Imports Microsoft.AspNet.Identity.EntityFramework

Imports Microsoft.AspNet.Identity.Owin

Imports Microsoft.Owin

Imports Microsoft.Owin.Security

public function SendAsync(message as IdentityMessage) as task

dim credentialUserName = "邮箱登录名"

dim sentFrom = "你的邮箱地址"

dim pwd= "邮箱登录密码";

dim client as new System.Net.Mail.SmtpClient("smtp服务器地址")

client.Port = 25'mtp邮件服务器端口

client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network

client.UseDefaultCredentials = false

dim credentials as new System.Net.NetworkCredential(credentialUserName, pwd)

client.EnableSsl = true

client.Credentials = credentials

dim mail as new System.Net.Mail.MailMessage(sentFrom, message.Destination)

mail.Subject = message.Subject

mail.Body = message.Body

return client.SendMailAsync(mail)

end function


标题名称:vb.net如何收邮件 vbs发送邮件带附件
文章地址:http://csdahua.cn/article/docpopo.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流