Java Log4j 发送邮件失败!

取与舍 2012-05-09 02:33:16
log4j里面的配置如下:

log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=INFO
log4j.appender.mail.BufferSize=1
log4j.appender.mail.SMTPHost=smtp.qq.com
log4j.appender.mail.Subject=Log4J ErrorMessage
log4j.appender.mail.From=744***3@qq.com
log4j.appender.mail.To=744***3@qq.com,744***3@qq.com
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n
log4j.appender.mail.SMTPUsername=744***3
log4j.appender.mail.SMTPPassword=********

我特意设置了一个有error级别的按钮,一旦点击它,log4j就抛出如下异常
log4j:ERROR Error occured while sending e-mail notification.
com.sun.mail.smtp.SMTPSendFailedException: 503 Error: need EHLO and AUTH first !

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1515)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
at javax.mail.Transport.send0(Transport.java:189)
at javax.mail.Transport.send(Transport.java:118)
at org.apache.log4j.net.SMTPAppender.sendBuffer(Unknown Source)
at org.apache.log4j.net.SMTPAppender.append(Unknown Source)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
at org.apache.log4j.Category.callAppenders(Category.java:203)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.log(Category.java:853)
at org.apache.commons.logging.impl.Log4JLogger.error(Log4JLogger.java:181)
at org.directwebremoting.util.CommonsLoggingOutput.error(CommonsLoggingOutput.java:75)
at org.directwebremoting.util.Logger.error(Logger.java:122)
at org.directwebremoting.util.LogErrorHandler.error(LogErrorHandler.java:40)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.addDTDDefaultAttrsAndValidate(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)
at org.directwebremoting.impl.DwrXmlConfigurator.setInputStream(DwrXmlConfigurator.java:132)
at org.directwebremoting.impl.DwrXmlConfigurator.setServletResourceName(DwrXmlConfigurator.java:87)
at org.directwebremoting.impl.ContainerUtil.configureFromDefaultDwrXml(ContainerUtil.java:263)
at org.directwebremoting.impl.ContainerUtil.configureContainerFully(ContainerUtil.java:421)
at org.directwebremoting.servlet.DwrServlet.init(DwrServlet.java:79)
at com.caucho.server.dispatch.ServletConfigImpl.createServletImpl(ServletConfigImpl.java:833)
at com.caucho.server.dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:735)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:94)
at com.hancai.base.filter.LoginCheckFilter.doFilter(LoginCheckFilter.java:55)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)
at com.hancai.base.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:32)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:265)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:273)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:682)
at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:743)
at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:662)
at java.lang.Thread.run(Thread.java:619)


但是我用Java代码来发的邮件的话,就一切OK了!下面是Java代码!

public static void main(String args[]) throws Exception, MessagingException {
String host = "smtp.qq.com";//发送邮件服务器
String from = "744××××3@qq.com";
String to = "744××××3@qq.com";
// new properties
Properties props = new Properties();
// Setup mail server
props.put("mail.smtp.host", host);// 设置smtp主机
props.put("mail.smtp.auth", "true");// 使用smtp身份验证
// Get session
Session session = Session.getDefaultInstance(props, null);
// Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("test");//标题
message.setText("http://www.baidu.com/"+"This is test JavaMail");//内容
//http协议部分会自动转换成超链接
message.saveChanges();
// Send message
Transport transport = session.getTransport("smtp");
System.out.println("正在连接");
transport.connect(host, "744××××3", "××××");
System.out.println("正在发送");
transport.sendMessage(message, message.getAllRecipients());
System.out.println("邮件发送成功");
}


有大神知道不?
...全文
318 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010458491 2015-01-16
  • 打赏
  • 举报
回复
我想相信问一下,这个如果在配置文件中配置好了,比如我调整的级别是DEBUG,那系统如果报Exception了他就自动发邮件到我配置的邮箱中么?还是比如说我觉得这一段可能要出错,为就用东西把他抱起来,如果出错了就发邮件呢?
MiceRice 2012-05-09
  • 打赏
  • 举报
回复
哦,难怪,1.2.11还不支持登录认证,要1.2.14以后的才支持。

楼主更新版本吧。
游一游走一走 2012-05-09
  • 打赏
  • 举报
回复
你都写出来程序验证了
查看下org.apache.log4j.net.SMTPAppender.activateOptions()
方法一目了然
Session localSession = Session.getInstance(localProperties, null);
不支持认证的,log4j不支持认证方式

你的java代码发送是正确的?
没有password怎么成功的...........
取与舍 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你的Log4j版本是多少?早期版本不支持认证功能。


这个错误你可以用Java代码重现,只需要注释掉这行:
//props.put("mail.smtp.auth", "true");// 使用smtp身份验证
[/Quote]
版本是:1.2.11
MiceRice 2012-05-09
  • 打赏
  • 举报
回复
你的Log4j版本是多少?早期版本不支持认证功能。


这个错误你可以用Java代码重现,只需要注释掉这行:
//props.put("mail.smtp.auth", "true");// 使用smtp身份验证
取与舍 2012-05-09
  • 打赏
  • 举报
回复
没有人吗?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧