好吧,我已经从事这个项目很多年了,我想我可以与世界分享我的发现。
IIS SMTP 服务器
使用 IIS SMTP 服务器创建的所有邮件首先都会发送到分拣目录。如果您要发送一封邮件,那么您将必须在矩阵时间内操作才能真正看到它,因为它可能会立即发送。
单封邮件在发出时会经过 IIS 中的队列文件夹。
如果您想查看性能计数器来监控此过程,您可以查看“远程队列长度”。 (这样做的原因是“本地队列长度”监视网络内“本地”发送的邮件。在这种情况下,“远程”指的是“外部世界”。当我们发送时,“本地”的具体定义让我无法理解没有本地邮件,但我想这意味着排队进入服务器上 IIS 的特定安装或其任何本地分组中包含的邮箱。)
从 Exchange 的角度来看,这似乎相当于在 Exchange 域内发送的邮件以及从该域发送到更广阔的世界的邮件。
无论如何。远程队列长度并不能说明全部情况。您还必须查看远程重试队列、当前出站连接数以及队列目录中的实际文件数。
原因如下:
- 远程队列:所有未发送的消息
尚未发送,无论多少次
这已经尝试过了。的数量
当前分配给任何打开的邮件
连接不计入
都处于“被考验”的状态。
- 远程重试队列:所有消息
尚未发送,已在
过去的某个时刻,被分配
到一个开放的连接进行交付。
显然交货必须有
失败或该消息将是
发表。当前有任何消息
分配给一个打开的连接
重试不计算在内。
- 当前出站连接:显示何时
服务器正在尝试发送排队的数据
邮件,可以多条消息
分配给出站连接。
这样分配的消息不
计入远程队列或
远程重试队列。身体的
- 队列目录中的文件:这个
显示仍在的邮件数量
队列目录。这会
随着邮件成功而减少
发表。
Example:如果队列目录中有 0 个出站连接和 50 封邮件,则远程队列、重试队列和物理文件都将在 50 时读取。当重试标志出现时(这是 IIS 中的设置),连接数会增加,并且队列中的邮件数量减少。在邮件送达之前,物理文件的数量保持不变。但是,由于当前连接上可以发送多封邮件,1 个连接可能会导致远程队列和重试队列长度为 47 或更低。如果在重试事件期间成功传送任何邮件,则队列目录中的物理文件数量将会减少。当连接关闭时,队列计数器应该全部再次稳定。
Logging
.Net 的邮件库可以指定与 IIS 默认值不同的分拣目录。在这里,您可以对邮件进行排队并获得定制服务,偶尔将邮件移动到 IIS 目录中,IIS 服务将在该目录中接管并发送排队的邮件。
为此,您将查找 SmtpClient 对象的“DeliveryMethod”属性,该属性应设置为 SmtpDeliveryMethod.SpecifiedPickupDirectory。
要实际设置 SpecifiedPickupDirectory,您应该设置 SmtpClient 的 PickupDirectoryLocation 属性。
当邮件传递到此位置时,它们将存储为 .eml 文件。文件名是 GUID。这意味着多封电子邮件将以基本上随机的顺序发送。理论上,如果需要,您可以编写代码来解决这种情况。 .eml 文件遵循标准格式,可以通过在记事本中打开 .eml 来读取。解析它将使您能够提取日志信息。
我希望这篇关于 IIS 中 SMTP 服务器工作方式的高级概述能够对与我在 3 月份处于类似职位的人有所帮助。