javamail技术

package com.zh.javaEmail;



import java.util.*;

import javax.mail.*;



import javax.mail.internet.*;



import javax.activation.*;



public class MysendMail {



 private MimeMessage mimeMsg; // MIME邮件对象



 private Session session; // 邮件会话对象

 private Properties props; // 系统属性

 private boolean needAuth = false; // smtp是否需要认证



 private String username = ""; // smtp认证用户名和密码

 private String password = "";



 private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象



 public MysendMail() {

  // setSmtpHost(getConfig.mailHost);//如果没有指定邮件服务器,就从getConfig类中获取

  createMimeMessage();

 }



 public MysendMail(String smtp) {

  setSmtpHost(smtp);

  createMimeMessage();

 }



 /**

  * @param hostName

  *            String

  */

 public void setSmtpHost(String hostName) {



  System.out.println("设置系统属性:mail.smtp.host = " + hostName);

  if (props == null)

   props = System.getProperties(); // 获得系统属性对象



  props.put("mail.smtp.host", hostName); // 设置SMTP主机



 }



 /**

  * @return boolean

  */

 public boolean createMimeMessage() {

  try {

   System.out.println("准备获取邮件会话对象!");

   session = Session.getDefaultInstance(props, null); // 获得邮件会话对象

  }



  catch (Exception e) {

   System.err.println("获取邮件会话对象时发生错误!" + e);

   return false;

  }



  System.out.println("准备创建MIME邮件对象!");



  try {



   mimeMsg = new MimeMessage(session); // 创建MIME邮件对象

   mp = new MimeMultipart();



   return true;



  } catch (Exception e) {



   System.err.println("创建MIME邮件对象失败!" + e);

   return false;

  }

 }



 /**

  * @param need

  *            boolean

  */

 public void setNeedAuth(boolean need) {



  System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);

  if (props == null)

   props = System.getProperties();

  if (need) {

   props.put("mail.smtp.auth", "true");

  } else {

   props.put("mail.smtp.auth", "false");

  }

 }



 /**

  * @param name

  *            String

  * @param pass

  *            String

  */

 public void setNamePass(String name, String pass) {

  username = name;

  password = pass;

 }



 /**

  * @param mailSubject

  *            String

  * @return boolean

  */

 public boolean setSubject(String mailSubject) {

  System.out.println("设置邮件主题!");

  try {

   mimeMsg.setSubject(mailSubject);

   return true;

  } catch (Exception e) {

   System.err.println("设置邮件主题发生错误!");

   return false;

  }

 }



 /**

  * @param mailBody

  *            String

  */

 public boolean setBody(String mailBody) {

  try {

   BodyPart bp = new MimeBodyPart();

   bp.setContent(

     "<meta http-equiv=Content-Type content=text/html; charset=gb2312>"

       + mailBody, "text/html;charset=GB2312");

   mp.addBodyPart(bp);



   return true;

  } catch (Exception e) {

   System.err.println("设置邮件正文时发生错误!" + e);

   return false;

  }

 }



 /**

  * @param name

  *            String

  * @param pass

  *            String

  */

 public boolean addFileAffix(String filename) {



  System.out.println("增加邮件附件:" + filename);



  try {

   BodyPart bp = new MimeBodyPart();

   FileDataSource fileds = new FileDataSource(filename);

   bp.setDataHandler(new DataHandler(fileds));

   bp.setFileName(fileds.getName());



   mp.addBodyPart(bp);



   return true;

  } catch (Exception e) {

   System.err.println("增加邮件附件:" + filename + "发生错误!" + e);

   return false;

  }

 }



 /**

  * @param name

  *            String

  * @param pass

  *            String

  */

 public boolean setFrom(String from) {

  System.out.println("设置发信人!");

  try {

   mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人

   return true;

  } catch (Exception e) {

   return false;

  }

 }



 /**

  * @param name

  *            String

  * @param pass

  *            String

  */

 public boolean setTo(String to) {

  if (to == null)

   return false;



  try {

   mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress

     .parse(to));

   return true;

  } catch (Exception e) {

   return false;

  }



 }



 /**

  * @param name

  *            String

  * @param pass

  *            String

  */

 public boolean setCopyTo(String copyto) {

  if (copyto == null)

   return false;

  try {

   mimeMsg.setRecipients(Message.RecipientType.CC,

     (Address[]) InternetAddress.parse(copyto));

   return true;

  } catch (Exception e) {

   return false;

  }

 }



 /**

  * @param name

  *            String

  * @param pass

  *            String

  */

 public boolean sendout() {

  try {

   mimeMsg.setContent(mp);

   mimeMsg.saveChanges();

   System.out.println("正在发送邮件....");



   Session mailSession = Session.getInstance(props, null);

   Transport transport = mailSession.getTransport("smtp"); //传送数据的类

   transport.connect((String) props.get("mail.smtp.host"), username,

     password);

   transport.sendMessage(mimeMsg, mimeMsg

     .getRecipients(Message.RecipientType.TO));



   System.out.println("发送邮件成功!");

   transport.close();

   return true;

  } catch (Exception e) {

   System.err.println("邮件发送失败!" + e);

   return false;

  }



 }



}



 



 



/*这个是封装的类*/



package com.zh.javaEmail;



public class SendMailToSomeone {



 public static void main(String []args){

  

  SendMailToSomeone sts=new SendMailToSomeone();

  sts.send("aa", "hello", "[email protected]",

    "[email protected]", "xxxx", "smtp.163.com");

 }

 

 /**

  * 发送电子邮件到指定的信箱

  * @param title 邮件标题 

  * @param mailbody 邮件内容【一个网页,表格ok】

  * @param sendTo 发送给谁 [email protected]

  * @param from 从哪些发送 [email protected]

  * @param passwd 密码 123456

  * @param sendStmp 发送邮件的smtp smtp.sohu.com [smtp.163.com] [smtp.sina.com] [smtp.qq.com]

  */

 public void send(String title,String mailbody,String sendTo,String from,String passwd,String sendStmp){

  

  //指明让那个smtp转发(搜狐)

  MysendMail themail = new MysendMail(sendStmp);

  //校验身份

  themail.setNeedAuth(true);

  //邮件标题

  if(themail.setSubject(title) == false) return;

  //将要发送的 内容放入邮件体 

  if(themail.setBody(mailbody) == false) return;

  

  //发送到哪里

  if(themail.setTo(sendTo) == false) return;

  

  //谁发送的

  if(themail.setFrom(from) == false) return;

 

     //if(themail.addFileAffix("e:\\butterfly.gif") == false) return;

  

  //将在sohu网站上的邮件用户名和 密码 放入邮件体 

  themail.setNamePass(from,passwd);

  //发送

  if(themail.sendout() == false) return;

 }

}







需要注意的几点:



1. java.lang.NoClassDefFoundError: com/sun/mail/util/BEncoderStream



这个问题是Mail.jar包没有引入到java路径中,或者是版本的问题,



重新下载一个MailXXXXX.zip 然后引包



2.Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStreams



  原因是jar包版本不统一,解决方法如下: 删除Java EE 5 Libraries/javaee.jar/mail里的包有东西. 具体方法如下: 在Myeclipse6.0.1中用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar 在Myeclipse8.5中 D:/Program Files/MyEclipse 8.5/Common/plugins/com.genuitec.eclipse.j2eedt.core_8.5.0.me201003231033/data/libraryset/EE_5/EE_5/javaee.jar ,然后删除mail,一切就ok了. 若删除的时候出错,则需要先在myeclipse里面删除掉引用了J2ee5.0的工程,然后再关闭myeclipse再进行删除操作。



 

 注意当删除javaee.jar中的文件时,要删除mail和activation两个,然后再添加mail.jar和activation.jar两个包就可以了

你可能感兴趣的:(javamail)