有两个类:

第一个MessageSender.java

 

  1. import java.util.Properties;  
  2.  
  3. import javax.activation.DataHandler;  
  4. import javax.activation.FileDataSource;  
  5. import javax.mail.BodyPart;  
  6. import javax.mail.Multipart;  
  7. import javax.mail.Session;  
  8. import javax.mail.Transport;  
  9. import javax.mail.internet.InternetAddress;  
  10. import javax.mail.internet.MimeBodyPart;  
  11. import javax.mail.internet.MimeMessage;  
  12. import javax.mail.internet.MimeMultipart;  
  13.  
  14. public class MessageSender {  
  15.     /**  
  16.      * 整个MIME邮件对象  
  17.      */ 
  18.     private MimeMessage mimeMsg;  
  19.     /**  
  20.      * 专门用来发送邮件的Session会话  
  21.      */ 
  22.     private Session session;  
  23.     /**  
  24.      * 封装邮件发送时的一些配置信息的一个属性对象  
  25.      */ 
  26.     private Properties props;  
  27.     /**  
  28.      * 发件人的用户名  
  29.      */ 
  30.     private String username;  
  31.     /**  
  32.      * 发件人的密码  
  33.      */ 
  34.     private String password;  
  35.     /**  
  36.      * 用来实现附件添加的组件  
  37.      */ 
  38.     private Multipart mp;  
  39.  
  40.     /**  
  41.      * 发送参数初始化,有的服务器不需要用户验证,所以这里对用户名和密码进行初始化""  
  42.      *   
  43.      * @param smtp  
  44.      *            SMTP服务器的地址,比如要用QQ邮箱,哪么应为:"smtp.qq.com",163为:"smtp.163.com"  
  45.      */ 
  46.     public MessageSender(String smtp) {  
  47.         username = "";  
  48.         password = "";  
  49.         // 设置邮件服务器  
  50.         setSmtpHost(smtp);  
  51.         // 创建邮件  
  52.         createMimeMessage();  
  53.     }  
  54.  
  55.     /**  
  56.      * 设置发送邮件的主机(JavaMail需要Properties来创建一个session对象。  
  57.      * 它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机);  
  58.      *   
  59.      * @param hostName  
  60.      */ 
  61.     public void setSmtpHost(String hostName) {  
  62.         System.out.println("设置系统属性:mail.smtp.host = " + hostName);  
  63.         if (props == null)  
  64.             props = System.getProperties();  
  65.         props.put("mail.smtp.host", hostName);  
  66.     }  
  67.  
  68.     /**  
  69.      * (这个Session类代表JavaMail 中的一个邮件session. 每一个基于  
  70.      * JavaMail的应用程序至少有一个session但是可以有任意多的session。 在这个例子中,  
  71.      * Session对象需要知道用来处理邮件的SMTP 服务器。  
  72.      */ 
  73.     public boolean createMimeMessage() {  
  74.         try {  
  75.             System.out.println("准备获取邮件会话对象!");  
  76.             // 用props对象来创建并初始化session对象  
  77.             session = Session.getDefaultInstance(props, null);  
  78.         } catch (Exception e) {  
  79.             System.err.println("获取邮件会话对象时发生错误!" + e);  
  80.             return false;  
  81.         }  
  82.         System.out.println("准备创建MIME邮件对象!");  
  83.         try {  
  84.             // 用session对象来创建并初始化邮件对象  
  85.             mimeMsg = new MimeMessage(session);  
  86.             // 生成附件组件的实例  
  87.             mp = new MimeMultipart();  
  88.         } catch (Exception e) {  
  89.             System.err.println("创建MIME邮件对象失败!" + e);  
  90.             return false;  
  91.         }  
  92.         return true;  
  93.     }  
  94.  
  95.     /**  
  96.      * 设置SMTP的身份认证  
  97.      */ 
  98.     public void setNeedAuth(boolean need) {  
  99.         System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);  
  100.         if (props == null)  
  101.             props = System.getProperties();  
  102.         if (need)  
  103.             props.put("mail.smtp.auth""true");  
  104.         else 
  105.             props.put("mail.smtp.auth""false");  
  106.     }  
  107.  
  108.     /**  
  109.      * 进行用户身份验证时,设置用户名和密码  
  110.      */ 
  111.     public void setNamePass(String name, String pass) {  
  112.         System.out.println("程序得到用户名与密码");  
  113.         username = name;  
  114.         password = pass;  
  115.     }  
  116.  
  117.     /**  
  118.      * 设置邮件主题  
  119.      *   
  120.      * @param mailSubject  
  121.      * @return  
  122.      */ 
  123.     public boolean setSubject(String mailSubject) {  
  124.         System.out.println("设置邮件主题!");  
  125.         try {  
  126.             mimeMsg.setSubject(mailSubject);  
  127.         } catch (Exception e) {  
  128.             System.err.println("设置邮件主题发生错误!");  
  129.             return false;  
  130.         }  
  131.         return true;  
  132.     }  
  133.  
  134.     /**  
  135.      * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8  
  136.      *   
  137.      * @param mailBody  
  138.      * @return  
  139.      */ 
  140.     public boolean setBody(String mailBody) {  
  141.         try {  
  142.             System.out.println("设置邮件体格式");  
  143.             BodyPart bp = new MimeBodyPart();  
  144.             bp.setContent(  
  145.                     "<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" 
  146.                             + mailBody, "text/html;charset=UTF-8");  
  147.             // 在组件上添加邮件文本  
  148.             mp.addBodyPart(bp);  
  149.         } catch (Exception e) {  
  150.             System.err.println("设置邮件正文时发生错误!" + e);  
  151.             return false;  
  152.         }  
  153.         return true;  
  154.     }  
  155.  
  156.     /**  
  157.      * 增加发送附件  
  158.      *   
  159.      * @param filename  
  160.      *            邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常  
  161.      * @return  
  162.      */ 
  163.     public boolean addFileAffix(String filename) {  
  164.         System.out.println("增加邮件附件:" + filename);  
  165.         try {  
  166.             BodyPart bp = new MimeBodyPart();  
  167.             FileDataSource fileds = new FileDataSource(filename);  
  168.             bp.setDataHandler(new DataHandler(fileds));  
  169.             // 发送的附件前加上一个用户名的前缀  
  170.             bp.setFileName(fileds.getName());  
  171.             // 添加附件  
  172.             mp.addBodyPart(bp);  
  173.         } catch (Exception e) {  
  174.             System.err.println("增加邮件附件:" + filename + "发生错误!" + e);  
  175.             return false;  
  176.         }  
  177.         return true;  
  178.     }  
  179.  
  180.     /**  
  181.      * 设置发件人地址  
  182.      *   
  183.      * @param from  
  184.      *            发件人地址  
  185.      * @return  
  186.      */ 
  187.     public boolean setFrom(String from) {  
  188.         System.out.println("设置发信人!");  
  189.         try {  
  190.             mimeMsg.setFrom(new InternetAddress(from));  
  191.         } catch (Exception e) {  
  192.             return false;  
  193.         }  
  194.         return true;  
  195.     }  
  196.  
  197.     /**  
  198.      * 设置收件人地址  
  199.      *   
  200.      * @param to  
  201.      *            收件人的地址  
  202.      * @return  
  203.      */ 
  204.     public boolean setTo(String to) {  
  205.         System.out.println("设置收信人");  
  206.         if (to == null)  
  207.             return false;  
  208.         try {  
  209.             mimeMsg.setRecipients(javax.mail.Message.RecipientType.TO,  
  210.                     InternetAddress.parse(to));  
  211.         } catch (Exception e) {  
  212.             return false;  
  213.         }  
  214.         return true;  
  215.     }  
  216.  
  217.     /**  
  218.      * 发送附件  
  219.      *   
  220.      * @param copyto  
  221.      * @return  
  222.      */ 
  223.     public boolean setCopyTo(String copyto) {  
  224.         System.out.println("发送附件到");  
  225.         if (copyto == null)  
  226.             return false;  
  227.         try {  
  228.             mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,  
  229.                     InternetAddress.parse(copyto));  
  230.         } catch (Exception e) {  
  231.             return false;  
  232.         }  
  233.         return true;  
  234.     }  
  235.  
  236.     /**  
  237.      * 发送邮件  
  238.      *   
  239.      * @return  
  240.      */ 
  241.     public boolean sendout() {  
  242.         try {  
  243.             mimeMsg.setContent(mp);  
  244.             mimeMsg.saveChanges();  
  245.             System.out.println("正在发送邮件....");  
  246.             Session mailSession = Session.getInstance(props, null);  
  247.             Transport transport = mailSession.getTransport("smtp");  
  248.             // 真正的连接邮件服务器并进行身份验证  
  249.             transport.connect((String) props.get("mail.smtp.host"), username,  
  250.                     password);  
  251.             // 发送邮件  
  252.             transport.sendMessage(mimeMsg, mimeMsg  
  253.                     .getRecipients(javax.mail.Message.RecipientType.TO));  
  254.             System.out.println("发送邮件成功!");  
  255.             transport.close();  
  256.         } catch (Exception e) {  
  257.             System.err.println("邮件发送失败!" + e.getMessage());  
  258.             e.printStackTrace();  
  259.             return false;  
  260.         }  
  261.         return true;  
  262.     }  
  263.  
  264.     public static void main(String[] args) {  
  265.         MessageSender themail = new MessageSender("smtp.163.com");  
  266.         String mailbody = "手机停机了,写个程序发邮件,收到的话帮我下个java jdk6,你就在浏览器里面" +  
  267.                 "输入http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u30-download-1377139.html,然后在下载列表里找jdk-6u30-windows-i586.exe,然后下载,thank you!!";  
  268.         themail.setNeedAuth(true);  
  269.         themail.setSubject("你好");  
  270.         themail.setBody(mailbody);  
  271.         themail.setTo("393769603@qq.com");  
  272.         themail.setFrom("tianbao004@163.com");  
  273.         //themail.addFileAffix("C:/CEPxDD0D.tmp");// 附件文件路径,例如:C:/222.jpg,*注;"/"的写法;  
  274.         themail.setNamePass("tianbao004@163.com","841104");  
  275.         themail.sendout();  
  276. }  
  277. }  
第二个SendMailBean.java
  1. import java.util.Date;  
  2. import java.util.Properties;  
  3.  
  4. import javax.mail.Message;  
  5. import javax.mail.Session;  
  6. import javax.mail.Transport;  
  7. import javax.mail.internet.InternetAddress;  
  8. import javax.mail.internet.MimeMessage;  
  9.  
  10.  
  11. public class SendMailBean {  
  12.         private String form;   
  13.         private String to;   
  14.         private String hostName;   
  15.         private String port;   
  16.         private String userName;   
  17.         private String password;   
  18.         private String subject;   
  19.         private String body;  
  20.         public String getForm() {  
  21.             return form;  
  22.         }  
  23.         public void setForm(String form) {  
  24.             this.form = form;  
  25.         }  
  26.         public String getTo() {  
  27.             return to;  
  28.         }  
  29.         public void setTo(String to) {  
  30.             this.to = to;  
  31.         }  
  32.         public String getHostName() {  
  33.             return hostName;  
  34.         }  
  35.         public void setHostName(String hostName) {  
  36.             this.hostName = hostName;  
  37.         }  
  38.         public String getPort() {  
  39.             return port;  
  40.         }  
  41.         public void setPort(String port) {  
  42.             this.port = port;  
  43.         }  
  44.         public String getUserName() {  
  45.             return userName;  
  46.         }  
  47.         public void setUserName(String userName) {  
  48.             this.userName = userName;  
  49.         }  
  50.         public String getPassword() {  
  51.             return password;  
  52.         }  
  53.         public void setPassword(String password) {  
  54.             this.password = password;  
  55.         }  
  56.         public String getSubject() {  
  57.             return subject;  
  58.         }  
  59.         public void setSubject(String subject) {  
  60.             this.subject = subject;  
  61.         }  
  62.         public String getBody() {  
  63.             return body;  
  64.         }  
  65.         public void setBody(String body) {  
  66.             this.body = body;  
  67.         }   
  68.          public boolean sendMail(){   
  69.               Properties props=new Properties();   
  70.             //  props.put("mail.smtp.protocol","smtp");   
  71.               props.put("mail.smtp.host",hostName);   
  72.               props.put("mail.smtp.auth","true");   
  73.               props.put("mail.smpt.port",port);      
  74.               Session mailsession=Session.getInstance(props,null); //得到一个发送邮件的会话   
  75.                
  76.               Message msg=new MimeMessage(mailsession);   
  77.               try{   
  78.                msg.setFrom(new InternetAddress(this.getForm()));   
  79.                msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(this.getTo()));   
  80.                msg.setSubject(this.getSubject());   
  81.                msg.setSentDate(new Date());   
  82.                msg.setText(this.getBody());   
  83.                Transport transport = mailsession.getTransport("smtp");   
  84.                transport.connect(this.getHostName(),this.getUserName(),this.getPassword());   
  85.                transport.sendMessage(msg,msg.getRecipients(Message.RecipientType.TO));   
  86.               // System.out.println("邮件以成功发送到dushengjun@gmail.com");   
  87.                transport.close();   
  88.                return true;   
  89.               }catch(Exception e)   
  90.               {   
  91.                   System.out.println("产生异常:"+e);   
  92.                   return false;   
  93.               }   
  94.         }   
  95.          public static void main(String[] args) {   
  96.                System.out.println("正在准备发送.....");   
  97.                SendMailBean smb=new SendMailBean();   
  98.                smb.setUserName("tianbao004@163.com");   
  99.                smb.setForm("dushengjun@kingsoft.net");   
  100.                smb.setHostName("smtp.163.com");   
  101.                smb.setPassword("841104");   
  102.                smb.setPort("25");   
  103.                smb.setTo("284439843@qq.com");   
  104.                smb.setSubject("你好");   
  105.                smb.setBody("你好 Java");   
  106.                if(smb.sendMail())   
  107.                System.out.println("发送成功");   
  108.                else   
  109.                    System.out.println("发送失败");   
  110.             }   
  111.  
  112. }  

需要的jar包为:activation.jar dsn.jar imap.jar mailapi.jar  pop3.jar  smtp.jar