与 .Net 中的 IIS SMTP 服务器进行有意义的交互

2024-05-03

我们的公司每周都会向大量订阅者发送新闻通讯。当公司还很年轻时,在我加入之前,他们使用了一些群发邮件程序的“免费”版本,花了六个小时才发送 5K 封邮件,并且违反了互联网上的每一次反向 DNS 检查。

我将其升级为定制的 .Net 小部件,该小部件在正确的服务器上运行,并且可以在半小时内发送大约 20,000 封邮件,并且完全符合 DNS 要求。不幸的是(或者幸运的是,这取决于你的立场)我们的邮件列表现在已经无法满足这个简单的工具了。特别是它缺乏足够的限制,它可以发送比服务器可以轻松发送的邮件更多的邮件。我需要实际监视 IIS SMTP 服务器的可用外发邮件存储分配的满度,并相应地限制负载。

不幸的是,我找不到有关邮件对象在(或即使)变成邮件时去往何处的信息。如果我有地方可以观看,我可以实现一个文件系统观察器,但目前我没有。如果没有创建实际的邮件文件,我想我将不得不创建一个来实现该功能,但我需要知道把它放在哪里。让系统以某种方式确认发送也会更让人放心,但我不知道如何从系统中检索表明邮件已发送的数据。

广泛的谷歌搜索已证明这些观点含糊其辞;所以我想知道这里是否有人知道我可以在哪里获得这些问题的指南,或者可以为我指明正确的方向。

非常感谢。

编辑:最后我放弃了测量 IIS SMTP 服务器上的吞吐量,因为这是一项糟糕的工作。就是看起来不想玩了。我现在在一个单独的位置进行日志记录,然后将其分流到 SMTP 服务器。我仍然不知道有谁真正费心去监视 IIS SMTP 服务器的行为,所以在撰写本文时这个问题还没有得到解答。

那好吧...


好吧,我已经从事这个项目很多年了,我想我可以与世界分享我的发现。

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 月份处于类似职位的人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与 .Net 中的 IIS SMTP 服务器进行有意义的交互 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现

随机推荐

  • Maven 父级定义中的相对路径

    在定义父工件时 我是否需要将其包含在子项目的 pom 中 例如 Is the
  • 动画后 SVG 路径发生变化

    我正在画一个
  • HtmlUnit 的替代方案

    迄今为止 我一直在研究可用的无头浏览器 发现 HtmlUnit 的使用非常广泛 与 HtmlUnit 相比 我们是否有任何具有可能优势的 HtmlUnit 替代方案 谢谢 纳恩 据我所知 HtmlUnit 是最强大的无头浏览器 你对此有什么
  • 生成落在多边形或形状内的点网格的最快方法?

    我在 python 中使用 shapely 并尝试在网格中生成均匀间隔的点 这些点在最快的 O n 时间内落在形状内 形状可以是任何闭合多边形 而不仅仅是正方形或圆形 我目前的做法是 找到最小 最大 y 和 x 来构建一个矩形 给定间距参数
  • 如何在android中的视频视图中获取视频的总长度

    我有一个问题 我想获取在视频视图中运行的视频的总长度 为此我正在使用视频视图的 getDuration 方法 但当我将其与 currentPosition 进行比较时 它总是返回 1 实际上我希望如果视频的当前位置等于视频的总长度那么它应该
  • Azure DevOps 扩展自定义 UI

    我的任务是开发 Azure DevOps 的扩展以自动化构建过程 自定义构建任务 需要注意的是 实际上我正在开发的是一系列构建任务 每个任务都包含常规输入 但由于历史原因 所有这些构建任务都应该分组 用户可以从管道设置中任务页面的下拉列表中
  • wpf 调试错误输出 System.WIndows.Data 错误 25

    我有一个自定义样式的组合框 效果很好 它被放置在用户控件内并绑定到数据结构 我使用 DisplayMemberPath 仅显示组合框文本框中的一个元素 ComboBox 样式取自 MSDN 并被多次使用 所以这里就不显示了
  • Python Suds URLError 名称或服务未知问题

    有一个奇怪的问题 我可以成功创建一个 suds 客户端并将其打印出来 gt gt gt client Client the wsdl url gt gt gt print client Suds https fedorahosted org
  • Node2vec 的工作原理

    我一直在读关于node2vec https cs stanford edu jure pubs node2vec kdd16 pdf嵌入算法 我有点困惑它是如何工作的 作为参考 node2vec 由 p 和 q 参数化 并通过模拟来自节点的
  • C#:如何在虚拟模式下有效过滤(隐藏)ListView 项目?

    C 如何在虚拟模式下有效过滤 隐藏 ListView 项目 我正在寻找一种在虚拟模式下过滤 隐藏 显示 ListView 中的项目的方法 我将我的项目缓存在列表视图项目数组中 如何有效地使其在按下过滤按钮时仅显示特定的列表视图项目 然后在按
  • 使用多个列组重塑 Pandas Dataframe

    我目前有一个宽数据框 如下所示 Index ID1 ID2 Foc A Foc B Foc C Sat A Sat B Sat C 0 r 1 10 15 17 100 105 107 1 r 2 20 25 27 110 115 117
  • 为什么GCC不报告未初始化的变量?

    include
  • 单例模式面试

    我最近在一次采访中被问到与java相关的问题 代码如下 因为我对java非常陌生 几乎没有用Java编写代码 所以我真的不知道下面的代码是做什么的 问题是 使用以下代码选择描述最糟糕情况的选项 public class Bolton pri
  • java.lang.IllegalStateException:密码未初始化

    我已经在 Android 应用程序中实现了加密 解密 我添加了一个加密类 该类已成为单例类 部分代码如下 public class Encryption private SecretKeySpec mKey null private Cip
  • 获取当前 URL/URI,不带某些 $_GET 变量

    在 Yii 中如何获取当前页面的 URL 例如 http www yoursite com your yii application lg pl id 15 但不包括 GET lg 无需手动解析字符串 我的意思是 我正在寻找类似的东西Yii
  • android:应用内计费:错误响应:7:项目已拥有

    我正在学习为我的应用程序实现应用程序内计费 以便人们可以在按下捐赠按钮时捐赠美元 用户可以多次捐赠 即购买的是消耗品 下面的代码来自 TrivalDrive 示例和网上的一些教程 Code IabHelper mHelper static
  • 如何使用jq通配符

    我有以下 json details car bmw addresses ext 118 21 8 0 29 version 4 addr 89 Psr version 6 addr 56 apT The key ext 118 21 8 0
  • 应用程序从最近的应用程序列表中滑出后,Android 服务崩溃

    我有一项由活动启动 未绑定 的服务 如果活动被破坏 例如按后退按钮 服务将继续运行 这当然是有意的 但是 如果我将活动从 最近的应用程序 列表中删除 该服务将立即重新启动 这是可重现的 每次活动 应用程序从列表中滑出时 都会对服务的 onC
  • 在哪里使用引号?

    CSS 中应在何处以及如何使用引号 width 150px or width 150px height 50 or height 50 font family Verdana or font family Verdana 仅当属性值中包含空
  • 与 .Net 中的 IIS SMTP 服务器进行有意义的交互

    我们的公司每周都会向大量订阅者发送新闻通讯 当公司还很年轻时 在我加入之前 他们使用了一些群发邮件程序的 免费 版本 花了六个小时才发送 5K 封邮件 并且违反了互联网上的每一次反向 DNS 检查 我将其升级为定制的 Net 小部件 该小部