ASP.NET基于Web Mail收发系统设计与开发

摘 要

互联网络技术的不断发展,电子邮件服务已经成为人们基本的信息交互手段,也是网络服务中最早和最基本的服务之一。传统邮件系统大多是基于C/S结构,如Lotus notes、Microsoft Exchange Server等,这些邮件系统占用相对较多的服务器资源,对服务器性能有更高的要求,同时也增加了管理负担。并且,由于不同服务器需要特定的客户端软件,增加了系统的开发和管理成本。

基于Web的邮件服务提供了更快捷、高效的服务,使得新一代的Web Mail能解决传统邮件的不足之处。本文设计并实现的邮件收发系统基于B/S模式,以组件技术为基础,利用System.Web.Mail命名空间构造函数,分别调用Mailmessage,Mailattachment和SMTPmail方法,实现以Web网页的形式收发电子邮件,用户只需要通过Web页面就可以实现带附件邮件的发送。

关键词: Web Mail;ASP;SMTP协议;POP协议

3.1 System.Web.Mail命名空间介绍

System.Web.Mail命名空间包含使您可以使用CDO消息组件来构造和发送消息的类。邮件可通过系统的SMTP邮件服务或任意的SMTP服务器来传送。该命令空间包含三个类,如下说明

类的常用属性、方法说明:

(1)、MailMessage类的属性:该类提供了多个属性、方法、函数,用以构造电子邮件。其中,常用属性如表

(2)、MailAttachment类的函数

该类中的MailAttachment构造函数常与new子句配合来初始化附件类的新实例。可用两种方式进行初始化。1、仅指定文件名;2、同时指定文件名和编码类型。

(3)、SMTPmail类的属性及方法:该类提供了属性及方法以调用CDO组件的功能来发送电子邮件,其中常用的属性有:1、SMTPserver属性。用于获取或设置发送电子邮件的SMTP中继邮件服务器的名称;若不设置该属性,则使用本地(系统内置,如127.0.0.1)的SMTP服务器的名称。2、send方法。该方法用于发送电子邮件。

类的常用属性方法说明:(见表1)

表1 类的常用属性

|----------------|-------------------------------------------------------|
| MailAttachment | 提供用于构造电子邮件附件的属性和方法 |
| MailMessage | 提供用于构造电子邮件的属性和方法。 |
| SMTPMail | 提供用于使用 Windows 2000 的协作数据对象 (CDOSYS) 消息组件来发送消息的属性和方法。 |

其中,MailMessage类提供的接口很多,以创建MailObject实例对象为例:如发件人(MailObject.From)、收件人(MailObject.To)、抄送(MailObject.Cc)、暗送(MailObject.Bcc)、邮件主题(MailObject.Subject)、邮件正文(MailObject.Body)等基本要素,也包括如优先级(MailObject.Priority)、邮件格式(MailObject.BodyFormat)、编码类型(MailObject.BodyFormat)等。3.2 程序设计主要步骤

首先要建立对System.Web.Dll动态连接库的引用。然后,在窗口类之前用以下语句导入命名空间:Import System.Web.Mail,通过初始化构造一个MailMessage()函数定义变量,将接收HTML网页中填入的信息赋值给变量,这样就可以引用其中的成员。

3.3 界面设计

  1. 首页

首页设置传值页面,把登录信息中的用户名,密码等传到下一个页面(default.asp),form标签的名称为f1,主要代码如:

<form name="f1" method="post" action="default.asp">'设置属性及传值页面

<input type="hidden" name="username">'传用户名

<input type="hidden" name="pwhidden">'传密码

</form>

在首页中加入了判断输入的代码,如if (username.value == "")

{

alert("用户名不可为空");

usernameshow.focus();

return ;

}

并加入了一些图片,生成的效果如图3

图3 登录首页

  1. 发送邮件页面

发送邮件的页面调用.NET框架中的System.Web.Mail, 此页面的运行需要.NET2.0框架环境,其它代码也是该设计的核心部分,在主要代码部分有详细的说明,详见 3.5发送邮件页面主要代码, 生成页面如图4

图4 邮件发送页面

  1. 用户登录后页面

这是一个框架页面,分为收件箱,草稿箱,发件箱和垃圾箱,每一个部分分别用一个页面来实现,其中最重要的收件箱用listmail.asp来实现,在页面中邮件总数用

<%

dim ei

set ei = server.createobject("easymail. PerFolders")'创建对象并初始化变量

'然后分别定义变量来接收

用<%= ei.newInBoxMailCount %>来显示组件中收件箱邮件的数量,同理分别用<%=ei.inboxMailCount%>,<%=ei.NewOutBoxMailCount%>,<%=CLng(ei.inboxMailSize/1000) %>来调用组件中收件箱数量,未读邮件数量和邮箱使用率,并对是否为空做判断。

存储空间的大小用<%=maxsize %>来获取,<%=bf %>用来显示空间使用率,其中bf = CInt((100 * CLng(cursize / 1000)) / maxsize),这里邮件设计为10M

生成如图5

图5 登录后

  1. 收件箱

收件箱页面首先用

<%

dim ei

set ei = server.createobject("easymail.InfoList")'创建对象并定义接收信息列表中内容,用

ei.LoadMailBox username加载组件中的信息

收件箱中所有的邮件信息用循环来显示接收,

<%

dim forpn

forpn = ""

i = 0

do while i < allnum'循环显示

ei.getMailInfo allnum - i - 1, idname, isread, priority, sendMail, sendName, subject, size, etime '其中allnum为邮件总数,后面的分别从ei中定义的名称,是否阅读,收件人,发件人,主题,大小,时间等。

forpn = forpn & Chr(9) & idname

idname = NULL isread = NULL priority = NULL  sendMail = NULL

sendName = NULL subject = NULL size = NULL

etime = NULL i = i + 1

loop %>'循环结束

如图6

图6 收件箱

  1. 邮件查看

在查看邮件页面(showmail.asp)中同样调用组件中

<%dim ei

set ei = server.createobject("easymail.emmail")

%>'来显示每一邮件的信息

值得注意的是在显示详细页面的时候,如果没有规定编码格式,可能出现乱码的情况,因此在这里添加一个判断

charset = UCase(ei.Text_CharSet)

if charset = "" or charset = "DEFAULT_CHARSET" then

charset = "gb2312"'把页面的编码设为gb2312

日期,优先级,发件人,发件人地址,收件人地址,主题和邮件的详细内容分别调用组件中Time,XMSMailPriority等来实现,具体格式如下:

<%=ei.Time %>

邮件优先级判断:

<%

xmsp = ei.XMSMailPriority'定义邮件优先级

if xmsp = "High" then

Response.Write "<font color='#FF3333'>紧急邮件</font>"

elseif xmsp = "Low" then

Response.Write "慢件"

else

Response.Write "普通邮件"

end if

%>

发件人调用:

<%

Dim receiver

receiver = server.htmlencode(ei.FromMail)'调用发件人

response.write receiver%>

<%

receiver = server.htmlencode(ei.Receiver)'调用收件人

response.write receiver%>'定义变量接收收件人变量

<%=server.htmlencode(ei.subject) %>'调用主题

<%=server.htmlencode(ei.text) %>'调用邮件内容

如图7

图7 邮件查看

3.4 主要代码

程序主要页面程序如下:

  1. 邮件发送页面:

<%@ Page Language="VB" Debug="true" %>

<%@ Import Namespace="System.Web.Mail" %>

<script language="vb" runat="server">

Sub SendMail(ByVal sender As Object, ByVal e As EventArgs)

Dim MailObject As New MailMessage() '构造一个mailmessage函数,MailObject为构造函数名

'下面是判断填的信息是否为空,不为空则为text中的内容

If Emailfrom.Text <> "" Then MailObject.From = Emailfrom.Text '发件人

If EmailTo.Text <> "" Then MailObject.To = EmailTo.Text '收件人,这里必填,否则邮件找不到邮件服务器上的邮箱信息,会出错

If EmailCc.Text <> "" Then MailObject.Cc = EmailCc.Text '抄送

If EmailBcc.Text <> "" Then MailObject.Bcc = EmailBcc.Text '密送

MailObject.Priority=MailPriority.High '邮件发送优先级,可以有high,normal和low三种选择

MailObject.Subject = EmailSubject.Text '邮件主题

MailObject.Body = EmailBody.Text '主体,即邮件内容

MailObject.BodyFormat = MailFormat.Text '设置邮件内容格式,Text为文本,Html为超文本

'MailObject.BodyEncoding '设置编码类型,参考有ascii

Dim MailAttachment As String '定义附件,这里不知道用string好还是可变的stringbuilder好

MailAttachment = EmailAttachment.PostedFile.FileName ' lenth变量控制附件大小,但是页面和服务器的设置如果不对的话会很麻烦

If MailAttachment<>"" Then MailObject.Attachments.Add(New MailAttachment(MailAttachment))

SMTPMail.SMTPServer = "localhost" '指定使用缺省的SMTP服务器,测试了很多次外网的邮件服务器都需要验证,而这个又没有验证,所以就用自己Win2003建的邮件服务器做测试

SMTPMail.Send(MailObject) '调用System.Web.Mail.send发送邮件

panelSendEmail.Visible = False

panelMailSent.Visible = True

End Sub

</script>'发送脚本部分完

'html定义变量

<input name="file" type="file" id="EmailAttachment" size="40" runat="server" />

<ASP:button runat="server" id="SendButton" Text="发送"

OnClick="SendMail" /> '点击处理事件

</form>

</ASP:panel>

<ASP:panel id="panelMailSent" runat="server" Visible="False">'判断是否发送成功

邮件已经成功发送,欢迎您使用!

</ASP:panel></body></html>

2、邮件收件箱主要代码:

随机数产生函数:(作用是产生随机数,在注册时产生验证)

function getGRSN()'定义

dim theGRSN

Randomize

theGRSN = Int((9999999 * Rnd) + 1)'让99999999乘以随机数rnd的和加1并取整

getGRSN = "GRSN=" & CStr(theGRSN)

end function

定义邮箱空间使用率:

dim bf

if maxsize > 0 then

bf = CInt((100 * CLng(cursize / 1000)) / maxsize)

else

bf = 100

end if

列表:set ei = server.createobject("easymail.InfoList")

显示邮件主要函数:set ei = server.createobject("easymail.emmail")

相关推荐
搬码后生仔42 分钟前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
Lx3521 小时前
Pandas数据重命名:列名与索引为标题
后端·python·pandas
小池先生2 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
小蜗牛慢慢爬行3 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
wm10434 小时前
java web springboot
java·spring boot·后端
龙少95435 小时前
【深入理解@EnableCaching】
java·后端·spring
溟洵7 小时前
Linux下学【MySQL】表中插入和查询的进阶操作(配实操图和SQL语句通俗易懂)
linux·运维·数据库·后端·sql·mysql
SomeB1oody10 小时前
【Rust自学】6.1. 定义枚举
开发语言·后端·rust
SomeB1oody10 小时前
【Rust自学】5.3. struct的方法(Method)
开发语言·后端·rust