Reputation: 11
I'm trying to start ant from .bat-file like this:
java -classpath "<ant_lib_jars>" org.apache.tools.ant.launch.Launcher <ant_command_line_args>
Ant was added to project with all additional libraries (including JavaMail jars). After start batch script will collect all necessary jars and create string for classpath (<ant_lib_jars>
). All command line arguments will be passed to Launcher class "as is".
This approach correctly works for all targets in my build file except target which use mail task. This target looks like this:
<target name="testtarget">
<mail
ssl="true"
mailhost="smtp.gmail.com"
mailport="465"
user="<gmail_user>"
password="<gmail_password>"
subject="Subject"
>
<from address="<gmail_address>"/>
<to address="<recipient_address>"/>
<message src="<message_file>"/>
</mail>
</target>
When i start ant -v testtarget
from command line, i get this error:
BUILD FAILED
....
Problem while sending mime mail:
at org.apache.tools.ant.taskdefs.email.MimeMailer.send(MimeMailer.java:261)
at org.apache.tools.ant.taskdefs.email.EmailTask.execute(EmailTask.java:574)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
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:585)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
at org.apache.tools.ant.Main.runBuild(Main.java:851)
at org.apache.tools.ant.Main.startAnt(Main.java:235)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 m5sm23576192laj.4 - gsmtp
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at org.apache.tools.ant.taskdefs.email.MimeMailer.send(MimeMailer.java:258)
... 18 more
The same error occures if ant can't find mail.jar (from JavaMail) in classpath. So i tried to specify "-lib" flag with path to mail.jar and it doesn't work.
Attempt to start this target with the same ant but not through .bat-file was finished successful - email letter was sent:
<full_path_to_project_ant>/bin/ant -lib ant/lib/mail.jar testtarget
Setting up ignoreInvalidRecipients
attribute with true
value ends up with another error:
BUILD FAILED
....
Couldn't reach any recipient
at org.apache.tools.ant.taskdefs.email.MimeMailer.send(MimeMailer.java:264)
at org.apache.tools.ant.taskdefs.email.EmailTask.execute(EmailTask.java:574)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
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:585)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
at org.apache.tools.ant.Main.runBuild(Main.java:851)
at org.apache.tools.ant.Main.startAnt(Main.java:235)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 go4sm23006946lbc.3 - gsmtp
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at org.apache.tools.ant.taskdefs.email.MimeMailer.send(MimeMailer.java:258)
... 18 more
Recipient address is absolutely correct that is confirmed by starting target not through .bat-file with the same credentials.
I tried to rebuild ant-launcher.jar from ant sources with additional logging and found that mail.jar falls into ant classpath. SendFailedException
rises on sending message using SMTPS.
What am i doing wrong?
Upvotes: 0
Views: 1389
Reputation: 11
Ok, i've got it. The reason of such unobvious behaviour was in the ant classloading model. My email.jar (from JavaMail) file lie in ANT_HOME/lib
directory and in those directory was file mail-1.4.jar
(which was downloaded after starting fetch.xml build file, it's needed to download all libraries for optional tasks). This jar file is something like stub and doesn't support all mail features. In this case, i suppose, ant core classloader will find needed classes in mail-1.4.jar
. So i removed this file and now my target works correctly.
Upvotes: 1
Reputation: 29971
If it works in some environments and not others, then there must be something different about the configurations. Maybe you're using a different JavaMail jar file in one environment?
Upvotes: 0