2011-05-23 78 views
2

使用下面的代碼:提起梅勒錯誤:gnu.mail.handler.TextPlain不能轉換到javax.activation.DataContentHandler


sendMail(From(Props.get("email")), Subject("Test Email"), To("[email protected]"), 
        PlainMailBodyType("test email body")); 

而且在Boot.scala:


System.setProperty("mail.smtp.starttls.enable","false"); 
    System.setProperty("mail.smtp.host", host) 
    System.setProperty("mail.smtp.auth", "true") 
    Mailer.authenticator = Full(new Authenticator { 
     override def getPasswordAuthentication = new PasswordAuthentication(user, password) 
     }) 

我得到出現以下錯誤:

2011-05-23 18:49:02,868錯誤[pool-3-thread-4] nluMailerImpl [Logging.scala:239]無法發送郵件 java.lang.ClassCastException:gnu .mail.handler.TextPlain不能在javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:550)處的javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:596)〜[activation-1.1.jar:1.1] 上強制轉換爲javax.activation.DataContentHandler javax.activation.DataHandler.getDataContentHandler(DataHandler.java:611)〜[activation-1.1.jar:1.1] at javax.activation.DataHandler.writeTo(DataHandler.java: 315)〜[activation-1.1.jar:1.1] at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:261)〜[mail-1.4.1.jar:1.4.1] at javax.mail。 internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1321)〜[mail-1.4.1.jar:1.4.1] at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2074)〜[mail-1.4。 1.jar:1.4.1] at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2042)〜[mail-1.4.1.jar:1.4.1] at javax.mail.Transport.send(Transport.java:117)〜[ mail-1.4.1.jar:1.4.1] at net.liftweb.util.MailerImpl $$ anon $ 1 $$ anonfun $$ init $$ 1.apply(Mailer.scala:176)〜[lift-util_2.8.1- 2.3.jar:2.3]

此代碼適用於一個盒子,而不適用於另一盒子。有任何想法嗎?

回答

2

如果您想使用Linux發行版附帶的Jetty軟件包,則可以使用其他解決方案。

這個問題似乎只發生在JavaMail的GNU實現中。如果你可以使用Sun的實現,它可以正常工作,或者至少對我而言。

添加Sun的javamail: 我將這個sbt放在我的Lift項目的lib_managed /文件夾下的activation-1.1.jar和mail-1.4.1.jar放到/ usr/share/jetty/lib下/在服務器上。

刪除GNU javamail: 不幸的是,從/etc/jetty/start.config註釋掉gnumail.jar並不足以擺脫gnumail。 Jetty以某種方式仍然找到了gnumail.jar,現在郵件只是以不同的方式墜毀。爲了讓事情順利進行,我必須卸載libgnumail-java,因此還需要依賴它的libjetty-extra(我使用的是Ubuntu)。如果您需要libjetty-extra,則需要另外一種方法來確保Jetty不會看到gnumail.jar。

+1

使用帶有jetty和libjetty-extra的Ubuntu 11 oneiric我能夠簡單地從我的/ usr/share/java目錄中刪除所有gnumail * jar,並通過sun郵件支持正確啓動我的webapp。 – 2011-10-30 06:44:52

+0

Ubuntu maverick:能夠通過簡單的apt-get刪除libgnumail-java && service jetty restart – 2012-04-28 08:53:29