跪求一个基于C#.net或者java编的邮件接收发送的系统,希望高手能帮帮忙
发布网友
发布时间:2022-05-31 23:50
我来回答
共1个回答
热心网友
时间:2023-11-07 07:07
用Active Server
Pages(ASP)开发过网站的人都知道,如果想用ASP来开发一套电子邮件发送系统,要么使用第三方提供的组件,如Jmail等,要么使用Window自带的对象——C
DONTS.NewMail,而ASP中则没有类似的对象用来开发电子邮件发送系统。自从微软公司推出了Microsoft
.NET后,发送电子邮件已经成为Web程序设计的基本对象,只要用简单地引用.NET中发送邮件的类库就可以构建一个完整的E-mail电子邮局发送系统,而无须借助任何第三方组件。
一、相关准备
发送电子邮件所采用的是.Net FrameWork
SDK中的Class Library(类库)--System.Web.Mail。这个Class
library提供了E-mail发送的所有对象、属性和方法。其中最重要的是mailMessage类和smtpMail类,mailMessage类提供用于构造电子邮件的属性和方法,如发信人、收信人、抄送地址、密送地址、主题、正文、优先级、格式、附件等。smtpMail提供用于使用
Windows 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法,其中成员smtpServer用来获取或设置要用于发送所有电子邮件的 SMTP
邮件服务器的名称,成员send用来发送电子邮件。
如上所述,使用.NET开发基于Web的电子邮件发送系统,必须指定一个SMTP服务器。我们既可以指定Internet上任何一个SMTP服务器,也可以使用服务器自身的SMTP服务功能。如果使用本机来发送信件,首先必须启动SMTP服务,再进行中继*设置,以确保每个人都可以使用该服务发送邮件。打开控制面板中的Internet信息服务,右键点击『默认SMTP虚拟服务器』,选择『启动』菜单来启动SMTP服务,再选择『属性』菜单,在弹出的属性菜单中选择『访问选项』卡,点击『中继』按钮,打开中继*对话框,选中『仅以下列表除外』,确定即可。经过如此设置,任何人都可以用本机提供的SMTP服务发送电子邮件了。如图1。
如果要在信件中夹带附件,必须先将附件上传到服务器,因为附件加载命令Message.Attachments.Add()无法加载客户端的文件,只能将服务器端的文件添加到邮件中。邮件发送成功后,“还系统一个清白”,最好将附件从服务器删除。.NET
FrameWork 中也已经集成了文件上传和文件操作(写入、读出、移动、复制、删除等)功能,只须简单地调用即可实现。
现在现在我们来看看究竟什么样的E-mail发送系统才是一个功能完整的E-mail发送系统呢?具体说来,一个功能完整的E-mail发送系统应该具备了如下功能:发信人地址(From)、收信人地址(To)、密送地址(Bcc)、抄送地址(Cc)、主题(Subject)、正文(Body)、信件优先级(Priority)、信件格式(Format)、附件(Attachments)等。如图2。下文将详细阐述如何实现这些功能。
二、实现步骤
经过上文所述的准备工作,我们来具体看一下构建完整的E-mail发送系统的步骤。在此所涉及到的服务器端的控件名称请参见第四部分“完整的code
behind代码”。限于篇幅,aspx文件中控件定义代码未能提供。
1、定义mailMessage对象的实体。
Dim mailMessage As New
System.Web.Mail.MailMessage()
2、指定mailMessage对象的各个属性值。
发信人地址:mailMessage.From
收信人地址:mailMessage..To
抄送地址:mailMessage..Cc
密送地址:mailMessage..Bcc
主题:mailMessage..Subject
正文:mailMessage..Body
信件格式:mailMessage..BodyFormat
优先级:mailMessage..Priority
附件:mailMessage.Attachments
3、添加附件,共分三个步骤。
1)将文件上传到服务器。用PostedFile.SaveAs()获取对由客户端指定的上载文件的访问。本例将附件上传到当前目录的upload子目录中。
strFullFileName =
attachfile.PostedFile.FileName
intPosition =
InStrRev(strFullFileName, "", Len(strFullFileName))
strFileName =
Mid(strFullFileName, intPosition + 1)
attachfile.PostedFile.SaveAs(MapPath("upload") & "" &
strFileName)
2)将附件以绝对路径添加到邮件中。
mailMessage.Attachments.Add(New
Mail.MailAttachment(MapPath("upload") & "" & strFileName))
3)信件发送成功后,调用.NET中的文件操作类将文件从服务器中删除。
Dim fileDeleteObject As
System.IO.File
fileDeleteObject.Delete(MapPath("upload") & "" &
strFileName)
fileDeleteObject = Nothing
4、指定SmtpServer服务器,发送邮件。
Mail.SmtpMail.SmtpServer =
"LocalHost"
Mail.SmtpMail.Send(mailMessage)
三、完整的Code Behind代码
下面是完整的Code Behind代码,用VB编写。
Public Class contact_mail
Inherits System.Web.UI.Page
‘变量定义
Protected WithEvents txtboxFrom
As System.Web.UI.WebControls.TextBox ‘发信人地址文本框
Protected WithEvents txtboxTo As
System.Web.UI.WebControls.TextBox ‘收信人地址文本框
Protected WithEvents txtboxCc As
System.Web.UI.WebControls.TextBox ‘抄送地址文本框
Protected WithEvents txtboxBcc
As System.Web.UI.WebControls.TextBox ‘密送地址文本框
Protected WithEvents
txtboxSubject As System.Web.UI.WebControls.TextBox ‘主题文本框
Protected WithEvents txtboxBody
As System.Web.UI.WebControls.TextBox ‘正文文本框
Protected WithEvents
radiobtnFormat As System.Web.UI.WebControls.RadioButtonList ‘信件格式单选钮
Protected WithEvents
radiobtnPriority As System.Web.UI.WebControls.RadioButtonList ‘优先级单选钮
Protected WithEvents attachfile
As System.Web.UI.HtmlControls.HtmlInputFile ‘文件浏览按钮
Protected WithEvents btnSend As
System.Web.UI.WebControls.Button ‘定义发送按钮
Dim mailMessage As New
System.Web.Mail.MailMessage() ‘定义mailMessage对象的实体
Dim strFullFileName, strFileName
As String '定义上传文件名称
Dim intPosition As Integer
Private Sub
btnSend_onclick(ByVal sender As System.Object, ByVal e As EventArgs) Handles
btnSend.Click
'赋值予收件人/发件人/抄送/密送地址/主题/正文
‘收件人/抄送/密送支持以分号分隔的电子邮件地址列表
mailMessage.To = txtboxTo.Text
mailMessage.From =
txtboxFrom.Text
mailMessage.Cc = txtboxCc.Text
mailMessage.Bcc = txtboxBcc.Text
mailMessage.Subject =
txtboxSubject.Text
mailMessage.Body =
txtboxBody.Text
'取信件格式(文本/超文本)
If
radiobtnFormat.SelectedItem.Value = "text" Then
mailMessage.BodyFormat =
Mail.MailFormat.Text
Else
mailMessage.BodyFormat =
Mail.MailFormat.Html
End If
'取优先级(低/普通/高)
Select Case
radiobtnPriority.SelectedItem.Value
Case "low"
mailMessage.Priority =
Mail.MailPriority.Low
Case "normal"
mailMessage.Priority =
Mail.MailPriority.Normal
Case "high"
mailMessage.Priority =
Mail.MailPriority.High
End Select
'取附件步骤共3步,首先判断是否加载了附件
If
attachfile.PostedFile.FileName <> "" Then
'1、先将附件上传到当前目录的upload子目录下
strFullFileName =
attachfile.PostedFile.FileName ‘获得包括路径的完整文件名
intPosition =
InStrRev(strFullFileName, "", Len(strFullFileName))
strFileName =
Mid(strFullFileName, intPosition + 1) ‘获得文件名
attachfile.PostedFile.SaveAs(MapPath("upload") & "" &
strFileName) ‘以绝对路径上传文件
'2、以绝对路径添加附件
mailMessage.Attachments.Add(New
Mail.MailAttachment(MapPath("upload") & "" & strFileName))
End If
Mail.SmtpMail.SmtpServer = "
LocalHost " ‘指定本机为SMTP服务器
Mail.SmtpMail.Send(mailMessage)
If
attachfile.PostedFile.FileName <> "" Then
'3、信件发送完成之后删除这个文件
Dim fileDeleteObject As
System.IO.File
fileDeleteObject.Delete(MapPath("upload") & "" &
strFileName)
fileDeleteObject = Nothing
strFullFileName = Nothing :
strFileName = Nothing : intPosition = Nothing
End If
End Sub
End Class
四、讨论
到此为止,一个基于Web的完整的电子邮件发送系统就完成了。由于本例采用了代码分离(Code
Behind)技术,所以必须经过编译才能运行。
虽然使用Microsoft
.NET构建基于Web的电子邮件发送系统十分快捷方便,而且功能完整,但它并不是完美无缺的。它的最大缺陷就是该类库目前尚不支持SMTP认证,所以无法使用Internet上需要认证的SMTP服务器来发送信件。目前Internet上无须认证便能发信的SMTP服务器少之又少,就算有也不会很稳定,因此启用本机的SMTP功能才能确保服务稳定。但如果本机是直接连接到Internet上的,又会受到网上垃圾信件的攻击。笔者就有过这样的经历,打开了SMTP服务的服务器因受到垃圾信件的攻击很快就陷于瘫痪,无可奈何只有将服务关闭。
是不是这样我们就束手无策呢?俗话说魔高一尺,道高一丈。经过多次实践,笔者总结出一个能够实现双赢的方案:将服务器置于局域网内,利用防火墙避免网上垃圾信件的攻击。然后在DNS服务器中添加一条记录,将该服务器的IP地址(局域网内部地址)映射为Internet上的合法IP地址或域名,局域网内的信件发送可以直接连接到该服务器,局域网外的信件发送可以通过这个合法的IP地址解析到该服务器从而达到发送信件的目的。这样既有效地拦截了垃圾邮件,又实现了邮件发送的功能,可谓一举两得。