【发布时间】:2014-06-02 16:29:39
【问题描述】:
我一直在尝试在 Java 类中使用 Apache Commons API 来发送电子邮件。我从工作灯适配器调用此 Java 函数以发送电子邮件。
我在 Mac 上使用 Worklight Studio,工作室的版本是:5.0.5.20131003
这是一段Java代码:
package com.customclass.helper;
import org.apache.commons.mail.HtmlEmail;
public class EmailHelper{
public static void sendHTMLMail (String serverHostName, String serverPort, String isSSLEnabledOnServer, String isTLSEnabledOnServer, String fromAddress, String toAddress, String cc, String bcc, String subject, String body){
HtmlEmail email = new HtmlEmail();
email.setHostName(serverHostName);
email.setSmtpPort(serverPort);
email.setSSLOnConnect(isSSLEnabledOnServer);
email.setStartTLSEnabled(isTLSEnabledOnServer);
email.addTo(toAddressArray);
email.addCc(ccArray);
email.addBcc(bcc);
email.setSubject(subject);
email.setMsg(body);
email.send();}}
这是从适配器调用它的方式:
com.customclass.helper.EmailHelper.sendHTMLMail(SMTP_SERVER_HOST, SMTP_SERVER_PORT, SMTP_SERVER_SSL_ENABLED, SMTP_SERVER_TLS_ENABLED, fromMailAddress, toAddress, cc, bcc, subject, body);
我使用的 SMTP 服务器不需要任何身份验证,也不能在 SSL 或 TLS 上运行,并且设置为 false。
当我将 Java 类作为独立的 Java 应用程序运行时,它可以正常工作,但是当使用适配器在 Worklight 服务器中使用它时,它会引发异常。异常中没有足够的信息供我调试问题。
这是堆栈跟踪:
Exception while sending email:Sending the email to the following server failed : my.smtp.server.com:25
com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676)
javax.mail.Transport.send0(Transport.java:189)
javax.mail.Transport.send(Transport.java:118)
org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400)
org.apache.commons.mail.Email.send(Email.java:1437)
com.customclass.helper.EmailHelper.sendHTMLMail(EmailHelper.java:131)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.mozilla.javascript.MemberBox.invoke(MemberBox.java:161)
org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:247)
org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:86)
org.mozilla.javascript.gen._2FUsers_2F914854_2Fprojects_2Fcustom_2Fworkspaces_2Fphase2dec10_2FMyWorklightProject_2Fadapters_2FMessageAdapter_MessageAdapter_impl_js_593._c_sendEmail_1(%2FUsers%2F914854%2Fprojects%2Fcustom%2Fworkspaces%2Fphase2dec10%2FMyWorklightProject%2Fadapters%2FMessageAdapter/MessageAdapter-impl.js:91)
org.mozilla.javascript.gen._2FUsers_2F914854_2Fprojects_2Fcustom_2Fworkspaces_2Fphase2dec10_2FMyWorklightProject_2Fadapters_2FMessageAdapter_MessageAdapter_impl_js_593.call(%2FUsers%2F914854%2Fprojects%2Fcustom%2Fworkspaces%2Fphase2dec10%2FMyWorklightProject%2Fadapters%2FMessageAdapter/MessageAdapter-impl.js)
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:426)
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3178)
org.mozilla.javascript.gen._2FUsers_2F914854_2Fprojects_2Fcustom_2Fworkspaces_2Fphase2dec10_2FMyWorklightProject_2Fadapters_2FMessageAdapter_MessageAdapter_impl_js_593.call(%2FUsers%2F914854%2Fprojects%2Fcustom%2Fworkspaces%2Fphase2dec10%2FMyWorklightProject%2Fadapters%2FMessageAdapter/MessageAdapter-impl.js)
com.worklight.integration.js.JavaScriptManager.callFunction(JavaScriptManager.java:180)
com.worklight.integration.js.JavaScriptManager.invokeFunction(JavaScriptManager.java:156)
com.worklight.integration.services.impl.AdapterManagerImpl.invokeFunction(AdapterManagerImpl.java:101)
com.worklight.integration.js.JavaScriptProcedureInvoker.invoke(JavaScriptProcedureInvoker.java:42)
com.worklight.integration.model.ProcedureInvoker.invokeProcedure(ProcedureInvoker.java:57)
com.worklight.integration.model.Procedure.invoke(Procedure.java:165)
com.worklight.integration.model.InvocationContext.call(InvocationContext.java:150)
com.worklight.integration.model.InvocationContext.call(InvocationContext.java:34)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
java.util.concurrent.FutureTask.run(FutureTask.java:138)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
java.lang.Thread.run(Thread.java:695)
我在 Worklight studios 嵌入式 Jetty 服务器上是否缺少某些事情要做?
【问题讨论】:
-
我之前问过这个问题,但很遗憾,由于过去一个月没有更新,系统已将其删除,因此再次创建问题
-
这不是问题的精确解决方案,但我解决此问题的方法是使用 Java 的邮件 API 而不是 Apache 的邮件 API。看起来 Apache 所依赖的一些 JAR/Java 类似乎不适用于 Worklight 服务器,无论是带有 IDE 的嵌入式服务器还是部署在 WAS 上的服务器
-
我建议同时编写此解决方法作为答案。
标签: apache email jakarta-mail ibm-mobilefirst