2014-01-05 40 views
1

我將通過java郵件在我的webapp中發送郵件。我寫了一個代碼,並通過Gmail帳戶進行測試,它工作正常。然後我用gmail信息替換我的主機smtp詳細信息並進行測試。哎呀這回我一個以下異常:javamail - 504 5.5.2:Helo命令被拒絕:需要完全限定的主機名

javax.mail.MessagingException: 504 5.5.2 <rasta-PC>: Helo command rejected: need fully-qualified hostname 

    at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:2099) 
    at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:1490) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:662) 
    at javax.mail.Service.connect(Service.java:367) 
    at javax.mail.Service.connect(Service.java:226) 
    at javax.mail.Service.connect(Service.java:175) 
    at javax.mail.Transport.send0(Transport.java:253) 
    at javax.mail.Transport.send(Transport.java:124) 
    at util.MailUtil.sendViaSSL(MailUtil.java:43) 
    at control.member.AddMemberControl.add(AddMemberControl.java:107) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:357) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at filter.CheckLoginFilter.doFilter(CheckLoginFilter.java:57) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

你可以看到我的代碼如下所示:

public static void sendViaSSL(final MailServerDetail msd,String to, String subject, String text){ 

    Properties props=new Properties(); 
    props.put("mail.smtp.host", "smtp.hostname"); 
    props.put("mail.smtp.socketFactory.port", "587"); 
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "587"); 
    props.put("mail.smtp.ssl", "true");     
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.timeout", "5000");    
    props.put("mail.smtp.connectiontimeout", "5000"); 
    Session session=Session.getInstance(props, new Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication("My Mail Address", "Mail Password"); 
     } 
    }); 

    MimeMessage message=new MimeMessage(session); 
    try { 
     message.setHeader("Content-Type", "text/plain; charset=UTF-8"); 
     message.setFrom(new InternetAddress("My Mail Address")); 
     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 
     message.setSubject(subject,"UTF-8"); 
     message.setText(text, "UTF-8","html"); 

     Transport.send(message); 
    } catch (AddressException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MessagingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

你能幫我解決嗎? 謝謝。

+0

我用普通郵件測試它。但我得到以上錯誤。 –

回答

2

這通常與您的名稱服務配置中的錯誤有關。 您可以通過將mail.smtp.localhost屬性設置爲機器的標準主機名來解決此問題。有關詳細信息,請參閱com.sun.mail.smtp package javadocs

此外,請參閱此列表common JavaMail mistakes

+0

感謝它通過將mail.smtp.localhost設置爲我的郵件服務器smtp地址。 –

+0

當然,它應該設置爲客戶機的主機名,而不是服務器。客戶端使用HELO命令向服務器標識自己。 –

相關問題