2011-03-15 81 views
1

我有以下代碼捉迷藏服務器通過GWT RPC上:如何以gwt發送郵件?


Properties props = new Properties();

props.setProperty("mail.transport.protocol", "smpt"); 
    props.setProperty("mail.smtp.port", "25"); 
    props.setProperty("mail.host", "smtp.random.com"); 
    props.setProperty("mail.user", "[email protected]"); 
    props.setProperty("mail.password", "passwd"); 

    Session mailSession = Session.getDefaultInstance(props, null); 
    Transport transport = mailSession.getTransport(); 

    MimeMessage message = new MimeMessage(mailSession); 
    message.setSubject(subject); 
    message.setContent(mailMessage, "text/plain"); 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(adress)); 

    transport.connect(); 
    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO)); 
    transport.close(); 

但是我得到的錯誤:
com.google.gwt.user.client.rpc.SerializationException:類型「 javax.mail.NoSuchProviderException'未包含在可由此SerializationPolicy序列化的類型集中,或者其Class對象無法加載。爲了安全起見,這種類型將不會被序列化:例如= javax.mail.NoSuchProviderException:無法找到提供商協議:SMTP


我該如何解決?

+0

沒有得到的從上面的代碼的整個故事。什麼是方法簽名? – 2011-03-24 13:17:41

+0

你是否得到這個排序? – Kris 2012-05-03 17:36:36

回答

0

沒有看到方法簽名我的猜測是,你的方法簽名拋出NoSuchProviderException

修復:

public void sendMail(...) throws Exception{ 
    try{ 
    // mail code here... 


    } catch(NoSuchProviderException e){ 
    throw new Exception(e); 
    } 
} 

或創建的異常類,並使用這些:

public class MailException extends Exception{ 
    public MailException(){} 
    public MailException(String msg){ 
    super(msg); 
    } 
} 
1

GWT Java代碼已編譯爲Javascript並在您的瀏覽器中運行。並不是所有的Java類都可以在客戶端使用。關於這個here有一個很好的寫法。你應該考慮做一個GWT RPC調用你的服務器,你可以運行你的代碼來生成電子郵件。

這裏有一個如何使用GWT RPC的例子:http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html

+0

他的第一句話:「我通過gwt rpc在服務器上運行以下代碼」 – John 2011-03-15 19:59:04

+0

他編輯了問題以添加「通過gwt rpc在服務器上運行」文本:http://stackoverflow.com/posts/5308999 /修訂 - 我同意我的答案不適用於這種情況。 – Roshan 2011-03-16 00:54:06

0

你似乎返回NoSuchProviderException返回給客戶端並不起作用。它發生在這個代碼片段之外的某處。

原始問題(拋出NoSuchProviderException)是第一個屬性行上的錯字。該協議被稱爲'smtp'不是'smpt'

如果您仍然遇到問題。檢查您的服務器類路徑中是否提供了正確版本的郵件jar和激活jar。