您的位置:首页 > 编程语言 > Java开发

发送邮件,加附件

2016-03-28 14:35 393 查看
需要参考3篇文章

第一篇,这个是基本代码

转载自:http://dove19900520.iteye.com/blog/2005303

运行后出现下面异常

异常:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

第二篇
http://www.blogjava.net/hwpok/archive/2009/04/02/263599.html
按照那个路径删除javaee.jar中的mail这个文件夹

第三篇

下载 mail.jar和activation.jar
http://download.csdn.net/detail/dbhunter/398258
今天闲着无事,研究了一下javaMail发送电子邮件的方法,自己总结了个步骤:

1、首先需要获取发送邮件的Session对象

Session session = Session.getDefaultInstance(properties,authorcator);

2、根据session对象,获取待发送的邮件消息

MimeMessage mimeMessage = new MimeMessage(session);

3、设置发件人,收件人,标题,邮件内容,附件,发送时间等;

4、利用Transport发送邮件

 

以下是居然的实现代码:

1、邮件信息类:

Java代码  


package com.china.test.mail;  

  

import java.util.Properties;  

  

/** 

 * 发送邮件需要使用的基本信息  

 * @author dove * 

 */  

public class MailSenderInfo {  

    // 发送邮件的服务器的IP  

    private String mailServerHost;      

    // 发送邮件的服务器的端口      

    private String mailServerPort = "25";      

    // 邮件发送者的地址      

    private String fromAddress;      

    // 邮件接收者的地址      

    private String[] toAddress;  

    // 邮件密送接收者的地址  

    private String[] toBlindCarbonCopyAddress;  

    // 邮件抄送接收者的地址  

    private String[] toCarbonCopyAddress;  

    // 登陆邮件发送服务器的用户名  

    private String userName;  

    // 登陆邮件发送服务器的密码      

    private String password;      

    // 是否需要身份验证      

    private boolean validate = false;      

    // 邮件主题      

    private String subject;      

    // 邮件的文本内容      

    private String content;      

    // 邮件附件的文件名      

    private String[] attachFileNames;  

      

    /** 

     * 获得邮件会话属性 

     */  

    public Properties getProperties() {  

        Properties pro = new Properties();  

        pro.put("mail.smtp.host", this.mailServerHost);  

        pro.put("mail.smtp.port", this.mailServerPort);  

        pro.put("mail.smtp.auth", validate ? "true" : "false");  

        return pro;  

    }  

      

    public String getMailServerHost() {  

        return mailServerHost;  

    }  

    public void setMailServerHost(String mailServerHost) {  

        this.mailServerHost = mailServerHost;  

    }  

    public String getMailServerPort() {  

        return mailServerPort;  

    }  

    public void setMailServerPort(String mailServerPort) {  

        this.mailServerPort = mailServerPort;  

    }  

    public String getFromAddress() {  

        return fromAddress;  

    }  

    public void setFromAddress(String fromAddress) {  

        this.fromAddress = fromAddress;  

    }  

    public String[] getToAddress() {  

        return toAddress;  

    }  

    public void setToAddress(String[] toAddress) {  

        this.toAddress = toAddress;  

    }  

    public String getUserName() {  

        return userName;  

    }  

    public void setUserName(String userName) {  

        this.userName = userName;  

    }  

    public String getPassword() {  

        return password;  

    }  

    public void setPassword(String password) {  

        this.password = password;  

    }  

    public boolean isValidate() {  

        return validate;  

    }  

    public void setValidate(boolean validate) {  

        this.validate = validate;  

    }  

    public String getSubject() {  

        return subject;  

    }  

    public void setSubject(String subject) {  

        this.subject = subject;  

    }  

    public String getContent() {  

        return content;  

    }  

    public void setContent(String content) {  

        this.content = content;  

    }  

    public String[] getAttachFileNames() {  

        return attachFileNames;  

    }  

    public void setAttachFileNames(String[] attachFileNames) {  

        this.attachFileNames = attachFileNames;  

    }  

  

    public String[] getToBlindCarbonCopyAddress() {  

        return toBlindCarbonCopyAddress;  

    }  

  

    public void setToBlindCarbonCopyAddress(String[] toBlindCarbonCopyAddress) {  

        this.toBlindCarbonCopyAddress = toBlindCarbonCopyAddress;  

    }  

  

    public String[] getToCarbonCopyAddress() {  

        return toCarbonCopyAddress;  

    }  

  

    public void setToCarbonCopyAddress(String[] toCarbonCopyAddress) {  

        this.toCarbonCopyAddress = toCarbonCopyAddress;  

    }  

      

}  

 

2、身份验证类

 

Java代码  


package com.china.test.mail;  

  

import javax.mail.Authenticator;  

import javax.mail.PasswordAuthentication;  

/** 

 * 身份验证器 

 * @author dove 

 * 

 */  

public class MyAuthenticator extends Authenticator {  

    private String username;  

    private String password;  

    public MyAuthenticator(){  

          

    }  

      

    public MyAuthenticator(String username, String password) {  

        this.username = username;  

        this.password = password;  

    }  

  

    @Override  

    protected PasswordAuthentication getPasswordAuthentication() {  

        return new PasswordAuthentication(username, password);  

    }  

      

    public String getUsername() {  

        return username;  

    }  

    public void setUsername(String username) {  

        this.username = username;  

    }  

    public String getPassword() {  

        return password;  

    }  

    public void setPassword(String password) {  

        this.password = password;  

    }  

}  

 

3、发送邮件类

该类有两个功能,一个是发送普通文本邮件;一个是发送html邮件,两者的本质是相同的,mime类型有所区别而已,具体请看代码:

Java代码  


package com.china.test.mail;  

  

import java.io.UnsupportedEncodingException;  

import java.util.Date;  

import java.util.Properties;  

  

import javax.activation.DataHandler;  

import javax.activation.DataSource;  

import javax.activation.FileDataSource;  

import javax.mail.Address;  

import javax.mail.BodyPart;  

import javax.mail.Message;  

import javax.mail.MessagingException;  

import javax.mail.Multipart;  

import javax.mail.Session;  

import javax.mail.Transport;  

import javax.mail.internet.AddressException;  

import javax.mail.internet.InternetAddress;  

import javax.mail.internet.MimeBodyPart;  

import javax.mail.internet.MimeMessage;  

import javax.mail.internet.MimeMultipart;  

import javax.mail.internet.MimeUtility;  

  

/** 

 * 简单邮件发送器 

 * @author dove * 

 */  

public class SimpleMailSender {  

    /** 

     * 以文本格式发送邮件 (支持群发,带附件) 

     * @param senderInfo 待发送的邮件的信息  

     * @return 

     */  

    public static boolean sendMail(MailSenderInfo senderInfo){  

        boolean flag = false;  

          

        // 判断是否需要身份验证  

        MyAuthenticator authenticator = null;  

        Properties props = senderInfo.getProperties();  

        if(senderInfo.isValidate()){  

            // 如果需要身份认证,则创建一个密码验证器     

            authenticator = new MyAuthenticator(senderInfo.getUserName(), senderInfo.getPassword());  

        }  

        // 根据邮件会话属性和密码验证器构造一个发送邮件的session  

        Session sendMailSession = Session.getDefaultInstance(props, authenticator);  

          

        try {  

            // 根据session创建一个邮件消息  

            Message sendMailMessage = new MimeMessage(sendMailSession);  

            // 创建邮件发送者地址  

            Address from = new InternetAddress(senderInfo.getFromAddress());  

            // 设置邮件消息的发送者  

            sendMailMessage.setFrom(from);  

              

            // 创建邮件接收者地址  

            String[] tos = senderInfo.getToAddress();  

            if(tos != null && tos.length != 0){  

                InternetAddress[] to = new InternetAddress[tos.length];  

                // 设置邮件消息的发送者  

                for (int i = 0; i < tos.length; i++) {  

                    to[i] = new InternetAddress(tos[i]);  

                }  

                sendMailMessage.setRecipients(Message.RecipientType.TO, to);  

            }  

              

            // 设置邮件抄送者地址  

            String[] toCCs = senderInfo.getToCarbonCopyAddress();  

            if(toCCs != null && toCCs.length != 0){  

                InternetAddress[] toCC = new InternetAddress[toCCs.length];  

                // 设置邮件消息的发送者  

                for (int i = 0; i < toCCs.length; i++) {  

                    toCC[i] = new InternetAddress(toCCs[i]);  

                }  

                sendMailMessage.addRecipients(Message.RecipientType.CC, toCC);  

            }  

              

            // 设置邮件密送者地址  

            String[] toBCCs = senderInfo.getToBlindCarbonCopyAddress();  

            if(toBCCs != null && toBCCs.length != 0){  

                InternetAddress[] toBCC = new InternetAddress[toBCCs.length];  

                for (int i = 0; i < toBCCs.length; i++) {  

                    toBCC[i] = new InternetAddress(toBCCs[i]);  

                }  

                sendMailMessage.addRecipients(Message.RecipientType.BCC, toBCC);  

            }  

              

            // 设置邮件主题  

            sendMailMessage.setSubject(MimeUtility.encodeText(senderInfo.getSubject(),"utf-8","B"));  

            // 设置邮件内容  

            //sendMailMessage.setText(senderInfo.getContent());  

            Multipart multipart = new MimeMultipart();  

            // 邮件文本内容  

            if(senderInfo.getContent() != null && !"".equals(senderInfo.getContent())){  

                BodyPart part = new MimeBodyPart();  

                part.setContent(senderInfo.getContent(), "text/plain;charset=utf-8");//设置邮件文本内容  

                multipart.addBodyPart(part);  

            }  

              

            // 附件  

            String attachFileNames[] = senderInfo.getAttachFileNames();  

            int leng = attachFileNames == null ? 0 : attachFileNames.length;  

            for (int i = 0; i < leng; i++) {  

                BodyPart part = new MimeBodyPart();  

                // 根据文件名获取数据源  

                DataSource dataSource = new FileDataSource(attachFileNames[i]);  

                DataHandler dataHandler = new DataHandler(dataSource);  

                // 得到附件本身并至入BodyPart  

                part.setDataHandler(dataHandler);  

                // 得到文件名同样至入BodyPart  

                part.setFileName(MimeUtility.encodeText(dataSource.getName()));  

                multipart.addBodyPart(part);  

            }  

              

            sendMailMessage.setContent(multipart);  

            // 设置邮件发送的时间  

            sendMailMessage.setSentDate(new Date());  

            // 发送邮件  

            //Transport.send(sendMailMessage);  

            Transport transport = sendMailSession.getTransport("smtp");  

            transport.connect(senderInfo.getUserName(), senderInfo.getPassword());  

            transport.send(sendMailMessage,sendMailMessage.getAllRecipients());  

            transport.close();  

              

            flag = true;  

        } catch (AddressException e) {  

            e.printStackTrace();  

        } catch (MessagingException e) {  

            e.printStackTrace();  

        } catch (UnsupportedEncodingException e) {  

            e.printStackTrace();  

        }  

          

        return flag;  

    }  

      

    public static boolean sendHtmlMail(MailSenderInfo senderInfo){  

        boolean flag = false;  

          

        // 判断是否需要身份验证  

        MyAuthenticator authenticator = null;  

        Properties props = senderInfo.getProperties();  

        if(senderInfo.isValidate()){  

            // 如果需要身份认证,则创建一个密码验证器     

            authenticator = new MyAuthenticator(senderInfo.getUserName(), senderInfo.getPassword());  

        }  

        // 根据邮件会话属性和密码验证器构造一个发送邮件的session  

        Session sendMailSession = Session.getDefaultInstance(props, authenticator);  

          

        try {  

            // 根据session创建一个邮件消息  

            Message sendMailMessage = new MimeMessage(sendMailSession);  

            // 创建邮件发送者地址  

            Address from = new InternetAddress(senderInfo.getFromAddress());  

            // 设置邮件消息的发送者  

            sendMailMessage.setFrom(from);  

              

            // 创建邮件接收者地址  

            String[] tos = senderInfo.getToAddress();  

            if(tos != null && tos.length != 0){  

                InternetAddress[] to = new InternetAddress[tos.length];  

                // 设置邮件消息的发送者  

                for (int i = 0; i < tos.length; i++) {  

                    to[i] = new InternetAddress(tos[i]);  

                }  

                sendMailMessage.setRecipients(Message.RecipientType.TO, to);  

            }  

              

            // 设置邮件抄送者地址  

            String[] toCCs = senderInfo.getToCarbonCopyAddress();  

            if(toCCs != null && toCCs.length != 0){  

                InternetAddress[] toCC = new InternetAddress[toCCs.length];  

                // 设置邮件消息的发送者  

                for (int i = 0; i < toCCs.length; i++) {  

                    toCC[i] = new InternetAddress(toCCs[i]);  

                }  

                sendMailMessage.addRecipients(Message.RecipientType.CC, toCC);  

            }  

              

            // 设置邮件密送者地址  

            String[] toBCCs = senderInfo.getToBlindCarbonCopyAddress();  

            if(toBCCs != null && toBCCs.length != 0){  

                InternetAddress[] toBCC = new InternetAddress[toBCCs.length];  

                for (int i = 0; i < toBCCs.length; i++) {  

                    toBCC[i] = new InternetAddress(toBCCs[i]);  

                }  

                sendMailMessage.addRecipients(Message.RecipientType.BCC, toBCC);  

            }  

              

            // 设置邮件主题  

            sendMailMessage.setSubject(MimeUtility.encodeText(senderInfo.getSubject(),"utf-8","B"));  

            // 设置邮件内容  

            //sendMailMessage.setText(senderInfo.getContent());  

            Multipart multipart = new MimeMultipart();  

            // 邮件文本内容  

            if(senderInfo.getContent() != null && !"".equals(senderInfo.getContent())){  

                BodyPart part = new MimeBodyPart();  

                part.setContent(senderInfo.getContent(), "text/html;charset=utf-8");//设置邮件文本内容  

                multipart.addBodyPart(part);  

            }  

              

            // 附件  

            String attachFileNames[] = senderInfo.getAttachFileNames();  

            int leng = attachFileNames == null ? 0 : attachFileNames.length;  

            for (int i = 0; i < leng; i++) {  

                BodyPart part = new MimeBodyPart();  

                // 根据文件名获取数据源  

                DataSource dataSource = new FileDataSource(attachFileNames[i]);  

                DataHandler dataHandler = new DataHandler(dataSource);  

                // 得到附件本身并至入BodyPart  

                part.setDataHandler(dataHandler);  

                // 得到文件名同样至入BodyPart  

                part.setFileName(MimeUtility.encodeText(dataSource.getName()));  

                multipart.addBodyPart(part);  

            }  

              

            sendMailMessage.setContent(multipart);  

            // 设置邮件发送的时间  

            sendMailMessage.setSentDate(new Date());  

            // 发送邮件  

            //Transport.send(sendMailMessage);  

            Transport transport = sendMailSession.getTransport("smtp");  

            transport.connect(senderInfo.getUserName(), senderInfo.getPassword());  

            transport.send(sendMailMessage,sendMailMessage.getAllRecipients());  

              

            // 关闭transport  

            transport.close();  

              

            flag = true;  

        } catch (AddressException e) {  

            e.printStackTrace();  

        } catch (MessagingException e) {  

            e.printStackTrace();  

        } catch (UnsupportedEncodingException e) {  

            e.printStackTrace();  

        }  

          

        return flag;  

    }  

      

    public static void main(String[] args) {  

        MailSenderInfo mailInfo = new MailSenderInfo();  

        mailInfo.setMailServerHost("smtp.sina.com");  

        mailInfo.setMailServerPort("25");  

        mailInfo.setValidate(true);  

        mailInfo.setUserName("********@sina.com");  

        mailInfo.setPassword("*********");// 您的邮箱密码  

        mailInfo.setFromAddress("jingjingwang163@sina.com");  

        String[] to = {"********@bj.china.com"};  

        mailInfo.setToAddress(to);  

        String[] toCC = {"**********@qq.com"};  

        mailInfo.setToCarbonCopyAddress(toCC);  

        String[] toBCC = {"*******@sina.com"};  

        mailInfo.setToBlindCarbonCopyAddress(toBCC);  

        mailInfo.setAttachFileNames(new String[]{"C:/Documents and Settings/Administrator/桌面/考勤休假制度表格(新).xls","C:/Documents and Settings/Administrator/桌面/dove.jpg"});  

        mailInfo.setSubject("发送HTML邮件");  

        String body = "<table width=\"80%\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" style=\"align:center;text-align:center\"><tr><td>你好</td><td>你好</td><td>你好</td></tr></table>";  

        mailInfo.setContent(body);  

        // 这个类主要来发送邮件  

        System.out.println(SimpleMailSender.sendHtmlMail(mailInfo));;//发送文体格式  

    }  

}  

 

 

本代码必须依赖与mail.jar 包,请自行下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java mail 附件