2014-12-07 726 views
4

我試圖從應用程序電子郵件(交換服務器)發送電子郵件並顯示給用戶,因爲它從使用JavaMail的另一封電子郵件被送到,我使用下面的代碼:com.sun.mail.smtp.SMTPSenderFailedException:550 5.7.1客戶端沒有權限發送此發件人

public void sendEmail(String from, String to, String subject, String emailBody) throws Exception { 

     try { 

      emailHostSMTPs = MessageProvider.getConfig("email.host.smtps"); 
      emailHostSMTP = MessageProvider.getConfig("email.host.smtp"); 
      emailProtocol = MessageProvider.getConfig("email.protocol"); 
      senderEmail = MessageProvider.getConfig("email.sender"); 
      senderPassword = MessageProvider.getConfig("email.password"); 
      senderUser = MessageProvider.getConfig("email.sender.user"); 
      MimeMessage msg = null; 

      // BodyPart imgPart = new MimeBodyPart(); 
      MimeBodyPart mbp1 = null, mbp2 = null; 
      MimeMultipart mp = new MimeMultipart(); 

      String html = ""; 

      Properties props = System.getProperties(); 

      props.put("mail.smtp.starttls.enable", "true"); 
      props.put("mail.transport.protocol", emailProtocol); 
      props.put("mail.smtps.ssl.checkserveridentity", "false"); 
      props.put("mail.smtp.ssl.trust", "*"); 
      props.put("mail.smtp.starttls.enable", "true"); 
      props.put("mail.smtp.host", emailHostSMTP); 
      props.put("mail." + emailProtocol + ".auth", "true"); 

      Authenticator auth = new SMTPAuthenticator(); 

      MailSSLSocketFactory sf = new MailSSLSocketFactory(); 
      sf.setTrustAllHosts(true); 
      props.put("mail.smtp.ssl.socketFactory", sf); 

      Session session = Session.getInstance(props, auth); 
      session.setDebug(true); 

      mbp1 = new MimeBodyPart(); 

      html = "<html><body> " + emailBody + " </body></html>"; 
      mbp1.setContent(html, "text/html; charset=UTF-8"); 
      mp.addBodyPart(mbp1); 

      msg = new MimeMessage(session); 

      msg.setFrom(new InternetAddress(from)); 
      msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      msg.setSubject(subject, "UTF-8"); 
      msg.setContent(mp); 

      msg.setSentDate(new Date()); 

      Transport transport = session.getTransport(emailProtocol); 

      transport.connect(senderEmail, senderPassword); 
      transport.sendMessage(msg, msg.getAllRecipients()); 

     } catch (Exception ex) { 
      throw ex; 
     } 

    } 

    private class SMTPAuthenticator extends javax.mail.Authenticator { 

     @Override 
     public PasswordAuthentication getPasswordAuthentication() { 
      String username = senderUser; 

      String password = senderPassword; 
      return new PasswordAuthentication(username, password); 
     } 
    } 

認證是由具有SENDEREMAIL,但我想的電子郵件出現,因爲它是從發用戶,但我收到以下例外:

com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 Client does not have permissions to send as this sender 
; 
    nested exception is: 
    com.sun.mail.smtp.SMTPSenderFailedException: 550 5.7.1 Client does not have permissions to send as this sender 

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108) 
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1609) 
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1117) 
    at com.dataserve.ecm.service.EmailService.sendEmail(EmailService.java:76) 
    at com.dataserve.ecm.beans.GenericSearch.sendDocumentByEmail(GenericSearch.java:163) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
    at java.lang.reflect.Method.invoke(Method.java:611) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:328) 
    at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:341) 
    at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58) 
    at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) 
    at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    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 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1214) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:774) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:456) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:125) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:92) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:98) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.filenet.ae.toolkit.server.servlet.filter.PostprocessorFilter.doFilter(PostprocessorFilter.java:38) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.filenet.ae.toolkit.server.servlet.filter.ContainerBasedFilter.doFilter(ContainerBasedFilter.java:218) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.filenet.ae.toolkit.server.servlet.filter.PreprocessorFilter.doFilter(PreprocessorFilter.java:91) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.filenet.ae.toolkit.server.servlet.filter.SecurityPluginFilter.doFilter(SecurityPluginFilter.java:164) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.filenet.ae.toolkit.server.servlet.filter.ThreadLocalCleanupFilter.doFilter(ThreadLocalCleanupFilter.java:50) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.dataserve.ecm.ui.CompitabilityFilter.doFilter(CompitabilityFilter.java:41) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:192) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:89) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:926) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1023) 
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:522) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:311) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:282) 
    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:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783) 

請指出如何解決此異常。

+0

比爾香農是對的,但完全的答案是@Barani r的一個。 – ATorras 2016-09-08 12:18:46

回答

3

你的服務器不會讓你這樣做。如果是這樣,你可以發送垃圾郵件作爲任何人。如果這是您的私人服務器,您可能可以重新配置它以允許這樣做。

2

msg.setFrom(new InternetAddress(from)); 「from」應該是SMTP服務器中的有效電子郵件設置。您可能需要聯繫您的SMTP服務器管理員並獲取用戶ID設置。