我在服务器上通过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
我该如何解决?
答案 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);
}
}