带有JavaMail的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

我尝试从.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"
            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
目录中,在这些目录中是file
mail-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