完整的 ASP/SQL Server/SMTP 消息系统






3.63/5 (8投票s)
2003年11月16日
8分钟阅读

135763

3163
一个简单的类似电子邮件的系统,用于处理从 HTML 表单发布的消息。
引言
切勿在网上泄露您的电子邮件!此解决方案消除了垃圾邮件、病毒和个人电子邮件泄露的风险。通过使用数据库接收消息和 SMTP 发送回复,您可以无所畏惧地管理网站管理员或其他类型的电子邮件。此系统使用一个简单的 HTML 表单,该表单会发布到一个 ASP 页面,该页面将信息保存到 SQL Server 数据库中。然后使用熟悉的类似电子邮件的界面管理消息,并将回复和转发作为原生 SMTP 电子邮件发送。
特点:
背景
我的想法是减少发送到我们网站管理员邮箱的垃圾邮件数量,但我们希望发送实际的电子邮件回复。这就是我提出的系统,然而,一旦我开始,我就停不下来。我添加了所有正常的电子邮件功能(除了附件),例如回复、转发和个人文件夹。我还添加了一个地址簿,这样您可以存储联系人,然后使用它们将回复和转发发送给多人。
由于发送 SMTP 邮件的地址不存在,因此人们回复它的风险为零。
由于我有一个使用 domain_id
标识符的内容管理系统,我希望能够向我的许多客户提供网站管理员电子邮件程序,而无需为每个客户创建数据库,因此我添加了 domain_id
标识符以允许许多域使用它而不会交叉污染。您会看到几乎所有函数都将按此标识符进行过滤。
数据库是 SQL Server。我尝试使用 Access 数据库,但我在让 Access 支持单个 SQL 调用中的多个记录集时遇到了麻烦。我没有详细描述数据库,而是包含了一个将构建 SQL 数据库的脚本。data_access.asp 包含写入 SQL 脚本的用户名和密码。只要它们在两个地方都相同,就可以更改。当我集成这些时,我使用单独的配置文件。对于演示,我只是硬编码了它们。
此应用程序充满了相当复杂的代码,所以我希望每个人都喜欢浏览它。许多函数和模块都可以用于比此应用程序更多的应用程序中。如果您需要原生 SMTP 电子邮件创建器,我在此应用程序中包含了我的。
使用代码
Install
代码只需复制到任何 ASP 虚拟目录即可。不需要 global.asa。提供了一个数据库脚本,只需在具有创建数据库权限的 SQL Server 上运行即可。
配置
在安装文件夹 include/data_access.asp 中,只需将设置替换为您的服务器信息,即可完成设置。在我的应用程序中,这是一个应用程序变量。您可以根据需要进行处理。
Run
该应用程序有两个部分
- 您放在公共端的提交消息页面和一个用于处理发布数据的 ASP。
- post.htm
- update_message.asp
- 您在内部用于查看和回复消息的网站管理员电子邮件应用程序。
我提供了一个页面 (default.htm),以便您可以出于演示目的访问两者。如果它们在同一服务器上,最好使用登录屏幕或 Windows 身份验证来保护网站管理员电子邮件目录。
SMTP
SMTP 电子邮件的工作方式是简单地将结构化文本文件放置在服务器的 mailroot 中。需要在服务器上配置 SMTP,以便拾取文件并实际发送。代码将首先在临时目录中创建电子邮件,然后移动项目。这消除了 SMTP 尝试在完成写入文件之前拾取文件的问题。我添加了一些命名函数以确保在多用户环境中的唯一性。要配置这两个目录的路径,请打开 include 目录中的 mod_main.asp 并根据需要更改路径名。
数据库
就表结构而言,数据库相当简单,但有一些触发器用于级联删除以及一些用于管理已读项目和通知功能的触发器。我曾经有一个使用此系统发送内部邮件的工作副本,它支持当用户读取项目时的通知。它还支持优先级消息。数据库仍然有这些项目的字段,但我已经删除了代码。一个聪明的人可以重新连接此功能。如果您需要任何帮助和/或提供我的一些旧代码来让您在内部提交消息,请告诉我。真正唯一的区别是,内部系统有一个用户列表,并且消息与这些人的唯一 ID 相关联。因此,需要登录才能识别用户并允许每个人阅读自己的邮件。当发件人或收件人读取或删除项目时,有一系列标志。我为每个人存储了设置,并允许他们单独移动项目。对于每个用户来说,他们看起来像是在移动自己的消息副本,但实际上是更新了相同的数据记录。
一旦收件人和发件人都从邮箱中删除了项目,删除记录的触发器仍然存在于数据库中。
表格
消息
[id] [int] IDENTITY (1, 1) NOT NULL , [msg_text] [varchar] (8000) , [user_id] [varchar] (100), [last_modified] [datetime] NULL , [active_flg_sender] [int] NULL , [msg_subject] [varchar] (500) NULL , [notify_req] [int] NULL , [was_delivered] [int] NULL , [priority] [int] NULL , [msg_recip] [varchar] (1000) NULL , [folder_id] [int] NULL , [domain_id] [int] NULL , [parent] [int] NULL
msg_folders
[id] [int] IDENTITY (1, 1) NOT NULL , [folder_name] [varchar] (100) NOT NULL , [domain_id] [int] NOT NULL
msg_recip
[id] [int] IDENTITY (1, 1) NOT NULL , [recip] [varchar] (50) NULL , [msg_id] [int] NULL , [active_flg_recip] [int] NULL , [msg_read] [int] NULL , [reply_id] [int] NULL , [foward_id] [int] NULL , [read_time] [datetime] NULL , [folder_id] [int] NULL , [reply_date] [datetime] NULL
user_addresses
[id] [int] IDENTITY (1, 1) NOT NULL , [first_name] [varchar] (50) NULL , [last_name] [varchar] (50) NULL , [email] [varchar] (150) NULL , [domain_id] [int] NULL
代码
我已在所有文件中添加了注释,因此希望它们不言自明,但以防万一,这里是系统中文件的快速摘要。我没有在此列表中包含 HTML 文件,仅仅是因为它们中没有任何实际代码。此外,只有两个:default.htm 和 post.htm。
- addressbook.asp – 这是地址簿的主窗口。它有一个用于实际列表的
IFRAME
。 - addresses_inc.asp – 此文件位于 addressbook.asp 窗口中的
IFRAME
内。我这样做只是因为我需要一个分离,这样我就可以有滚动条。 - contactdetail.asp - 此文件是用于添加联系人的输入表单。对于此系统,我只存储名字、姓氏和电子邮件。您当然可以存储任何您想要的内容。
- inframe.asp – 这与 default.asp 相同。它可以包含在页面中,也可以作为主页面。
- messagedetail.asp – 这是实际的消息窗口。它显示方式与普通电子邮件窗口相同,并带有回复和转发消息的选项。
- sendmessage.asp – 这是如果您单击消息上的回复或转发时弹出的窗口。它有一个按钮可以访问地址簿以添加其他地址。它会自动填充“收件人”字段、主题(带有经典的 RE 和 FW 前缀)和原始消息。
- update_message.asp – 此文件由公共 HTML 表单使用,用于将新消息发布到系统中。
- updatecontact.asp – 此文件是用于添加/编辑和删除联系人的后端代码。
- updatefolder.asp – 此文件是用于添加/编辑和删除个人文件夹的后端代码。
- updatemessage.asp – 此文件是用于执行消息所有操作的后端代码,例如回复、转发、移动、删除和标记为已读。当消息被回复或转发时,此文件会调用 make_email.asp 生成电子邮件文本文件。对于演示,此功能已关闭。
- viewmessages.asp – 此文件基本上是收件箱列表。它由 inframe.asp 包含。它显示所有新帖子。
- viewreadmessages.asp – 此文件显示所有已读但尚未移动到另一个个人文件夹的列表。它由 inframe.asp 包含。
- viewsentmessage.asp – 此文件显示所有已发送的电子邮件。它由 inframe.asp 包含。
- viewpersonalfolder.asp – 这是一个通用的个人文件夹窗口。所有个人文件夹都使用同一个文件。它显示已移动到文件夹的任何消息,无论是否已读。如果未读,未读消息旁边会显示一个图标。
- CDIwm.js – 这是一个全局 JavaScript 函数模块。它几乎包含在每个文件中。
- mod_main.asp - 这是每个 ASP 页面中的全局 include 文件。我将所有多余的函数都放在这里。它包含 data_access.asp,这是全局数据连接模块。对于此应用程序,mod_main 是空的,但我包含它,因为它是我的标准架构组件之一。
- data_access.asp - 这是一个我在所有应用程序中使用的模块。它包含所有必要的函数,可以使用 ADO 轻松连接到数据库。我在 VB、ASP 甚至 Access 中都使用它。
- make_email.asp – 这是一个通用的原生 SMTP 电子邮件创建模块。它根据 mod_main.asp 中配置的路径处理文件的所有创建、命名和移动。