如何在gwt中发送邮件?

时间:2011-03-15 08:10:45

标签: java email gwt

我在服务器上通过gwt rpc运行以下代码:


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", "user@random.com");
    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();

props.setProperty("mail.transport.protocol", "smpt"); props.setProperty("mail.smtp.port", "25"); props.setProperty("mail.host", "smtp.random.com"); props.setProperty("mail.user", "user@random.com"); 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对象。出于安全考虑,此类型不会被序列化:instance = javax.mail.NoSuchProviderException:无法找到协议的提供者:smtp


我该如何解决?

3 个答案:

答案 0 :(得分:1)

GWT Java代码编译为Javascript并在您的浏览器中运行。并非所有Java类都可在客户端使用。关于这个here有一篇很好的文章。您应该考虑对服务器进行GWT RPC调用,您可以在其中运行代码来生成电子邮件。

以下是如何使用GWT RPC的示例:http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html

答案 1 :(得分:0)

您似乎将NoSuchProviderException返回给客户端,但这不起作用。它发生在此代码段之外的某个地方。

原始问题(抛出NoSuchProviderException)是第一个属性行上的拼写错误。该协议称为'smtp'而非'smpt'

如果您仍然遇到问题。检查服务器类路径中是否有正确版本的邮件jar和激活jar。

答案 2 :(得分: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);
   }
}