简体   繁体   English

使用Java发送邮件时出现异常

[英]getting exception while sending mail using java

I am using a application in spring , There is an issue related with sending mail . 我在春季使用一个应用程序,有一个与发送邮件有关的问题。 While sending mail there happens an exception 发送邮件时发生异常

“javax.mail.MessagingException: 501 5.0.0 HELO requires domain address” . “ javax.mail.MessagingException:501 5.0.0 HELO需要域名”。

when i researched about this issue ,what we found is, it is something related with machine that is sending the mail. 当我研究此问​​题时,我们发现的是,这与发送邮件的机器有关。

this is how I set the mail propery first 这就是我首先设置邮件属性的方式

<bean id="mailSession" class="javax.mail.Session" factory-method="getInstance">
        <constructor-arg>
            <props>
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                <prop key="mail.smtp.socketFactory.port">${mail.port}</prop>
                <prop key="mail.smtp.socketFactory.class">${mail.smtp.socketFactory.class}</prop>
                <prop key="mail.smtp.socketFactory.fallback">${mail.smtp.socketFactory.fallback}</prop>
                </prop>
            </props>
        </constructor-arg>
        <constructor-arg ref="smtpAuthenticator" />
    </bean>
    <bean id="smtpAuthenticator" class="com.iris.allofactor.commons.mail.SmtpAuthenticator">
        <property name="logger"><ref bean="logger"/></property> 
        <constructor-arg><value>${mail.username}</value></constructor-arg>
        <constructor-arg><value>${mail.password}</value></constructor-arg>
    </bean>
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host"><value>${mail.host}</value></property>
        <property name="session" ref="mailSession" />
    </bean> 

after getting the HELO exception i added another peroprty 得到HELO例外后,我又添加了另一个功能

<prop key="mail.smtp.localhost">${mail.smtp.localhost}

after ${mail.smtp.socketFactory.fallback} 在$ {mail.smtp.socketFactory.fallback}之后

now there is no exception mail is successfully,but i recipient is not getting the mail.can any one help me to solve this issue 现在没有成功的例外邮件,但是我的收件人没有收到邮件。任何人都可以帮助我解决此问题

i am also getting aa exception while beans are loading, the exception is some what like this 豆类正在加载时,我也收到了一个异常,异常是这样的

<2013-07-29 06:53:29,270><Failed to get local InetAddress for VMID. This is unlikely to matter. At all. We'll add some extra randomness>
java.net.UnknownHostException: Tomcat2: Tomcat2
    at java.net.InetAddress.getLocalHost(InetAddress.java:1354)
    at com.mchange.v2.c3p0.impl.C3P0ImplUtils.generateVmId(C3P0ImplUtils.java:120)
    at com.mchange.v2.c3p0.impl.C3P0ImplUtils.<clinit>(C3P0ImplUtils.java:98)
    at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.<init>(PoolBackedDataSourceBase.java:227)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.<init>(AbstractPoolBackedDataSource.java:62)
    at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:108)
    at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:104)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
    at org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:81)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4187)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4496)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

i dont think this may be core issue,plese help me to find a solution 我不认为这可能是核心问题,请帮助我找到解决方案

I ran with the similar problem below things you should do to resolve problem. 我在解决问题应该采取的措施下遇到了类似的问题。

As your machine gets started, it will need to know the mapping of some hostnames to IP addresses before DNS can be referenced. 随着计算机的启动,在引用DNS之前,需要知道一些主机名到IP地址的映射。 This mapping is kept in the /etc/hosts file. 该映射保存在/ etc / hosts文件中。 In the absence of a name server, any network program on your system consults this file to determine the IP address that corresponds to a host name. 在没有名称服务器的情况下,系统上的任何网络程序都会查询该文件以确定与主机名相对应的IP地址。

seems you are implementing mail stuff in application its trying to find local IP mapping first to route the TCP/UDP packate 似乎您正在应用程序中实现邮件内容,它首先尝试查找本地IP映射以路由TCP / UDP打包

just do : 做就是了 :

  1. vi /etc/hosts vi / etc / hosts
  2. now you can see 现在你可以看到

    27.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 27.0.0.1本地主机localhost.localdomain本地主机4本地主机4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 :: 1本地主机localhost.localdomain本地主机6本地主机6.localdomain6

  3. modify first line and attach Tomcat2 Tomcat2.localadminTomcat2, 'll look like below 修改第一行并附加Tomcat2 Tomcat2.localadminTomcat2,如下所示

27.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 Tomcat2 Tomcat2.localadminTomcat2 27.0.0.1本地主机localhost.localdomain本地主机4本地主机4.localdomain4 Tomcat2 Tomcat2.localadminTomcat2
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 :: 1本地主机localhost.localdomain本地主机6本地主机6.localdomain6

Thats it. 而已。

Regards, Amey 问候,艾米

From the official Oracle/Sun website, 在Oracle / Sun官方网站上,

Q: I get "MessagingException: 501 HELO requires domain address" when trying to send a message. 问:尝试发送消息时收到“ MessagingException:501 HELO需要域地址”。 A: The SMTP provider uses the results of InetAddress.getLocalHost().getHostName() in the SMTP HELO command. 答:SMTP提供程序在SMTP HELO命令中使用InetAddress.getLocalHost()。getHostName()的结果。 If that call fails to return any data, no name is sent in the HELO command. 如果该调用未能返回任何数据,则HELO命令中不会发送任何名称。 Check your JDK and name server configuration to ensure that that call returns the correct data. 检查您的JDK和名称服务器配置,以确保该调用返回正确的数据。 You may also set the "mail.smtp.localhost" property to the name you want to use for the HELO command. 您也可以将“ mail.smtp.localhost”属性设置为要用于HELO命令的名称。

Source: http://www.oracle.com/technetwork/java/faq-135477.html#helo 来源: http//www.oracle.com/technetwork/java/faq-135477.html#helo

From my understanding, this occurs when your email server looks at the name of the java web server returned by the InetAddress.getLocalHost().getHostName() and then rejects it. 据我了解,当您的电子邮件服务器查看由InetAddress.getLocalHost()。getHostName()返回的Java Web服务器的名称,然后拒绝它时,就会发生这种情况。 The hostname could be rejected if the email server can't reverse dns the web server or if the webserver provided a meaningless name (such as localhost). 如果电子邮件服务器无法反向DNS到Web服务器,或者Web服务器提供了毫无意义的名称(例如localhost),则主机名可能会被拒绝。 If your webserver is identifying itself as localhost, try adding a JDK property such as props.put("mail.smtp.localhost", "real-hostname.com"); 如果您的网络服务器将自己标识为localhost,请尝试添加JDK属性,例如props.put(“ mail.smtp.localhost”,“ real-hostname.com”);。

Another potentially helpful link is http://www.coderanch.com/t/271097/java/java/JavaMail-Exception-HELO-requires-domain 另一个可能有用的链接是http://www.coderanch.com/t/271097/java/java/JavaMail-Exception-HELO-requires-domain

The c3po pool is trying to get local address by using InetAddress.getLocalHost().getAddress(); c3po池正尝试使用InetAddress.getLocalHost().getAddress();获取本地地址InetAddress.getLocalHost().getAddress(); . This will generate exception in case of impossibly to resolve local host address. 如果无法解析本地主机地址,则会生成异常。 Most probably your machine host address is wrong configured. 您的机器主机地址很可能配置错误。 Please take into account that the /etc/hosts on your Linux server should be correctly configured and correspond to /etc/hostname. 请考虑到Linux服务器上的/ etc / hosts应该正确配置并与/ etc / hostname相对应。

I got the same error message today. 我今天收到了相同的错误消息。 It is not able to resolve the "localhost". 它无法解析“ localhost”。 A simple add to the hosts file, /etc/hosts, with your IP address and the server name should resolve it. 一个简单的添加到主机文件/ etc / hosts中,并加上您的IP地址和服务器名称即可解决该问题。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 Tomcat2: Tomcat2

yourIP      Tomcat2: Tomcat2 "your hostnamename"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM