我们如何使用SmtpClient记录SMTP会话?

By simon at 2018-02-28 • 0人收藏 • 63人看过

例如,为了解决问题,我需要查看来自哪些SMTP邮件: <pre class="brush:cpp;toolbar:false;"> IN : 250 <some.address@example.com>... Sender ok ...等等。 我没有找到任何logg在[ 文档】(http://msdn.microsoft.com/en- 我们/库/ System.Net.Mail.SmtpClient \(V = vs.110 \)的.aspx)。上问题 在这里我可以找到关于SmtpClient或者不要谈论看到实际 谈话,或谈论使用thi像WireShark这样的派对工具。 这似乎是一个很大的疏忽,所以我猜我只是想念 根本的东西。 :-)

3 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

对于我自己,我实际上更喜欢像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跟踪方便。 所以最终,不,你不会错过任何东西 - SmtpClient没有 追踪协议级别,这确实是一个很大的omission。

2018-02-28   #2

对于我自己,我实际上更喜欢像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跟踪方便。 所以最终,不,你不会错过任何东西 - SmtpClient没有 追踪协议级别,这确实是一个很大的omission。

2018-02-28   #3

一个什么套接字转储的例子:

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

登录后方可回帖

Loading...