现在的位置: 首页 > 综合 > 正文

使用 SMTP 发送电子邮件

2013年10月04日 ⁄ 综合 ⁄ 共 3953字 ⁄ 字号 评论关闭
使用 SMTP 发送电子邮件
文章来源:岚山夜话
HTTP://WWW.33D9.COM

SMTP 的工作方式?
简单邮件传输协议是核心 Internet 协议 (IP) 之一,其设计主旨是可靠有效地传输电子邮件。
SMTP 的最初构想相对来说比较简单。用户或应用程序(此处为 Duwamish Online)撰写邮件,
其中包含收件人电子邮件地址(例如 "johndoe@somecompany.com")、邮件主题及邮件内容。
传递邮件的第一步是将邮件传送至指定的 SMTP 服务器。SMTP 服务器根据收件人电子邮件地址
的域名(例如 "somecompany.com"),开始与域名系统 (DNS) 服务器通信,DNS 服务器将查找
并返回该域的目标 SMTP 服务器的主机名(例如 "mail.somecompany.com")。
最终,启动邮件传递的 SMTP 服务器将通过传输控制协议 / Internet 协议的端口 25 直接与
目标 SMTP 服务器进行通信。如果收件人电子邮件地址的用户名与目标服务器中的一个授权用
户帐户匹配,则原始电子邮件将最终传送至该服务器,等待收件人通过客户程序收取。
如果启动邮件传递的 SMTP 服务器无法与目标服务器直接通信,则 SMTP 协议能够提供通过一
个或多个中继 SMTP 服务器传送邮件的机制。中继服务器将接收原始邮件,然后尝试将其传递
至目标服务器,或重定向至另一中继服务器。此过程将一直重复,直到邮件传递至目标服务器,
或超过指定的超时时间为止。

在 Windows 2000 中设置 SMTP
从 Microsoft Windows NT?的以前版本开始,SMTP 服务就一直作为 Internet 信息服务的一
个组件。由于 SMTP 服务在 Duwamish Online 中主要用来处理容量相对较小的待发电子邮件(
用于确认订单),所以在业务初期不必专门用一台计算机来实现此功能。最后,我们决定将
SMTP 服务放在订单处理服务器上,该服务器已连接到外部的 Internet 网段。

下面是用来为 Duwamish Online Web 站点设置 SMTP 服务的步骤。

配置 SMTP 服务
如果 SMTP 服务安装在连接 Internet 的主机上,且面向 Internet 的防火墙不阻止 SMTP 通
信访问端口 25,则 SMTP 服务的默认设置应能传递所有待发电子邮件。不过,可能仍有一些要
为 SMTP 服务器考虑的安全设置。其中大多数设置都可通过“Internet 服务管理器”管理控制
台进行更改。

若要启动 IIS 管理控制台,请执行以下操作:

从开始菜单,指向程序/管理工具。
单击 Internet 服务管理器以启动管理控制台。
若要设置服务器日志记录,请执行以下操作:

在 Internet 信息服务对话框的左侧窗格中展开目录树。用鼠标右键单击默认 SMTP 虚拟服务
器,然后选择属性。
在属性对话框中单击常规选项卡。为该服务器选中启用日志记录复选框。默认情况下不启用该
属性。
选择首选的日志文件格式。默认设置为 W3C 扩充日志文件格式。
单击日志文件格式下拉菜单旁边的属性按钮。
如果需要,请调整日志文件翻转的时间安排和文件名。
单击扩展属性选项卡。
选择任何感兴趣的项,然后单击确定。
注 为了限制日志文件的大小,不应选择过多的项。此处建议了一些可能有用的项:日期、时间、
客户 IP 地址、用户名、服务名、方法、发送字节数以及接收字节数。

若要设置访问控制,请执行以下操作:

在属性对话框中单击访问选项卡。单击中继按钮,控制可将电子邮件中继至 SMTP 服务器的计算机。
在中继限制对话框中单击添加。
在计算机对话框中输入允许通过 SMTP 服务器中继电子邮件的计算机 IP 地址。单击确定应用更改。
注 如果待发邮件从同一台计算机发送到 SMTP 服务器,则中继权限的默认设置将能很好地工作。
不过,如果邮件从另一台计算机发出,则需要将该计算机的 IP 地址或域名添加到权限列表中,
以使中继正常工作。

指定智能主机进行中继
如果 SMTP 服务器位于阻止所有直接 SMTP 通信(通过端口 25)的防火墙之后,则需查找网络上是
否有允许将所有 SMTP 邮件中继至 Internet 的智能主机。

从根本上说,智能主机可以是另一台具有待发电子邮件中继权限的 SMTP 服务器,它将邮件从其他
内部 SMTP 服务器直接中继至 Internet。因此,智能主机应能同时连接内部网络和 Internet,这
样才能充当电子邮件网关。

识别出网络上的智能主机后,即可设置 SMTP 服务器。

若要设置 SMTP 服务器,请执行以下操作:

在属性对话框中单击传递选项卡,然后单击高级按钮,打开高级传递对话框。
在智能主机字段中键入智能主机完全合格的域名 (FQDN)。或者输入智能主机的 IP 地址,并在前后
都加上 [ 和 ],如“[10.10.10.1]”。[] 有助于加快 DNS 的查询进程。
单击确定完成上述更改。
验证 SMTP 服务
有多种方式可验证 SMTP 服务是否工作正常。

通过电子邮件客户程序进行测试
首先,可选择使用标准的 Internet 电子邮件客户程序(如 Microsoft Outlook?Express)进行快
速验证。找到可指定待发电子邮件 (SMTP) 服务器的位置,将其更改为新的 SMTP 服务器域名。向通
常使用的电子邮件地址发送测试邮件,验证发送是否正常。

通过收取目录进行测试
也可以撰写一个符合 SMTP 规范 (RFC 822) 的简单电子邮件文本文件。下面是在记事本中输入的示例
文本文件内容:

From:myname@mydomain.com
To:someone@somedomain.com
Subject:testing

This is the test message body.

只需将该文本文件复制或移到安装了 SMTP 的收取目录中。(默认路径应为 "root:/Inetpub/mailroot
/Pickup"。)SMTP 服务会定期检查收取目录,并尝试发送在该目录中找到的所有邮件。验证是否能在
目标收件箱中收到该测试邮件。

有关正确格式化邮件应遵循的 RFC 822 规范的详细信息,请参阅 RFC 822 邮件格式。

通过 CDO 进行测试
验证 SMTP 服务的另一方式是使用 Windows 2000 协作数据对象 (CDO) 编写简单的 Microsoft Visual
Basic?Scripting Edition (VBScript) 脚本。

CDO for Windows 2000(a.k.a. CDO 2.0 或 Cdosys.dll)是一套设计用来简化 Internet 邮件创建或
处理的协作组件。有了 CDO,开发人员可以不必编写自己的 SMTP 通信代码,而是使用 CDO 收发使用
SMTP 协议的邮件,也可通过本地收取目录收发邮件。有关详细信息,请参阅 CDO for Windows 2000
的相关文章。

下面是一个 VBScript 示例,说明如何使用 CDO 通过 SMTP 服务传递邮件:

set msg = WScript.CreateObject("CDO.Message")
msg.From = "myname@mydomain.com"
msg.To = "someone@somedomain.com"
msg.Subject = "testing"
msg.TextBody = "This is a test message body."

msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")
= "smtpserver.mydomain.com"

msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

msg.Configuration.Fields.Update
msg.Send

上述代码示例的前五行创建 CDO 对象,并指定邮件的基本信息。

接下来的两行代码使用 CDO Configuration 对象设置各配置设置的字段值。每个字段由两部分组成:
名称空间前缀(如 "http://schemas.microsoft.com/cdo/configuration/")和本地名称
(如 "smtpserver")。

该机制基于万维网联盟 (W3C) 的 XML 格式的名称空间推荐标准
(http://www.w3c.org/TR/REC-xml-names/),主要用于提供一致性,以及促进与其他相关版本的 CDO
组件的兼容性。

字段 "smtpserver" 指定 SMTP 服务器的域名(或 IP 地址),而字段 "sendusing" 定义应使用本地
SMTP 服务投信目录发送邮件,还是通过网络直接发送至 SMTP 服务器。后一字段的值设置为 2,表
示通过网络将邮件发送至指定的 SMTP 服务器。

最后两行代码更新配置设置,并启动邮件传递。

使用 CDO 组件的这一方法对于验证 SMTP 服务来说可能显得多余。不过,该脚本经证明对其他系统管
理任务很有用。例如,当某些系统计数器超出指定阈值时,可在为电子邮件通知编写的“性能日志和警
报”程序中使用该脚本。

识别失败的传递
无论因何种原因而无法传递电子邮件时(例如,用户名或电子邮件地址错误),都会将该传递失败的
邮件重定向至死信目录。死信目录的默认位置应为 "root:/Inetpub/mailroot/Badmail"。检查被拒
电子邮件的内容,并查找是否有任何特定的错误消息。如果可能,则更正错误,并再次通过上面讨论
的一种传递方法重发邮件。

除死信目录外,电子邮件也可在队列目录中保存一段指定时间。(此设置的指定方法为:在默认
SMTP 虚拟服务器属性对话框的传递选项卡中调整出站重试间隔。)如果因为网络繁忙或网络连接断
开而无法立即传递邮件,邮件则会存储在队列目录中,并按指定间隔再次发送。如果 SMTP 在几次传
递尝试不成功之后放弃传递,邮件将最终移至死信目录。

抱歉!评论已关闭.