gpt4 book ai didi

.net - 我们如何使用 SmtpClient 记录 SMTP 对话?

转载 作者:行者123 更新时间:2023-12-04 10:37:30 25 4
gpt4 key购买 nike

例如,为了进行故障排除,我需要查看来回发送的 SMTP 消息:

OUT : EHLO 机器名
IN : 250-ReallyCoolEmailServer 你好 [10.24.41.72]
在 : 250 尺寸
IN : 250-流水线
在:(……等等……)
OUT : MAIL FROM:
IN : 250 ... 发件人确定

...等等。

我在 the documentation 中没有找到任何日志记录选项.这里我能找到的唯一问题是关于 SmtpClient要么不谈论看到实际的对话,要么谈论使用第三方工具,如 WireShark。

这似乎是一个很大的遗漏,所以我猜我只是缺少一些基本的东西。 :-)

最佳答案

就我自己而言,我实际上更喜欢 Wireshark 等“公正”的外部工具来查看实际情况。 SmtpClient确实有跟踪——它将输出发送到 System.Net跟踪——但这不包括实际通过网络传输的数据。当然,您可以使用 System.Net.Sockets跟踪,通过像这样配置您的应用程序:

<system.diagnostics>
<sources>
<source name="System.Net">
<listeners>
<add name="TraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="TraceFile"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="TraceFile"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.log"
/>
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose"/>
<add name="System.Net.Sockets" value="Verbose"/>
</switches>
<trace autoflush="true" />
</system.diagnostics>
但不幸的是,这产生的输出是一个原始套接字转储,它远不如 Wireshark 跟踪方便。
套接字转储的示例:
System.Net Verbose: 0 : [0992] SmtpClient::.ctor(host=127.0.0.1)
System.Net Information: 0 : [0992] Associating SmtpClient#47606018 with SmtpTransport#5689696
System.Net Verbose: 0 : [0992] Exiting SmtpClient::.ctor() -> SmtpClient#47606018
System.Net Verbose: 0 : [0992] SmtpClient#47606018::Send(MailMessage#5138334)
System.Net Information: 0 : [0992] SmtpClient#47606018::Send(DeliveryMethod=Network)
System.Net Information: 0 : [0992] Associating SmtpClient#47606018 with MailMessage#5138334
System.Net Information: 0 : [0992] Associating SmtpTransport#5689696 with SmtpConnection#31950948
System.Net Information: 0 : [0992] Associating SmtpConnection#31950948 with ServicePoint#34920472
System.Net.Sockets Verbose: 0 : [0992] Socket#22453229::Socket(InterNetwork#2)
System.Net.Sockets Verbose: 0 : [0992] Exiting Socket#22453229::Socket()
System.Net.Sockets Verbose: 0 : [0992] Socket#22453229::Connect(1:25#16777318)
System.Net.Sockets Verbose: 0 : [0992] Exiting Socket#22453229::Connect()
System.Net Information: 0 : [0992] Associating SmtpConnection#31950948 with SmtpPooledStream#48167163
System.Net.Sockets Verbose: 0 : [0992] Socket#22453229::Receive()
System.Net.Sockets Verbose: 0 : [0992] Data from Socket#22453229::Receive
System.Net.Sockets Verbose: 0 : [0992] 00000000 : 32 32 30 20 77 32 6B 20-4D 69 63 72 6F 73 6F 66 : 220 w2k Microsof
System.Net.Sockets Verbose: 0 : [0992] 00000010 : 74 20 45 53 4D 54 50 20-4D 41 49 4C 20 53 65 72 : t ESMTP MAIL Ser
System.Net.Sockets Verbose: 0 : [0992] 00000020 : 76 69 63 65 2C 20 56 65-72 73 69 6F 6E 3A 20 35 : vice, Version: 5
System.Net.Sockets Verbose: 0 : [0992] 00000030 : 2E 30 2E 32 31 39 35 2E-36 37 31 33 20 72 65 61 : .0.2195.6713 rea
System.Net.Sockets Verbose: 0 : [0992] 00000040 : 64 79 20 61 74 20 20 53-61 74 2C 20 33 31 20 44 : dy at Sat, 31 D
System.Net.Sockets Verbose: 0 : [0992] 00000050 : 65 63 20 32 30 30 35 20-32 32 3A 31 33 3A 31 34 : ec 2005 22:13:14
System.Net.Sockets Verbose: 0 : [0992] 00000060 : 20 2D 30 36 30 30 20 0D-0A : -0600 ..
System.Net.Sockets Verbose: 0 : [0992] Exiting Socket#22453229::Receive() -> 105#105
System.Net.Sockets Verbose: 0 : [0992] Socket#22453229::Send()
System.Net.Sockets Verbose: 0 : [0992] Data from Socket#22453229::Send
System.Net.Sockets Verbose: 0 : [0992] 00000000 : 45 48 4C 4F 20 77 32 6B-0D 0A : EHLO w2k..
System.Net.Sockets Verbose: 0 : [0992] Exiting Socket#22453229::Send() -> 10#10
来源: http://www.systemnetmail.com/faq/4.10.aspx
所以最后,不,你没有错过任何东西—— SmtpClient没有协议(protocol)层面的跟踪,这确实是一个很大的遗漏。

关于.net - 我们如何使用 SmtpClient 记录 SMTP 对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com