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 登录首页

        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")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【WEEK8】 【DAY3】【DAY4】总览Spring Boot【中文版】

目录 2024.4.17 Wednesday1.总览1.1.先看个速成课&#xff0c;了解大概1.2.SpringBoot入门1.2.1.什么是Spring1.2.2.Spring是如何简化Java开发的1.2.3.什么是SpringBoot 1.3.第一个Spring Boot项目1.3.1.准备工作1.3.2.创建基础项目说明1.3.2.1.使用官方选配下载 2024.4.18 Thu…

libftdi1学习笔记 5 - SPI Nor Flash

目录 1. 初始化 2. CS控制例子 3. 读ID 3.1 制造商 3.2 容量大小 3.3 设置IO类型 3.3.1 setQSPIWinbond 3.3.2 setQSPIMxic 3.3.3 setQSPIMicrochip 3.3.4 setQSPIMicron 4. 写保护 5. 等待空闲 6. 擦除扇区 7. 页编程 8. 页读 9. 写 10. 读 11. 验证 基于M…

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色&#xff0c;因才施用&#xff0c;需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好&#xff0c;而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才&#xff0c;才能高效配合…

【Linux】引导过程与服务控制

目录 一、Linux操作系统引导过程 1.linux开机引导过程 2.系统初始化进程 1.init进程 2.进程启动方式 二、运行级别和Systemd单元类型 1.运行级别 2.Systemd 三、启动类故障恢复 1.修复MBR扇区故障 2.修复GRUB引导故障 3.root密码忘记的修改方式 四、系统服务控制 …

初识ansible服务及ansible主机清单配置

目录 1、什么是自动化批量管理 2、自动化工具ansible架构 3、ansible服务专用术语对照表 4、设置主机清单&#xff08;inventory&#xff09; 4.1实验环境准备 4.2配置主机清单 4.2.1分组基本格式 4.2.2指定用户名&#xff0c;密码。端口 4.2.3子组 4.3查看 4.3.1看…

基于SpringBoot+Vue的服装销售商城系统(源码+文档+包运行)

一.系统概述 顺应互联网发展的时代热潮&#xff0c;着力于服装电商&#xff0c;满足消费者的日常需求的同时解决传统服装销售的难题。商家如果还用之前的只有线下卖衣服&#xff0c;已经很落伍了&#xff0c;这样会导致了效率低下。而且&#xff0c;时间一长的话&#xff0c;积…

AIGC算法2:LLM的复读机问题

1. 什么是LLM的复读机问题 字符级别重复&#xff0c;指大模型针对一个字或一个词重复不断的生成例如在电商翻译场景上&#xff0c;会出现“steckdose steckdose steckdose steckdose steckdose steckdose steckdose steckdose…”&#xff1b;语句级别重复&#xff0c;大模型针…

不容错过的 IntelliJ IDEA 插件 Top 10

虽然 IntelliJ IDEA 功能齐全&#xff0c;您仍然可以增添一些个性化的设置。 JetBrains Marketplace 上有着大量实用插件&#xff0c;可以满足您个人或企业的特定需求。 内容库非常庞大&#xff0c;可能会让人眼花缭乱。 在这篇博文中&#xff0c;我们将分享最近和一直以来最受…

(十四)C++自制植物大战僵尸游戏windows平台视频播放实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs VLC库 在Cocos2d-x游戏开发框架中&#xff0c;没有实现windows平台视频播放的功能&#xff0c;需要自定义实现。在本项目中使用vlc库实现windows平台的视频播放功能。 vlc官网&#xff1a;网址 下载完成后&#x…

如何配置Postgres的自动扩展功能以应对数据增长

文章目录 解决方案1. 表空间管理2. 分区表3. 自动扩展配置4. 监控和告警5. 使用外部工具和服务 示例代码示例1&#xff1a;创建表空间示例2&#xff1a;创建分区表示例3&#xff1a;调整配置参数示例4&#xff1a;使用监控和告警工具 总结 在PostgreSQL中&#xff0c;随着数据的…

Spring Boot:Web应用开发之登录与退出的实现

Spring Boot 前言实现登录功能配置拦截器 实现退出功能 前言 登录与退出功能作为 Web 应用中的基础且重要的组成部分&#xff0c;直接关系到用户的安全和隐私保护。通过实现登录与退出功能&#xff0c;可以对用户的身份进行验证和授权&#xff0c;确保只有合法的用户才能访问特…

吃鸡游戏msvcp140.dll丢失的解决方法

msvcp140.dll 是一个与 Microsoft Visual C Redistributable 相关的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;是 Windows 操作系统中众多应用程序正常运行所必需的关键组件之一。以下是对 msvcp140.dll 文件的总体介绍和msvcp140.dll丢失的多个解决方案分享。 *…

Java项目实现Excel导出(Hutool)

官网&#xff1a; Excel生成-ExcelWriter (hutool.cn) 1.使用Hutool工具实现Excel导出&#xff08;.xlsx格式&#xff09; 业务场景&#xff1a; 使用SpringCloudmysqlmybatis-plus需要将数据库中的数据导出到Excel文件中 前端为Vue2 第零步&#xff1a;导入依赖 <!-…

NPL预训练模型-GPT-3

简介及特点 GPT-3是一个由OpenAI开发的自然语言处理&#xff08;NLP&#xff09;预训练模型&#xff0c;它是生成式预训练变换器&#xff08;Generative Pretrained Transformer&#xff09;系列的第三代模型。GPT-3以其巨大的规模和强大的语言处理能力而闻名&#xff0c;具有…

快速上手Linux核心命令

Linux 的重要性不用我多说了吧&#xff0c;大多数互联网公司&#xff0c;服务器都是采用的Linux操作系统 Linux是一个主要通过命令行来进行管理的操作系统。 只有熟练掌握Linux核心命令&#xff0c;在使用起来我们才会得心应手 这里给大家整理了Linux一些核心命令&#xff0…

游戏、app抓包

文章目录 协议app抓包游戏抓包 协议 在抓包之前&#xff0c;首先我们要对每个程序使用什么协议有个大致的了解&#xff0c;比如网页这种就是走的http协议。 在一些app中我们通过发送一个请求&#xff0c;然后服务器接受&#xff0c;响应&#xff0c;返回一个数据包&#xff0c…

数字人解决方案——EMAGE面部加肢体动画实现从音频生成数字人表情与动作

概述 AI数字人面部与肢体的驱动算法是数字人研发中至关重要的一环&#xff0c;它能够有效降低VR Chat、虚拟直播和游戏NPC等应用场景中的成本。随着技术的发展&#xff0c;基于语音的面部、肢体和手部动作生成模型已经逐步成熟并得到广泛应用。然而&#xff0c;当尝试将这些独…

反激电源——TL431及光耦反馈电路计算(不涉及环路补偿)

一、TL431及光耦反馈电路 TL431以及光耦电路是反激的副边反馈类型电路中的常见应用。 其反馈工作原理为&#xff1a;当副边的输出电压升高时&#xff0c;TL431的REF点采样电压也会升高&#xff0c;使得TL431的导通量增加&#xff0c;同时光耦内部的发光二极管流过的电流也增大&…

C++11 数据结构3 线性表的循环链式存储,实现,测试

上一节课&#xff0c;我们学了线性表 单向存储结构&#xff08;也就是单链表&#xff09;&#xff0c;这个是企业常用的技术&#xff0c;且是后面各种的基本&#xff0c;一定要牢牢掌握&#xff0c;如果没有掌握&#xff0c;下面的课程会云里雾里。 一 &#xff0c;循环链表 1…

遥测终端赋能水库泄洪监测预警,筑牢度汛安全防线!

4月10日&#xff0c;水利部召开水库安全度汛视频会议。会议要求着力强化水库防洪“四预”措施&#xff0c;加快构建雨水情监测预报“三道防线”&#xff0c;完善预警信息发布机制&#xff0c;推进数字孪生水利工程建设&#xff0c;为科学调度指挥决策提供支持。强调坚决牢牢守住…