带有JavaMail的Ant:需要身份验证
我尝试从.bat文件启动ant,如下所示:带有JavaMail的Ant:需要身份验证,java,batch-file,ant,jakarta-mail,Java,Batch File,Ant,Jakarta Mail,我尝试从.bat文件启动ant,如下所示: java -classpath "<ant_lib_jars>" org.apache.tools.ant.launch.Launcher <ant_command_line_args> <target name="testtarget"> <mail ssl="true" mailhost="smtp.gmail.com" ma
java -classpath "<ant_lib_jars>" org.apache.tools.ant.launch.Launcher <ant_command_line_args>
<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>
如果ant在类路径中找不到mail.jar(来自JavaMail),也会发生同样的错误。所以我尝试用mail.jar的路径指定“-lib”标志,但它不起作用
尝试使用相同的ant启动此目标,但未通过.bat文件成功完成-已发送电子邮件:
<full_path_to_project_ant>/bin/ant -lib ant/lib/mail.jar testtarget
收件人地址绝对正确,通过启动目标而不是通过具有相同凭据的.bat文件来确认
我试图通过额外的日志记录从ant源代码中重建ant-launcher.jar,发现mail.jar属于ant类路径<代码>发送失败异常在使用SMTPS发送消息时出现
我做错了什么?如果它在某些环境中工作,而在其他环境中不工作,那么配置肯定会有所不同。也许您在一个环境中使用了不同的JavaMail jar文件?好的,我知道了。这种不明显行为的原因在于蚂蚁类加载模型。我的email.jar(来自JavaMail)文件位于
ANT_HOME/lib
目录中,在这些目录中是filemail-1.4.jar
(它是在启动fetch.xml构建文件后下载的,需要下载所有库以执行可选任务)。这个jar文件类似于存根,不支持所有邮件功能。在这种情况下,我想ant core类加载器将在mail-1.4.jar
中找到所需的类。所以我删除了这个文件,现在我的目标正常工作了。不幸的是,没有,在所有情况下JavaMail jar都是一样的。所有的区别都在于启动蚂蚁的方式。我甚至猜不出为什么这会产生不同。如果有一种方法可以在从ant运行时启用JavaMail调试,这可能会有所帮助。在调用ant时,可以尝试将Java系统属性“mail.debug”设置为“true”。或者ant mail任务上有一个未记录的“debug”属性,或者有一种为ant任务设置JavaMail会话属性的方法?我试图将“mail.debug”设置为“true”,但没有看到任何其他输出<代码>-诊断标志显示属性设置正确。此外,我深入研究了ant源代码,没有找到任何未记录的属性,这些属性将设置Session.setDebug(true)
或类似于JavaMail的属性。看起来您可能需要重建ant插件才能调试它。我添加了答案
<full_path_to_project_ant>/bin/ant -lib ant/lib/mail.jar testtarget
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