`

解决JavaMail无法发送邮件的错误(在J2EE项目中)

    博客分类:
  • Java
阅读更多
这学期的课程是一个j2ee项目,上次老师检查的时候说我们项目在注册的时候,要有一个邮箱验证的功能,不然谁都能去注册,这样会出现恶意注册。于是网上搜了一下大致知道可以用JavaMail给解决问题。不过试了一下,出现了以下异常:
1.Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
2.Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/BEncoderStream

费解,以为自己代码写出问题了。到Oschina的代码共享区搜了一段代码,结果错误依然存在。网上大牛说java EE 5.0同JavaMail冲突,搜到一种解决办法:
将javaee.jar里面avax下有activation与mail两个文件夹删除
具体路径如下:(我们项目用的是 MyEclipse 8.5,其他版本应该也类似)
MyEclipse安装路径\Common\plugins\com.genuitec.eclipse.j2eedt.core_8.5.0.me201003231033\data\libraryset\EE_5\javaee.jar

用winrar 打开javaee.jar,然后找到 activation与mail,将这两个文件夹删除,然后在你的项目里面导入mail.jar与activation.jar这两个包.于是乎,就可以在你的项目中利用JavaMail发送文件了。
发送邮件代码:来自于http://www.oschina.net/code/snippet_12_1350
import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 使用Gmail发送邮件
 * @author Winter Lau
 */
public class GmailSender {

 public static void main(String[] args) throws AddressException, MessagingException {
  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
  // Get a Properties object
  Properties props = System.getProperties();
  props.setProperty("mail.smtp.host", "smtp.gmail.com");
  props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.smtp.socketFactory.fallback", "false");
  props.setProperty("mail.smtp.port", "465");
  props.setProperty("mail.smtp.socketFactory.port", "465");
  props.put("mail.smtp.auth", "true");
  final String username = "[邮箱帐号]";
  final String password = "[邮箱密码]";
  Session session = Session.getDefaultInstance(props, new Authenticator(){
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(username, password);
      }});

       // -- Create a new message --
  Message msg = new MimeMessage(session);

  // -- Set the FROM and TO fields --
  msg.setFrom(new InternetAddress(username + "@mo168.com"));
  msg.setRecipients(Message.RecipientType.TO, 
    InternetAddress.parse("[收件人地址]",false));
  msg.setSubject("Hello");
  msg.setText("How are you");
  msg.setSentDate(new Date());
  Transport.send(msg);
  
  System.out.println("Message sent.");
 }
}



下面提供修改后的javaee.jar和需要导入到项目中去的包
另外就是一个示例。示例代码来自于http://www.oschina.net/code/snippet_12_1350
2
1
分享到:
评论

相关推荐

    J2EE面试题

    1:请写出JavaMail发送邮件的关键代码 2:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 3:用冒泡法对10个数排序(由小到大)例如: 54,12,-6,6,22,-7,9,0,999,79 4:有...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    7.2.3 使用JavaMail发送邮件 277 7.2.4 使用JavaMail接收邮件 281 7.3 应用服务器的JavaMail支持 287 7.3.1 在WebLogic中配置JavaMail 288 7.3.2 通过WebLogic的邮件支持来 发送邮件 290 7.3.3 在JBoss中配置...

    Java数据库编程宝典2

    16.3 使用JDBC驱动的JavaMail发送电子邮件信息 16.3.1 使用JSP页面和JavaMail发送电子邮件 16.3.2 使用有SendMailBean的JSP页面 16.3.3 部署 16.4 使用JavaMail API接收电子邮件 16.5 小结 第4部分 数据库、...

    Java数据库编程宝典4

    16.3 使用JDBC驱动的JavaMail发送电子邮件信息 16.3.1 使用JSP页面和JavaMail发送电子邮件 16.3.2 使用有SendMailBean的JSP页面 16.3.3 部署 16.4 使用JavaMail API接收电子邮件 16.5 小结 第4部分 数据库、...

    Java数据库编程宝典1

    16.3 使用JDBC驱动的JavaMail发送电子邮件信息 16.3.1 使用JSP页面和JavaMail发送电子邮件 16.3.2 使用有SendMailBean的JSP页面 16.3.3 部署 16.4 使用JavaMail API接收电子邮件 16.5 小结 第4部分 数据库、...

    Java数据库编程宝典3

    16.3 使用JDBC驱动的JavaMail发送电子邮件信息 16.3.1 使用JSP页面和JavaMail发送电子邮件 16.3.2 使用有SendMailBean的JSP页面 16.3.3 部署 16.4 使用JavaMail API接收电子邮件 16.5 小结 第4部分 数据库、...

    网上商城源代码(带数据库)

    JavaMailtest 是一个javamail程序,可以发送邮件. 更新的网上商城-数据库脚本.sql 是数据库脚本,在sql 2000的查询分析器运行即可 a注意:确保你的sql 2000中没有testdb3数据库 b注意:执行后,有一个错误提示,这...

Global site tag (gtag.js) - Google Analytics