我有一个安装在旧Ubuntu机器上的Java程序,并使用javax.mail发送邮件。但是,该机器出现故障,我现在在新的CentOS机器上运行相同的Java应用程序。
但是,尝试使用mail.smtp.host = 127.0.0.1发送电子邮件时收到错误消息“MessagingException:501 Syntax:HELO hostname”。
我的猜测是邮件服务器尚未在此CentOS中激活。
我如何配置javax.mail可以使用的邮件服务器?
谢谢
答案 0 :(得分:4)
您的计算机主机名必须映射到/etc/hosts
文件。
实施例:
控制台显示:linux#
和cat /etc/hostname
显示
linux.mydomain.com
然后编辑运行为root
的主机文件。 vi /etc/hosts
127.0.0.1 localhost linux linux.mydomain.com
答案 1 :(得分:2)
我在使用Spring MailSender发送电子邮件时遇到了同样的问题“MessagingException:501语法:HELO主机名”。对我有用的是在javaMailProperties下添加额外的属性“mail.smtp.localhost”,如下所示:
<!-- JAVA MAIL -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="" />
<property name="port" value="25" />
<property name="protocol" value="smtp" />
<property name="username" value="" />
<property name="password" value="" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtps.auth">true</prop>
<prop key="mail.smtps.starttls.enable">true</prop>
<prop key="mail.smtps.debug">true</prop>
<prop key="mail.smtp.localhost">localhost</prop>
</props>
</property>
</bean>
答案 2 :(得分:1)
问题是新计算机上的命名服务未正确配置,Java无法找到计算机的主机名。 SMTP HELO命令需要包含主机名。服务器正在抱怨因为它丢失了。打开JavaMail Session调试,您可以看到发送它的实际命令。您可以通过将JavaMail属性mail.smtp.localhost设置为要在HELO命令中使用的主机名来解决此主机配置问题。
答案 3 :(得分:0)
您需要运行sendmail
。有关详细信息,请参阅here。配置sendmail
可能是一件苦差事,如果可能,您可能希望从旧计算机中获取配置sendmail.cf
。
我怀疑(也)你应该设置一些中央MTA(邮件传输代理),这样你企业中的所有机器都会使用它,而不是每台主机运行一台。即不使用localhost
。
答案 4 :(得分:-1)
在我的情况下,etc / hostname是susetest(而不是linux.company.com)
修改了etc / hosts从127.0.0.1 localhost到127.0.0.1 localhost susetest(在localhost确保使用tab后,修改文件时)
确保保存更改,postfix stop,postfix start重启SMTP服务器。
应该可以正常工作。
(添加properties.setProperty(“mail.smtp.localhost”,“ourcompany.com”);对属性也解决了问题,但是当你找到根本原因时,解决方法不应该是修复,即使我需要几天时间)