zoukankan      html  css  js  c++  java
  • 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", "xxxxx@qq.com",
        "xxxxx@163.com", "xxxx", "smtp.163.com");
     }
     
     /**
      * 发送电子邮件到指定的信箱
      * @param title 邮件标题 
      * @param mailbody 邮件内容【一个网页,表格ok】
      * @param sendTo 发送给谁 xxxx@tsinghua.org.cn
      * @param from 从哪些发送 admin@sohu.com
      * @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两个包就可以了

  • 相关阅读:
    SOAP协议调研
    android 支付宝 沙箱环境配置
    点击两次物理键退出APP
    Android LitePal的简单使用
    多线程
    【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现
    【Android】14.0 UI开发(五)——列表控件RecyclerView的瀑布布局排列实现
    【Android】利用回收机制创建ListView列表实现
    BaseActivity
    【MySQL数据库】一些bug的解决
  • 原文地址:https://www.cnblogs.com/shaoshao/p/3375101.html
Copyright © 2011-2022 走看看