How can we log the SMTP conversation with SmtpClient?

前端 未结 1 746
执笔经年
执笔经年 2021-02-06 03:08

E.g., for troubleshooting I need to see what SMTP messages go back and forth:

OUT : EHLO machinename
IN  : 250-ReallyCoolEmailServer Hello [10.24.41.72]
IN  : 250-SIZ         


        
相关标签:
1条回答
  • 2021-02-06 03:27

    For myself, I actually prefer "unbiased" external tools like Wireshark for seeing what's actually going over the line. SmtpClient does have tracing -- it sends output to the System.Net trace -- but this does not include the data actually going over the wire. You can obtain that, of course, using the System.Net.Sockets trace, by configuring your application like so:

    <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>
    

    But unfortunately, the output this yields is a raw socket dump that's much less convenient than a Wireshark trace.

    An example of what the socket dump looks like:

    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
    

    source: http://www.systemnetmail.com/faq/4.10.aspx

    So in the end, no, you're not missing anything -- SmtpClient does not have tracing on the protocol level, and this is indeed a pretty big omission.

    0 讨论(0)
提交回复
热议问题