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

news2024/10/5 21:21:54

摘  要

互联网络技术的不断发展,电子邮件服务已经成为人们基本的信息交互手段,也是网络服务中最早和最基本的服务之一。传统邮件系统大多是基于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 登录首页

        2.  发送邮件页面

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

                 图4 邮件发送页面

        3.  用户登录后页面

这是一个框架页面,分为收件箱,草稿箱,发件箱和垃圾箱,每一个部分分别用一个页面来实现,其中最重要的收件箱用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 登录后

        4.  收件箱

收件箱页面首先用

<%

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 收件箱

        5.  邮件查看

在查看邮件页面(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")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1606170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【氮化镓】GaN HEMT失效物理和可靠性

概述: 本文是一篇关于AlGaN/GaN基高电子迁移率晶体管(HEMTs)的失效物理和可靠性研究的综述文章,发表在2013年10月的《IEEE Transactions on Electron Devices》上。文章由Enrico Zanoni等人撰写,主要关注了影响栅极边缘和肖特基结的失效机制,并探讨了提高这些器件可靠性…

未来趋势:探索Facebook在数字化时代的发展方向

在当今日益数字化的时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。Facebook&#xff0c;作为全球最大的社交媒体平台&#xff0c;一直处于行业的前沿&#xff0c;不断地探索和引领社交媒体的发展趋势。本文将深入探讨Facebook在数字化时代的发展方向&#…

算法一:数字 - 两数之和

给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 来源&#xff1a;力扣(LeetCode) 链接&#xf…

详解 C++ 实现K-means算法

一、K-means算法概述 K-means算法是一种非常经典的聚类算法,其主要目的是将数据点划分为K个集群,以使得每个数据点与其所属集群的中心点(质心)的平方距离之和最小。这种算法在数据挖掘、图像处理、模式识别等领域有着广泛的应用。 二、K-means算法的基本原理 K-means算法…

项目中的解耦小能手-观察者模式

目录 1.使用场景 2.什么是观察模式 3.观察者模式结构图 4.代码实现案例 4.1 subject代码实现 4.2 Observer类代码实现 5. 回顾总结 1.使用场景 当一个对象的改变需要同事改变其他对象的时候&#xff0c;如&#xff1a;订单中心-下单成功需要通知库存、物流和积分去做相应…

llama-factory SFT系列教程 (三),chatglm3-6B 大模型命名实体识别实战

文章列表&#xff1a; llama-factory SFT系列教程 (一)&#xff0c;大模型 API 部署与使用llama-factory SFT系列教程 (二)&#xff0c;大模型在自定义数据集 lora 训练与部署 llama-factory SFT系列教程 (三)&#xff0c;chatglm3-6B 命名实体识别实战 简介 利用 llama-fa…

基于百度文心大模型全面重构,小度正式推出AI原生操作系统DuerOS X

4月16日&#xff0c;以“创造未来”为主题的2024百度Create AI开发者大会在深圳举办。百度集团副总裁、小度科技CEO李莹正式发布了小度新一代操作系统DuerOS X&#xff0c;该操作系统是小度基于百度文心大模型推出的全球首个AI原生操作系统。李莹表示&#xff1a;“作为⽂⼼⼤模…

车载终端丨车载平板丨车载平板电脑丨提升车队管理水平

随着电商、互联网和智能制造等行业的快速发展&#xff0c;物流需求不断增加&#xff0c;车载终端作为物流企业管理的重要工具&#xff0c;具有广泛的市场需求。车载平板是一种集成了计算机和显示屏的设备&#xff0c;可以用于车辆管理、车队调度、运输监控等方面&#xff0c;可…

AI:160-使用Python进行机器学习模型的调参与优化

本文收录于专栏&#xff1a;精通AI实战千例专栏合集 从基础到实践&#xff0c;深入学习。无论你是初学者还是经验丰富的老手&#xff0c;对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码&#xff0c;详细讲解供大家学习&#xff0c;希望可以帮到大家。正…

C/C++中程序内存区域划分

总结C/C中程序内存区域划分 C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执⾏函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的…

深入解析Apache Hadoop YARN:工作原理与核心组件

什么是YARN&#xff1f; YARN&#xff08;Yet Another Resource Negotiator&#xff09;是Apache Hadoop生态系统中的一个重要组件&#xff0c;用于资源管理和作业调度。它是Hadoop 2.x版本中的一个关键特性&#xff0c;取代了旧版本中的JobTracker和TaskTracker。YARN的设计目…

Android代码函数类快速查询方法

一、引言 android代码庞大且非常复杂&#xff0c;本文就记录一些查询函数类的方法&#xff0c;便于初级快速查询入手。 二、查询android函数类方法 以查询 MediaPlayer类为例。 2.1 通过Android Studio关键词声明定义 2.2 通过Android Studio的Navigate查找 打开Android S…

Hive进阶(4)----MapReduce的计算过程(赋图助君理解)

MapReduce的计算过程 MapReduce是一种编程模型和处理大规模数据集的方法。它通常用于分布式计算环境中&#xff0c;能够将数据处理任务分解成独立的部分&#xff0c;分配给多台计算机进行并行处理。这个模型由Google提出&#xff0c;并在开源领域中得到了广泛的应用和实现。Map…

Matlab|【免费】【sci】考虑不同充电需求的电动汽车有序充电调度方法

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现sci文献《A coordinated charging scheduling method for electric vehicles considering different charging demands》&#xff0c;主要实现电动汽车协调充电调度方法&#xff0c;该方法主要有以…

【Java EE】文件操作

目录 1.认识文件 2.树型结构组织和目录 3.文件路径&#xff08;Path&#xff09; 4.其他知识 5.Java中操作文件 5.1File概述 5.1.1属性 5.1.2构造方法 5.1.3方法 5.2代码示例 1.认识文件 我们先来认识狭义的文件&#xff08;file&#xff09;。针对1硬盘这种持久化存…

Jenkins机器已经安装了ansible, 运行的时候却报错ansible: command not found

操作系统&#xff1a;MacOS Jenkins log提示 ansible: command not found 直接在Jenkins 机器中&#xff0c;进入一样的目录执行ansible --version OK 原因&#xff1a; Jenkins 默认使用的环境是 /usr/bin, 而我的ansible 安装配置在conda3 下面&#xff0c;所以需要在Jenkin…

使用Python工具库SnowNLP对评论数据标注(二)

这一次用pandas处理csv文件 comments.csv import pandas as pd from snownlp import SnowNLPdf pd.read_csv("C:\\Users\\zhour\\Documents\\comments.csv")#{a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9]}是个字典 emotions[] for txt in df[sentence]:s SnowNLP(…

线程互斥及基于线程锁的抢票程序

我们实现一个简单的多线程抢票程序。 #include<iostream> #include<thread> #include<unistd.h> #include<functional> #include<vector> using namespace std; template<class T> using func_tfunction<void(T)>;//返回值为void,…

OpenHarmony网络通信-socket-io

简介 socket.io是一个在客户端和服务器之间实现低延迟、双向和基于事件的通信的库。建立在 WebSocket 协议之上&#xff0c;并提供额外的保证&#xff0c;例如回退到 HTTP 长轮询或自动重新连接。 效果展示 下载安装 ohpm install ohos/socketio OpenHarmony ohpm 环境配置等更…

AWS入门实践-如何在AWS云上创建一个内外网隔离的生产环境

在 AWS 上建立一个内外网分离的生产环境,可以减少应用服务的暴露面&#xff0c;有效的保证你的应用服务器的安全。通常我们会将web应用放在外网的子网内&#xff0c;数据库服务器等放在内网的子网。我们将按照下图来部署动手实践环境&#xff0c;实现在public subnet的EC2虚拟机…