javamail发送邮件,但报java.lang.AssertionError错误

xujun832 2014-02-21 11:25:05
我本地写了个简单的发送邮件的程序,我写个类直接调用运行能发送邮件,但同一段代码放在ssh项目的Action类中则报错,错误信息在最后有截取,代码如下
package com.util.mail;
/**
* 简单邮件(不带附件的邮件)发送器
*/
public class SimpleMailSender {
?

/**
* 以HTML格式发送邮件
* @param mailInfo 待发送的邮件信息
*/
public static boolean sendHtmlMail(MailSenderInfo mailInfo){
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
//如果需要身份认证,则创建一个密码验证器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getInstance(pro,authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO属性表示接收者的类型为TO
mailMessage.setRecipient(Message.RecipientType.TO,to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
}

--------MyAuthenticator
package com.util.mail;

import javax.mail.*;

public class MyAuthenticator extends Authenticator{
String userName=null;
String password=null;

public MyAuthenticator(){
}
public MyAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(userName, password);
}
}


我用下面这个代码能发送邮件

package com.util.mail;

public class MailTestDemo {
public static void main(String[] args){
//这个类主要是设置邮件
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost("smtp.qq.com");
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
mailInfo.setUserName("******@qq.com");
mailInfo.setPassword("******");//您的邮箱密码
mailInfo.setFromAddress("*******@qq.com");
mailInfo.setToAddress("*********@qq.xom");
mailInfo.setSubject("测试");
mailInfo.setContent("貌似真的可以啊");
//这个类主要来发送邮件
SimpleMailSender sms = new SimpleMailSender();
sms.sendTextMail(mailInfo);//发送文体格式
SimpleMailSender.sendHtmlMail(mailInfo);//发送html格式
}
}

直接运行上面的main方法能发送邮件,但我在ssh项目里使用这个方法就不行,web里面调用代码如下
public String sendMail(){
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost("smtp.163.com");
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
mailInfo.setUserName(fromuser);
mailInfo.setPassword(password);//您的邮箱密码
mailInfo.setFromAddress(fromuser);
mailInfo.setToAddress(touser);
mailInfo.setSubject(mailTitle);
mailInfo.setContent(mailContent);
//这个类主要来发送邮件
System.err.println("-------------------------------------------------1");

SimpleMailSender.sendHtmlMail(mailInfo);//发送html格式
System.err.println("--------------------------------------------2");
return NONE;
}

直接报下面这个错
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
........
Caused by: java.lang.AssertionError
at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1578)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1369)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java:297)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
at com.util.mail.SimpleMailSender.sendHtmlMail(SimpleMailSender.java:100)
at com.costmcs.mail.action.SendMailAction.sendMail(SendMailAction.java:38)
请高人帮忙解答一下啊,万分感谢!
...全文
294 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
debug下看那一句报错,邮箱地址都写正确
  • 打赏
  • 举报
回复
代码网上找的基本都一样,也不会有什么问题,问题出在邮件服务器上,有很多限制,还有防火墙什么的,当年,我一样的代码,使用都使用163的邮箱,但是一个邮箱好使,一个邮箱不好使,这种东西没法解决。
xujun832 2014-02-21
  • 打赏
  • 举报
回复
感谢楼上的回答,我解决了,是因为jar包的原因,我项目里引用了geronimo-javamail.jar,我直接从oracle官网下载最新的javax.mail.jar包并替换,问题解决。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧