cloudBees中的javax.mail.Session

时间:2014-05-01 19:22:17

标签: java cloudbees sendgrid javax.mail

我正在开发cloudbees平台的webapp并试图添加发送邮件的功能。

我正在关注https://wiki.cloudbees.com/bin/view/RUN/SendGrid文档,根据文档,我们可以使用以下内容获取邮件会话:

 Context initCtx = new InitialContext();
 Session session = (Session) initCtx.lookup("java:comp/env/mail/SendGrid");

但是当我在云中运行你的代码时,我得到了:

 java.lang.ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session.

问题似乎与javax.mail.jar

有关

我从https://java.net/projects/javamail/pages/Home下载了最新的jar。

据我所知,云蜜蜂所需的版本与我正在部署的版本不同。任何人都可以帮助为此特定目的获取正确的jar。

注意:我已将发送网格添加到cloudBees中的堆栈中。

2 个答案:

答案 0 :(得分:0)

我认为你有多个版本的javax.mail。 实际上,java邮件会话jar应该已经由容器提供。

您可以参考此示例,例如:https://github.com/CloudBees-community/tomcat7-sendgrid-clickstart/blob/master/pom.xml

尝试删除你的邮件jar,如果它仍然无效并且你正在使用maven尝试使用依赖插件

mvn依赖:tree -Dverbose

检查您是否与邮件依赖项冲突。

答案 1 :(得分:0)

Cloudbees上使用Spring Framework解决了重复问题

我只从Spring遇到了同样的问题,并且可以确认它是在Maven依赖项中包含javax-mail(它还带来了邮件jar)。取出依赖/ jar文件后,我遇到了org.springframework.mail.javamail.JavaMailSenderImpl的构造函数的问题,但是不喜欢jndi中的参数类型。至少原始错误似乎反对同一个类,而不是说它不知道类型/名称/等。最后,取出将会话传递给构造函数并将其放入属性(理论上应该做同样的事情,我相信)修复了问题:

<jee:jndi-lookup id="mailSource" 
  jndi-name="java:comp/env/mail/SendGrid"
  expected-type="javax.mail.Session" /> 

<bean id="mailSender"
  class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="session" ref="mailSource" />
</bean>