2017-04-12 28 views
0

我們在Wicket 6 Web應用程序中具有郵件功能。最近,我不得不將郵件服務器的憑據更改爲新的。我在我的本地系統(操作系統Windows,Tomcat 7網絡服務器)上測試過它,它工作得很好。郵件發送了,我收到了。 當我在我們的Web服務器(OS:Debian)上應用相同的證書時,出現以下錯誤消息:501 - 參數或參數中的語法錯誤發送郵件錯誤501 - 服務器上的參數或參數中的語法錯誤,但不在本地系統上

我多次檢查郵件地址,但一切似乎都正常。因此,我猜測可能是郵件在服務器上被tomcat 7,apache 2或hoster阻止(儘管我稱之爲hoster,他們告訴我他們的防火牆不阻止任何外出信號)。但是,憑藉舊的憑據,郵件服務運行得非常好。因此並非所有輸出信號都被阻止。

我對這種服務器配置不是很有經驗。任何人都可以給我一個提示,我必須檢查配置。感謝您的支持。

編輯

用於發送郵件,我們使用Spring框架的嵌入式JavaMail的服務。代碼如下所示:

public class PrMailSendServiceImpl implements IPrMailSenderService{ 
    private JavaMailSenderImpl javaMailSenderService; 
    private String defaultEmailFrom = "[email protected]"; 
    private String defaultEmailTo; 
    public void sendEmail(String toEmail, String mailSubject, String mailContent) throws MessagingException { 
     MimeMessage msg = javaMailSenderService.createMimeMessage(); 
     MimeMessageHelper mime = new MimeMessageHelper(msg, true, "UTF-8"); 
     mime.setText(mailContent, true); 
     mime.setSubject(mailSubject); 
     mime.setTo(toEmail); 
     mime.setFrom(defaultEmailFrom); 
     javaMailSenderService.send(msg); 
    } 
/*getter and setter*/ 
} 

發送方法執行時發生描述的錯誤。

彈簧-context.xml文件包含TE以下配置:

<bean id="javaMailSenderService" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="host" value="mrvnet.kundenserver.de" /> 
    <property name="port" value="25" /> 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="myPassword" /> 

    <property name="javaMailProperties"> 
     <props> 
       <prop key="mail.smtp.auth">true</prop> 
       <prop key="mail.smtp.starttls.enable">true</prop> 
      </props> 
    </property> 
</bean> 

<bean id="mailSendService" class="de.virtualsolution.procon.service.impl.PrMailSendServiceImpl"> 
    <property name="javaMailSenderService"><ref bean="javaMailSenderService" /></property> 
    <property name="defaultEmailFrom"><value>[email protected]</value></property> 
</bean> 
+0

沒有代碼,配置等很難說。問題似乎對Wicket沒有任何影響 –

+0

是的,告訴我們什麼是郵件發送軟件會很有用。並且您在哪裏看到此錯誤... –

+0

感謝您的評論和支持。我已添加郵件配置。如果您需要更多信息,請告訴我。對不起,但我正在度假:-) –

回答

0

我想通了這個問題。我從https://community.hpe.com/t5/System-Administration/Error-sending-e-mails-from-Java-ehlo-problem/td-p/4145190得到了答案

簡單郵件傳輸協議RFC規定使用HELO和EHLO。 SMTP對話中HELO/EHLO的無效使用是您的問題。 大多數郵件傳輸代理(MTA)對SMTP HELO 和EHLO命令上給出的域名執行DNS (A-和PTR-資源記錄)驗證 。這可能違反RFC 2821, ,所以電子郵件默認情況下通常不會被拒絕。 換句話說,EHLO和HELO通常要求 需要FQDN。 客戶必須在 開始郵件交易之前發出HELO或EHLO。

SOLUTION(見Unable to send email using javamail api in linux

在我們的服務器上我們有幾個子域。因此,當調用InetAddress.getLocalHost().getHostName()時會拋出異常。因此,對於HELO手動設置所需的主機名,我增加了行<prop key="mail.smtp.localhost">my.server.host.name</prop>在彈簧的context.xml

現在它看起來像:

<bean id="javaMailSenderService" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="host" value="mrvnet.kundenserver.de" /> 
    <property name="port" value="25" /> 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="myPassword" /> 

    <property name="javaMailProperties"> 
     <props> 
       <prop key="mail.smtp.auth">true</prop> 
       <prop key="mail.smtp.starttls.enable">true</prop> 
       <prop key="mail.smtp.localhost">my.server.host.name</prop> 
      </props> 
    </property> 
</bean> 

<bean id="mailSendService" class="de.virtualsolution.procon.service.impl.PrMailSendServiceImpl"> 
    <property name="javaMailSenderService"><ref bean="javaMailSenderService" /></property> 
    <property name="defaultEmailFrom"><value>[email protected]</value></property> 
</bean> 
相關問題