使用C#获取SMTP服务器证书

2023-12-04

如何使用 C# 连接到支持 STARTTLS 的 SMTP 服务器并获取其 SSL 证书?我知道可以使用 openssl 来完成类似的事情

openssl s_client -starttls smtp -crlf -connect 192.168.0.1:25

我不想调用 openssl 并解析其输出。非常感谢如何使用 C# 完成此操作的示例。


一种方法是绑定到ServerCertificateValidationCallback回调并向服务器发送测试消息。邮件消息可能会失败,但证书仍然有效。

    private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteServerCertificateValidationCallback);
        using (System.Net.Mail.SmtpClient S = new System.Net.Mail.SmtpClient("smtp.gmail.com"))
        {
            S.EnableSsl = true;
            using (System.Net.Mail.MailMessage M = new System.Net.Mail.MailMessage("[email protected]", "[email protected]", "Test", "Test"))
            {
                try
                {
                    S.Send(M);
                }
                catch (Exception)
                {
                    return;
                }
            }
        }
    }
    private bool RemoteServerCertificateValidationCallback(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
        Console.WriteLine(certificate);

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

使用C#获取SMTP服务器证书 的相关文章

随机推荐

  • Spring Batch 的并行线程处理数量上限为 10

    我有以下任务执行器 用于运行带有分区的 10 秒睡眠时间的 tasklet
  • 在 D3.js 中添加带有嵌套条目的属性

    我已使用 d3 nest 进行按行值分组 代码是这样的 function createNestingFunction propertyName return function d return d propertyName var leve
  • 使用带参数的函数时 ebp 和 esp 在堆栈中的行为

    我想了解更多关于堆栈的知识 特别是 当调用带有参数的函数时会发生什么 为此 我编写了以下代码 include
  • 仅保留 SQL 数据库中的前 50 条记录并删除其余记录

    我有一个分数表 由 2 个字段组成 name and 高分 像这样的东西 name score John 2450 Alice 2420 etc 我需要delete直到前 50 名分数为止的所有行 是否可以不创建另一个临时表 请尝试这个 d
  • 理解汇编语言的 mul 和 imul 指令的问题

    我正在学习80386保罗 考特的 PC 组装 mul source 如果操作数是字节大小 则将其乘以 AL 中的字节 注册和结果存储在 AX的16位 fine 如果源是 16 位 则将其乘以 AX 中的字和 32 位结果存储在 DX AX
  • IDispose 对象是否可以没有可用的 Dispose 方法

    我在用文件助手在一个项目和班级中MultiRecordEngine public sealed class MultiRecordEngine EventEngineBase IEnumerable IDisposable 这个类实现了ID
  • Node.js / Mongodb 插入回调返回未定义

    当我运行下面的简单代码来插入新文档时 collectionUsers insert name john function err records if err throw err console log Id of new document
  • 如何管理多个开发人员的合并更新? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我与一个中型开发团队合作 他们都致力于同一个产品 开发人员编写代码来解决功能或错误修复问题 然后将其签入我们的主要开发分支 在 Subversion 中 一旦 QA 人员对票证进
  • frida hook 原生非导出函数

    我出于学习目的逆向这个 Android 应用程序 该应用程序在本机层上实现了所有有趣的功能 因此我在 Arm Android Studio 映像上运行该应用程序并逆向共享库 因此该应用程序正在使用 ghidra 进行调用我设法将共享对象反编
  • 如何使此正则表达式替换适用于所有字符,而不仅仅是第一个字符?

    我正在尝试用连字符替换字符串中的所有空格 我试过这个 h3Text replace s 但它仅替换空格的第一个实例 而不替换其后的空格 使它替换的正则表达式是什么all空位 try h3Text replace s g the g标志是这里
  • 如何在Python matplotlib中的LaTeXed下标中包含字符串链[重复]

    这个问题在这里已经有答案了 我想使用 LaTeX 在 matplotlib 图的图例中编写一个带有下标的变量 解决此类问题的一种可能的代码可能是 import numpy as np import matplotlib pyplot as
  • 使用 JSON 每 x 秒更新传单标记位置

    我的地图上有一个标记 代表国际空间站的当前位置 从http open notify api herokuapp com iss now json callback 我还试图让它每 1 秒移动一次 以跟随空间站的轨道 这是我现在的代码 get
  • 在变量周围添加引号

    我需要从 SQL 导出数据并导入 SAS 地址字段的字符串中间有 我尝试使用 CSV 和制表符分隔 但每次 SAS 都会由于 而打破地址字段 我尝试使用另一个问题中的代码将逗号替换为空格 但它不起作用 update temp2 set ST
  • WinForm 应用程序 UI 在长时间运行的操作期间挂起

    我有一个 Windows 窗体应用程序 我需要使用一个 for 循环 其中有大量远程调用 大约 2000 3000 个调用 在执行 for 循环时 我失去了对表单和表单控件的控制 因为它变成了一个大进程 有时它显示 未响应 但如果我等待很长
  • C语言中如何使用void指针?

    以下是我无法理解如何完成的几个函数声明 我扫描了网络以了解 void 指针是什么 并且我知道它必须转换为有用的东西 因为它只指向某个内存块 但我不知道这如何帮助完成这些声明 type of comparison function that
  • Java SAXParser 解析无效的 xml [重复]

    这个问题在这里已经有答案了 我正在尝试解析一些无效的 xml 因为属性没有用引号引起来 有什么方法可以解决这个问题吗 下面是一个简单的例子 以及java代码 XML
  • 将所有标准输入读取到 Java 字节数组中

    现代Java 仅使用标准库 最简单的阅读方式是什么all of标准输入直到 EOF 转换为字节数组 最好不必自己提供该数组 标准输入数据是二进制数据 不是来自文件 IE 像鲁比的东西 foo stdin read 我能想到的唯一的部分解决方
  • 是否可以自动选择正确的客户端证书?

    我已经使用 SSL 客户端证书配置了 Apache httpd 网站 以便只有在 Web 浏览器中安装了正确证书的用户才能访问该网站 如果仅安装了一个客户端证书 Web 浏览器将自动选择它 这不是默认设置 但可以在设置对话框中的某处进行配置
  • Invoke-WebRequest,带参数的 POST

    我正在尝试 POST 到 uri 并发送参数username me Invoke WebRequest Uri http example com foobar Method POST 如何使用 POST 方法传递参数 将参数放入哈希表中并像
  • 使用C#获取SMTP服务器证书

    如何使用 C 连接到支持 STARTTLS 的 SMTP 服务器并获取其 SSL 证书 我知道可以使用 openssl 来完成类似的事情 openssl s client starttls smtp crlf connect 192 168