我正在开发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中的堆栈中。
答案 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>