java - 调试消息异常

标签 java debugging email smtp

我们有一个批处理程序,其中包含发送电子邮件的 JavaMail 1.2。在我们的开发环境中,我们还没有机会遇到上述异常。但在客户的环境中,他们已经多次经历过这种情况,并出现以下错误跟踪:

javax.mail.MessagingException: 550 Requested action not taken: NUL characters are not allowed.
  at com.sun.mail.smtp.SMTPTransport.issueCommand (SMTPTransport.java: 879)
  at com.sun.mail.smtp.SMTPTransport.finishData (SMTPTransport.java: 820)
  at com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java: 322)
  ...

我不确定这是否与我的问题有关,http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4697158 。但是尝试JavaMail 1.4.2,我发现电子邮件的内容传输编码仍然是7位,所以我不确定使用JavaMail 1.4.2是否可以解决问题。请注意,我只能在我们的开发环境中进行测试,而无法复制这一点。

除了上述异常(exception),我如何知道这是来自发送方还是接收方?您建议采取哪些调试步骤?

编辑: 这是实际发送的调试(屏蔽了一些信息):

DEBUG: not loading system providers in &lt;java.home&gt;</a>/lib

DEBUG: not loading optional custom providers file: /META-INF/javamail.providers

DEBUG: successfully loaded default providers



DEBUG: Tables of loaded providers

DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,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]}

DEBUG: Providers Listed By Protocol: {imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}

DEBUG: not loading optional address map file: /META-INF/javamail.address.map



DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]

DEBUG SMTP: useEhlo true, useAuth false



DEBUG: SMTPTransport trying to connect to host "nnn.nnn.n.nnn", port nn



DEBUG SMTP RCVD: 220 xxxx.xxxxxxxxxxx.xxx SMTP; Mon, 23 Mar 2009 15:18:57 +0800



DEBUG: SMTPTransport connected to host "nnn.nnn.n.nnn", port: nn



DEBUG SMTP SENT: EHLO xxxxxxxxx

DEBUG SMTP RCVD: 250 xxxx.xxxxxxxxxxx.xxx Hello



DEBUG SMTP: use8bit false

DEBUG SMTP SENT: MAIL FROM:<a href="newmsg.cgi?mbx=Main&to=xxxx@xxxxxxxxxxx.xxx">&lt;xxxx@xxxxxxxxxxx.xxx&gt;</a>

DEBUG SMTP RCVD: 250 <a href="newmsg.cgi?mbx=Main&to=xxxx@xxxxxxxxxxx.xxx">&lt;xxxx@xxxxxxxxxxx.xxx&gt;</a>... Sender ok



DEBUG SMTP SENT: RCPT TO:&lt;yyyyyyyy@yyyyy.yyy.yy&gt;

DEBUG SMTP RCVD: 250 &lt;yyyyyyyy@yyyyy.yyy.yy&gt;... Recipient ok



Verified Addresses

&nbsp;&nbsp;yyyyyyyy@yyyyy.yyy.yy

DEBUG SMTP SENT: DATA

DEBUG SMTP RCVD: 354 Enter mail, end with "." on a line by itself



DEBUG SMTP SENT: 

.

DEBUG SMTP RCVD: 550 Requested action not taken: NUL characters are not allowed.

最佳答案

如果不存在安全风险,您可以尝试启用调试消息:

session.setDebug(true);

然后,我也有兴趣了解以下内容:邮件的内容和收件人。如果您记录这些,您可以尝试从您的计算机重现该行为。可能只是某些电子邮件服务器拒绝包含 NUL 字符的邮件。

编辑:根据调试信息,我认为远程邮件服务器很可能拒绝带有 NUL 字符的邮件。为了验证这一点,请尝试使用其他方式将完全相同的邮件发送给同一收件人。另外,尝试向不包含 NUL 字符的同一收件人发送测试电子邮件。

关于java - 调试消息异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/665243/

相关文章:

java - 如何找到滚动条 slider 的大小?

angularjs - browser.debugger() 不会暂停浏览器

ruby-on-rails - Ruby on Rails 中的电子邮件验证?

c++ - 未定义的子类引用

sql - NVARCHAR(?) 用于 SQL Server 中的电子邮件地址

c# - ASP.NET Web API 异步任务,发送邮件

java - 模拟多个按键组合

java - Android:哪个运算符用于模数(%不适用于负数)

java - 只能从数组中索引 0 处删除对象

c++ - 在 Visual C++ 2003 中删除调试符号