有时很难对DotNetNuke应用程序中出现的SMTP问题进行故障排除。当然,您可以查看邮件服务器的SMTP日志,但这可能是配置错误,或者根本无法访问(在共享主机环境中尤其如此)。
幸运的是,有一种非常简单的方法可以为DotNetNuke生成的所有网络流量启用日志记录,其中包括SMTP流量
首先要认识到DotNetNuke电子邮件实现使用的是System.Net.Mail。除了MSDN文档关于System.Net.Mail命名空间,还有一个很好的FAQ网站:www.systemnetmail.com.
在该站点上,我们可以找到一种非常简单的方法来为邮件系统配置日志记录。实际上,这里解释的方式是,它将为应用程序完成的所有网络请求设置日志记录。这在故障排除时非常有用。
设置非常简单:
< system.diagnostics >
<消息>
<源name = "系统。网”>
<听众>
<添加name = " MyTraceFile " / >
< /听众>
> < /来源
<源name = " System.Net.Sockets " >
<听众>
<添加name = " MyTraceFile " / >
< /听众>
> < /来源
> < /来源
< sharedListeners >
<添加
name = " MyTraceFile "
type = " System.Diagnostics.TextWriterTraceListener "
initializeData = "门户/ _Default /日志/ System.Net.trace.log。资源" / >
< / sharedListeners >
<开关>
<添加name = "系统。Net" value="Verbose" />
<添加name = " System.Net。socket " value="Verbose" />
< /开关>
< / system.diagnostics >
把这个构型放在
web节点。配置后,一切都会开始工作。日志文件将创建在/Portals/_default/Logs中,也可以通过Host > Host Settings > Logs访问。
这是一个从HostSettings发送测试邮件时记录的示例:
系统。Net Verbose: 0: [6708] SmtpClient::.ctor()
系统。Net Information: 0:[6708]关联SmtpClient#49589702和SmtpTransport#5072988
系统。Net Verbose: 0: [6708] exit SmtpClient::.ctor() -> SmtpClient#49589702
系统。Net Verbose: 0: [6708] SmtpClient#49589702::Send(MailMessage#21248308)
系统。网络信息:0:[6708]SmtpClient#49589702::Send(DeliveryMethod=Network)
系统。Net Information: 0: [6708] associationsmtpclient# 49589702与MailMessage#21248308
系统。Net Verbose: 0: [6708] ServicePoint#19000239::ServicePoint(127.0.0.1:25)
系统。网络信息:0:[6708]关联SmtpTransport#5072988和SmtpConnection#18163917
系统。网络信息:0:[6708]关联SmtpConnection#18163917和ServicePoint#19000239
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Socket(AddressFamily#2)
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Socket()
System.Net.Sockets Verbose: 0: [6708] Socket#9311726::Socket(AddressFamily#23)
System.Net.Sockets Verbose: 0: [6708] exit Socket#9311726::Socket()
System.Net.Sockets Verbose: 0: [6708] DNS::TryInternalResolve(127.0.0.1)
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Connect(127.0.0.1:25#16777318)
System.Net.Sockets Information: 0: [6708] Socket#34257155 -创建了从127.0.0.1:1516到127.0.0.1:25的连接。
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Connect()
System.Net.Sockets Verbose: 0: [6708] Socket#9311726::Close()
System.Net.Sockets Verbose: 0: [6708] Socket#9311726::Dispose()
System.Net.Sockets Verbose: 0: [6708] exit Socket#9311726::Close()
系统。Net Information: 0: [6708] SmtpPooledStream#31144392 -创建了从127.0.0.1:1516到127.0.0.1:25的连接。
系统。网络信息:0:[6708]关联SmtpConnection#18163917与SmtpPooledStream#31144392
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Receive()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Receive
System.Net.Sockets Verbose: 0: [6708] 00000000: 32 32 30 206c 6F 63 61-6C 68 6F 73 74 2073 6D: 220 localhost sm
System.Net.Sockets Verbose: 0: [6708] 00000010: 74 70 34 64 65 76 20 72-65 61 64 79 0D 0A: tp4dev ready..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Receive() -> Int32#30
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [6708] 00000000: 45 48 4C 4F 20 44 4E 4E- 2d 50 43 36 37 0D 0A: EHLO DNN-PC67..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Send() -> Int32#15
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Receive()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Receive
System.Net.Sockets Verbose: 0: [6708] 00000000: 32 35 30 2D 4E 69 63 65-20 74 6F 20 6D 65 65 74: 250-很高兴见到你
System.Net.Sockets Verbose: 0: [6708] 00000010: 20 79 6F 75 2E 0D 0A 32-35 30 2D 38 42 49 54 4D:你
System.Net.Sockets Verbose: 0: [6708] 00000020: 49 4D 45 0D 0A 32 35 30-2D 53 54 41 52 54 54 4C: IME. 250-STARTTL
System.Net.Sockets Verbose: 0: [6708] 00000030: 53 0D 0A 32 35 30 2D 41-55 54 48 3D 43 52 41 4D: S..250-AUTH=CRAM
System.Net.Sockets Verbose: 0: [6708] 00000040: 2D 4D 44 35 20 50 4C 41-49 4E 20 4C 4F 47 49 4E: -MD5 PLAIN LOGIN
System.Net.Sockets Verbose: 0: [6708] 00000050: 20 41 4E 4F 4E 59 4D 4F-55 53 0D 0A 32 35 30 2D: ANONYMOUS..250-
System.Net.Sockets Verbose: 0: [6708] 00000060: 41 55 54 48 20 43 52 41-4D 2D 4D 44 35 20 50 4C: AUTH CRAM-MD5 PL
System.Net.Sockets Verbose: 0: [6708] 00000070: 41 49 4E 20 4C 4F 47 49-4E 20 41 4E 4F 4E 59 4D: AIN LOGIN anonymous
System.Net.Sockets Verbose: 0: [6708] 00000080: 4F 55 53 0D 0A 32 35 30-20 53 49 5A 45 0D 0A: ou ..250大小. .
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Receive() -> Int32#143
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [6708] 00000000: 4D 41 49 4C 20 46 52 4F-4D 3A 3C 73 75 70 70 6F: MAIL FROM:
System.Net.Sockets Verbose: 0: [6708] 00000010: 72 74 40 64 6E 6E 37 30-33 65 65 2D 36 34 2D 69;(电子邮件保护)
System.Net.Sockets Verbose: 0: [6708] 00000020: 6E 73 74 2E 64 6E 6E 64 64 6E 6E 64 3E 0D 0A: nst.dnndev.me>..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Send() -> Int32#48
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Receive()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Receive
System.Net.Sockets Verbose: 0: [6708] 00000000: 32 35 30 20 4F 6B 65 79-20 64 6F 6B 65 79 0D 0A: 250 Okey dokey..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Receive() -> Int32#16
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [6708] 00000000: 52 43 50 54 20 54 4F 3A-3C 73 75 70 70 6F 72 74: RCPT TO:
System.Net.Sockets Verbose: 0: [6708] 00000010: 40 64 6E 6E 37 30 33 65-65 2D 36 34 2D 69 6E 73: @dnn703ee-64-ins
System.Net.Sockets Verbose: 0: [6708] 00000020: 74 2E 64 6E 6E 64 65 76-2E 6D 65 3E 0D 0A: t.dnndev.me>..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Send() -> Int32#46
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Receive()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Receive
System.Net.Sockets Verbose: 0: [6708] 00000000: 32 35 30 20 52 65 63 69-70 69 65 6E 74 20 61 63: 250接收方ac
System.Net.Sockets Verbose: 0: [6708] 00000010: 63 65 70 74 65 64 0D 0A-: received ..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Receive() -> Int32#24
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [6708] 00000000: 44 41 54 41 0D 0A: DATA..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Send() -> Int32#6
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Receive()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Receive
System.Net.Sockets Verbose: 0: [6708] 00000000: 33 35 34 20 45 6E 64 20- 6d 65 73 73 61 67 65 20: 354结束消息
System.Net.Sockets Verbose: 0: [6708] 00000010: 77 69 74 68 20 70 65 72-69 6F 64 0D 0A: with period..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Receive() -> Int32#29
系统。网络信息:0:[6708]关联消息#21078404与HeaderCollection#58383834
系统。Net Information: 0: [6708] HeaderCollection#58383834::Remove(Content-Type)
系统。网络信息:0:[6708]HeaderCollection#58383834::Set(MIME-Version=1.0)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Remove(Sender)
系统。网络信息:0:[6708]HeaderCollection#58383834::Remove(Cc)
系统。网络信息:0:[6708]HeaderCollection#58383834::Remove(密件)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Remove(X-Priority)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Remove(Priority)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Remove(Importance)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Get(MIME-Version)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Get(From)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Get(To)
系统。网络信息:0:[6708]HeaderCollection#58383834::Get(Reply-To)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Get(Date)
系统。Net Information: 0: [6708] HeaderCollection#58383834::Get(Subject)
系统。Net Information: 0: [6708] HeaderCollection#10714253::Get(Content-Type)
系统。Net Information: 0: [6708] HeaderCollection#10714253::Get(Content-Transfer-Encoding)
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [6708] 00000000: 4D 49 4D 45 2D 56 65 72-73 69 6F 6E 3A 2031 2E: MIME-Version: 1。
System.Net.Sockets Verbose: 0: [6708] 00000010: 30 0D 0A 46 72 6F 6D 3A-20 73 75 70 70 6F 72 74: 0..来自:支持
System.Net.Sockets Verbose: 0: [6708] 00000020: 40 64 6E 6E 37 30 33 65-65 2D 36 34 2D 69 6E 73: @dnn703ee-64-ins
System.Net.Sockets Verbose: 0: [6708] 00000030: 74 2E 64 6E 6E 64 65 76-2E 6D 65 0D 0A 54 6F 3A: t.dnndev.me. To:
System.Net.Sockets Verbose: 0: [6708] 00000040: 20 73 75 70 70 6F 72 74-40 64 6E 6E 37 30 33 65;(电子邮件保护)
System.Net.Sockets Verbose: 0: [6708] 00000050: 65 2D 36 34 2D 69 6E 73-74 2E 64 6E 6E 64 65 76: e-64-inst.dnndev
System.Net.Sockets Verbose: 0: [6708] 00000060: 2E 6D 65 0D 0A 52 65 70-6C 79 2D 54 6F 3A 20 73: .me..答复:年代
System.Net.Sockets Verbose: 0: [6708] 00000070: 75 70 70 6F 72 74 40 64-6E 6E 37 30 33 65 65 2D:(电子邮件保护)
System.Net.Sockets Verbose: 0: [6708] 00000080: 36 34 2D 69 6E 73 74 2E-64 6E 6E 64 65 76 2E 6D: 64-inst.dnndev.m
System.Net.Sockets Verbose: 0: [6708] 00000090: 65 0D 0A 44 61 74 65 3A-20 36 20 46 65 62 20 32: e..日期:2月6日
System.Net.Sockets Verbose: 0: [6708] 000000A0: 30 31 33 20 32 31 3A 34-39 3A 34 39 20 2B 30 31:013 21:49:49 +01
System.Net.Sockets Verbose: 0: [6708] 000000B0: 30 30 0D 0A 53 75 62 6A-65 63 74 3A 20 44 6F 74: 00..主题:点
System.Net.Sockets Verbose: 0: [6708] 000000C0: 4E 65 74 4E 75 6B 65 20-53 4D 54 50 20 43 6F 6E: NetNuke SMTP Con
System.Net.Sockets Verbose: 0: [6708] 000000D0: 66 69 67 75 72 61 74 69- 6f 6E 20 54 65 73 74 0D:配置测试。
System.Net.Sockets Verbose: 0: [6708] 000000E0: 0A 43 6F 6E 74 65 6E 74- 2d 54 79 70 65 3A 20 74: .Content-Type: t
System.Net.Sockets Verbose: 0: [6708] 000000F0: 65 78 74 2F 70 6C 61 69-6E 3B 20 63 68 61 72 73: ext/plain;识字课
System.Net.Sockets Verbose: 0: [6708] 00000100: 65 74 3D 75 73 2D 61 73-63 69 69 0D 0A 43 6F 6E: et=us-ascii..Con
System.Net.Sockets Verbose: 0: [6708] 00000110: 74 65 6E 74 2D 54 72 61-6E 73 66 65 72 2D 45 6E: tent-Transfer-En
System.Net.Sockets Verbose: 0: [6708] 00000120: 63 6F 64 69 6E 67 3A 20-71 75 6F 74 65 64 2D 70:编码:引用p
System.Net.Sockets Verbose: 0: [6708] 00000130: 72 69 6E 74 61 62 6C 65-0D 0A 0D 0A:可打印....
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Send() -> Int32#316
系统。Net Information: 0: [6708] HeaderCollection#10714253::Get(Content-Transfer-Encoding)
系统。Net Information: 0: [6708] HeaderCollection#10714253::Get(Content-Transfer-Encoding)
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [6708] 00000000: 0D 0A: ..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Send() -> Int32#2
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [6708] 00000000: 0d0a 2E 0d0a: .....
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Send() -> Int32#5
System.Net.Sockets Verbose: 0: [6708] Socket#34257155::Receive()
System.Net.Sockets Verbose: 0: [6708] Data from Socket#34257155::Receive
System.Net.Sockets Verbose: 0: [6708] 00000000: 32 35 30 20 4D 61 69 6C-20 61 63 63 65 70 74 65: 250邮件接受
System.Net.Sockets Verbose: 0: [6708] 00000010: 64 0D 0A: d..
System.Net.Sockets Verbose: 0: [6708] exit Socket#34257155::Receive() -> Int32#19
系统。Net Verbose: 0: [6708] exit SmtpClient#49589702::Send()
系统。Net Information: 0: [10080] ServicePoint#19000239 -关闭为空闲。
系统。Net Verbose: 0: [10080] SmtpPooledStream::Dispose #31144392
System.Net.Sockets Verbose: 0: [10080] Socket#34257155::Send()
System.Net.Sockets Verbose: 0: [10080] Data from Socket#34257155::Send
System.Net.Sockets Verbose: 0: [10080] 00000000: 51 55 49 54 0D 0A: QUIT..
System.Net.Sockets Verbose: 0: [10080] exit Socket#34257155::Send() -> Int32#6
System.Net.Sockets Verbose: 0: [10080] Socket#34257155::Receive()
System.Net.Sockets错误:0:[10080]Socket#34257155::UpdateStatusAfterSocketError() -连接中止
System.Net.Sockets Error: 0: [10080] Exception in Socket#34257155::Receive -一个已建立的连接被你的主机上的软件终止。
正如您所看到的,您可以跟踪从连接到SMTP服务器的完整事件流:
System.Net.Sockets Verbose: 0: [6708] 00000000: 32 32 30 206c 6F 63 61-6C 68 6F 73 74 2073 6D:220 localhost sm
System.Net.Sockets Verbose: 0: [6708] 00000010: 74 70 34 64 65 76 20 72-65 61 64 79 0D 0A;tp4dev准备. .
这表明邮件服务器(在本例中为smtp4dev)以220状态接受连接,并准备继续。在进行了一些细微的修改(客户端向服务器授权)之后,客户端开始发送实际的消息,服务器回复说一切正常,接收方接受,然后将完整的消息(以编码文本的形式)发送到服务器。最后,消息被接受,连接被关闭:
System.Net.Sockets Verbose: 0: [6708] 00000000: 32 35 30 20 4D 61 69 6C-20 61 63 63 65 70 74 65;邮件接收
System.Net.Sockets Verbose: 0: [6708] 00000010: 64 0d0a:d . .
System.Net.Sockets Verbose: 0: [6708]退出
这是一个非常强大的选项,可以真正解决DotNetNuke和配置的SMTP服务器之间的通信问题。一个公平的警告:如果您保持此跟踪活动,它将生成一个可能非常大的文件。如果您希望在应用程序中保留这种类型的日志记录,那么确保日志文件是滚动类型可能是一个好主意。标准的TextWriterTraceListener不能做到这一点,但是创建自己的侦听器并不是很难。看看Dave Bost关于如何做到这一点的优秀博客:滚动TextWriterTraceListner日志
祝您故障排除愉快!
(这是一个转帖来自我的个人博客)