调试邮件会话
调试邮件应用程序时,可以使用邮件调试功能。邮件组件将在每个会话的基础上生成调试信息,该信息可以用于问题确定和调优。
关于此任务
启用调试方式会触发应用程序服务器的邮件组件将以下数据输出至标准输出流:
- 与邮件服务器的交互
- 邮件会话的属性
注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.log、SystemErr.log、trace.log 和 activity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件
bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用
HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。
过程
- 打开管理控制台。
- 单击 。
- 单击启用调试方式。 只对该会话启用调试。
- 单击应用或确定。
示例
以下示例显示了样本邮件调试输出:
ResourceMgrIm I WSVR0049I: Binding Test as mail/test
SystemOut O *** In SessionReferenceable.getReference:
SystemOut O added StringRefAddr: type=ws.transport.password, content=****
SystemOut O added StringRefAddr: type=ws.isolated.class.loader, content=false
SystemOut O added StringRefAddr: type=mail.transport.protocol, content=smtp
SystemOut O added StringRefAddr: type=mail.imaps.class, content=com.sun.mail.imap.IMAPSSLStore
SystemOut O added StringRefAddr: type=mail.smtp.host, content=smtp.coldmail.com
SystemOut O added StringRefAddr: type=mail.debug, content=true
SystemOut O added StringRefAddr: type=mail.pop3s.class, content=com.sun.mail.pop3.POP3SSLStore
SystemOut O added StringRefAddr: type=mail.from, content=smith@coldmail.com
SystemOut O added StringRefAddr: type=mail.smtp.class, content=com.sun.mail.smtp.SMTPTransport
SystemOut O added StringRefAddr: type=mail.smtps.class, content=com.sun.mail.smtp.SMTPSSLTransport
SystemOut O added StringRefAddr: type=mail.imap.class, content=com.sun.mail.imap.IMAPStore
SystemOut O added StringRefAddr: type=mail.smtp.user, content=smith
SystemOut O added StringRefAddr: type=mail.pop3.class, content=com.sun.mail.pop3.POP3Store
SystemOut O added StringRefAddr: type=mail.mime.address.strict, content=true
SystemOut O DEBUG: JavaMail version 1.4ea
SystemOut O DEBUG: java.io.FileNotFoundException:
C:\Program Files\IBM\WebSphere\AppServer\java\jre\lib\javamail.providers
(The system cannot find the file specified.)
SystemOut O DEBUG: !anyLoaded
SystemOut O DEBUG: not loading resource: /META-INF/javamail.providers
SystemOut O DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
SystemOut O DEBUG: Tables of loaded providers
SystemOut O DEBUG: Providers Listed By Class Name:
{com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider
[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc],
com.sun.mail.smtp.SMTPTransport=javax.mail.Provider
[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc],
com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider
[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc],
com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider
[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc],
com.sun.mail.imap.IMAPStore=javax.mail.Provider
[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc],
com.sun.mail.pop3.POP3Store=javax.mail.Provider
[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
SystemOut O DEBUG: Providers Listed By Protocol:
{imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems,Inc],
imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc],
smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems,Inc],
pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc],
pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc],
smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
SystemOut O DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
SystemOut O DEBUG: !anyLoaded
SystemOut O DEBUG: not loading resource: /META-INF/javamail.address.map
SystemOut O DEBUG: java.io.FileNotFoundException:
C:\Program Files\IBM\WebSphere\AppServer\java\jre\lib\javamail.address.map
(The system cannot find the file specified.)
SystemOut O *** In SessionFactory.setPasswordAuthentication,
TRANSPORT PasswordAuthentication is based on:
SystemOut O url=smtp://smith@smtp.coldmail.com
SystemOut O user=smith
SystemOut O password=****
SystemOut O *** In SessionFactory.getObjectInstance, session properties:
SystemOut O mail.transport.protocol=smtp
SystemOut O mail.imaps.class=com.sun.mail.imap.IMAPSSLStore
SystemOut O mail.smtp.host=smtp.coldmail.com
SystemOut O mail.debug=true
SystemOut O mail.pop3s.class=com.sun.mail.pop3.POP3SSLStore
SystemOut O mail.from=smith@coldmail.com
SystemOut O mail.smtp.class=com.sun.mail.smtp.SMTPTransport
SystemOut O mail.smtps.class=com.sun.mail.smtp.SMTPSSLTransport
SystemOut O mail.imap.class=com.sun.mail.imap.IMAPStore
SystemOut O mail.smtp.user=smith
SystemOut O mail.pop3.class=com.sun.mail.pop3.POP3Store
SystemOut O mail.mime.address.strict=true
SystemOut O DEBUG: mail.smtp.class property exists and points to com.sun.mail.smtp.SMTPTransport
SystemOut O DEBUG SMTP: useEhlo true, useAuth false
SystemOut O DEBUG SMTP: trying to connect to host "smtp.coldmail.com", port 25, isSSL false
javax.mail.MessagingException: Unknown SMTP host: smtp.coldmail.com;
嵌套异常为:
java.net.UnknownHostException: smtp.coldmail.com
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1280)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at com.ibm.ws.mail.ut.TestServlet.doTask(TestServlet.java:104)
at com.ibm.ws.mail.ut.TestServlet.doGet(TestServlet.java:65)
at javax.Servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.Servlet.http.HttpServlet.service(HttpServlet.java:820)
at com.ibm.ws.webcontainer.Servlet.ServletWrapper.service(ServletWrapper.java:1397)
at com.ibm.ws.webcontainer.Servlet.ServletWrapper.handleRequest(ServletWrapper.java:759)
at com.ibm.ws.webcontainer.Servlet.ServletWrapper.handleRequest(ServletWrapper.java:429)
at com.ibm.ws.webcontainer.Servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3512)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:273)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:896)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1530)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:161)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1487)
Caused by: java.net.UnknownHostException: smtp.coldmail.com
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:196)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 32 more
此输出描述了由于将虚构名称 smtp.coldmail.com 指定为简单电子邮件传输协议 (SMTP) 服务器的名称而导致的到此服务器的连接失败。
以下列表提供了关于读取调试器输出的先前样本的技巧:
- 以 DEBUG 开头的行由邮件提供程序在运行时输出,而以 *** 开头的两行由应用程序服务器在运行时输出。
- 在代码的第二段中,前几行表明跳过一些配置文件。邮件组件在运行时会尝试从不同的位置装入一些配置文件。所有那些文件都是不需要的。 然而,如果无法访问所需的文件,那么邮件组件会产生异常。在此示例中,没有异常并且第三行宣告已装入缺省提供程序。
- 接下来以 Providers Listed by Class Name 或 Providers Listed by Protocols 开头的几行表示已装入的协议提供程序。 所列示的 6 个提供程序是缺省协议提供程序(位于应用程序服务器的内置邮件提供程序之下)。如果安装特殊的服务提供程序,并且这些提供程序将用于当前邮件会话中,那么这些提供程序将与缺省提供程序一起列示在此处。
- 以 *** 开头的两行以及它们下面的几行由应用程序服务器输出以显示当前邮件会话的配置属性。尽管这些属性按它们的内部名称(而不是在管理控制台中建立的名称)列出,但是您可以轻松识别它们之间的关系。 例如,mail.store.protocol 属性对应于用于邮件会话配置的控制台面板的待收邮件属性部分中的协议属性。查看列出的属性和值,以验证它们是否相对应。
- 异常堆栈之上的几行显示发送消息时的邮件活动。首先,JavaMail API 会识别传输协议是否设置为 SMTP 以及确定 com.sun.mail.smtp.SMTPTransport 提供程序是否存在。 接下来,输出日志会显示 SMTP 所使用的 useEhlo 和 useAuth 参数。最后,日志会显示尝试连接至 smtp.coldmail.com 邮件服务器的 SMTP 提供程序。
- 输出日志接下来显示异常堆栈。此数据表明指定的邮件服务器不存在或工作不正常。