Java實現發送帶附件email – JAVA編程語言程序開發技術文章

一、目標

用java代碼實現發送帶附件email的功能

二、學習地址

  

三、前期準備:

增加jar包:javamail1_4_5.zip

 [java] 
public class SendMailService { 
    private MailInformation mailInfor; 
    private static SendMailService sendMailService; 
     
    public void setMailInfor(MailInformation mailInfor) { 
        this.mailInfor = mailInfor; 
    }     
 
        public static SendMailService getService() { 
        if (sendMailService == null) { 
            sendMailService = new SendMailService(); 
        } 
        return sendMailService; 
    } 
    /**
     * 此段代碼用來發送普通帶附件電子郵件
     */ 
    public void send() throws Exception { 
        try { 
            Properties props = new Properties(); // 獲取系統環境 
            Authenticator auth = new Email_Autherticator(); // 進行郵件服務器用戶認證 
            props.put("mail.smtp.host", mailInfor.getHost()); 
            props.put("mail.smtp.auth", "true"); 
            Session session = Session.getDefaultInstance(props, auth); 
            // 用於在console中顯示執行過程信息 
            session.setDebug(true); 
            // 設置session,和郵件服務器進行通訊。 
            MimeMessage message = new MimeMessage(session); 
            message.setSubject(mailInfor.getMail_subject()); // 設置郵件標題 
            message.setSentDate(new Date()); // 設置郵件發送日期 
            Address address = new InternetAddress(mailInfor.getSendEmail(), 
                    mailInfor.getSendPassword()); 
            message.setFrom(address); // 設置郵件發送者的地址 
            Address toAddress = new InternetAddress(mailInfor.getMail_to()); // 設置郵件接收方的地址 
            message.addRecipient(Message.RecipientType.TO, toAddress);// 加載收件人地址 
 
            message.setText(mailInfor.getMail_body()); // 設置郵件正文 
            // 向multipart對象中添加郵件的各個部分內容,包括文本內容和附件 
            Multipart multipart = new MimeMultipart(); 
            // 設置郵件的文本內容 
            BodyPart contentPart = new MimeBodyPart(); 
            contentPart.setText(mailInfor.getMail_body()); 
            multipart.addBodyPart(contentPart); 
            multipart.addBodyPart(contentPart); 
            if (!mailInfor.getFile().isEmpty()) {// 有附件 
                Enumeration efile = mailInfor.getFile().elements(); 
                while (efile.hasMoreElements()) { 
                    contentPart = new MimeBodyPart(); 
                    String filename = efile.nextElement().toString(); // 選擇出每一個附件名 
                    FileDataSource fds = new FileDataSource(filename); // 得到數據源 
                    contentPart.setDataHandler(new DataHandler(fds)); // 得到附件本身並至入BodyPart 
                    // contentPart.setFileName(fds.getName()); 
                    // //得到文件名同樣至入BodyPart,並解決中文名亂碼問題 
                    contentPart.setFileName(MimeUtility.encodeText(fds 
                            .getName())); 
                    multipart.addBodyPart(contentPart); 
                } 
                mailInfor.getFile().removeAllElements(); 
            } 
            // 將multipart對象放到message中 
            message.setContent(multipart, "text/html;charset=gb2312"); // Multipart加入到信件 
            // 保存郵件 
            message.saveChanges(); 
            Transport.send(message); // 發送郵件 
             
            System.out.println("send ok!"); 
 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
            throw new Exception(ex.getMessage()); 
        } 
    } 
 
    /**
     * 用來進行服務器對用戶的認證
     */ 
    class Email_Autherticator extends Authenticator { 
        public Email_Autherticator() { 
            super(); 
        } 
        Email_Autherticator(String user, String pwd) { 
            super(); 
            mailInfor.setSendEmail(user); 
            mailInfor.setSendPassword(pwd); 
        } 
        public PasswordAuthentication getPasswordAuthentication() { 
            return new PasswordAuthentication(mailInfor.getSendEmail(), 
                    mailInfor.getSendPassword()); 
        } 
    } 

javaBean
[java] 
public class MailInformation { 
// 發送郵件的郵箱地址服務器 
    private String host; 
    // 這個是你的郵箱用戶名以及郵件顯示發送者郵箱 
    private String sendEmail ; 
    // 你的郵箱密碼 
    private String sendPassword ; 
    //郵件發送者顯示姓名 
    private String sendName ; 
     //待接收的郵箱 
    private String mail_to ; 
    //郵件標題 
    private String mail_subject; 
    //郵件內容 
    private String mail_body ; 
    //用於保存發送附件的文件名的集合   
    private Vector<String> file ; 
    /**
     * 建立發郵件實體時傳入發件人的email信息
     * @param sendEmail email地址
     * @param sendPassword email密碼
     * @param sendName 發送郵件中顯示發件人姓名
     */ 
    public MailInformation(String sendEmail,String sendPassword,String sendName){ 
        this.sendEmail = sendEmail; 
        this.sendPassword = sendName; 
        this.sendName = sendName; 
    } 
    /**
     * 163郵箱的host
     */ 
    public void set163Host(){ 
        host = "smtp.163.com"; 
    } 
    /**
     * 126郵箱的host
     */ 
    public void set126Host(){ 
        host = "smtp.126.com"; 
    } 
    /**
     * qq郵箱的host
     */ 
    public void setQQHost(){ 
        host = "smtp.qq.com"; 
    } 
    /**
     * 雅虎郵箱的host
     */ 
    public void setYahooHost(){ 
        host = "smtp.mail.yahoo.com.cn "; 
    } 
    /**
     * 獲得發送郵件的郵箱地址服務器
     * @return 地址服務器
     */ 
    public String getHost() { 
        return host; 
    } 
    /**
     * 設置發送郵件的郵箱地址服務器
     * @param host
     */ 
    public void setHost(String host) { 
        this.host = host; 
    } 
    /**
     * 設置發件人的email
     * @param sendEmail email
     */ 
    public void setSendEmail(String sendEmail) { 
        this.sendEmail = sendEmail; 
    } 
    /**
     * 得到發件人的email
     * @return sendEmail email
     */ 
    public String getSendEmail() { 
        return sendEmail ; 
    } 
    /**
     * 設置發件人的email密碼
     * @param sendPassword 密碼
     */ 
    public void setSendPassword(String sendPassword) { 
        this.sendPassword = sendPassword; 
    } 
    /**
     * 得到發件人的email密碼
     * @return sendPassword 密碼
     */ 
    public String getSendPassword() { 
        return sendPassword ; 
    } 
    /**
     * 得到郵件中顯示的發件人姓名
     * @return 發件人姓名
     */ 
    public String getSendName() { 
        return sendName; 
    } 
    /**
     * 設置郵件中顯示的發件人姓名
     * @param sendName 發件人姓名
     */ 
    public void setSendName(String sendName) { 
        this.sendName = sendName; 
    } 
    /**
     * 得到收件人email
     * @return 收件人email
     */ 
    public String getMail_to() { 
        return mail_to; 
    } 
    /**
     * 設置收件人email
     * @param mail_to  收件人email
     */ 
    public void setMail_to(String mail_to) { 
        this.mail_to = mail_to; 
    } 
    /**
     * 郵件標題
     * @return 郵件標題
     */ 
    public String getMail_subject() { 
        return mail_subject; 
    } 
    /**
     * 設置郵件標題
     * @param mail_subject 郵件標題
     */ 
    public void setMail_subject(String mail_subject) { 
        this.mail_subject = mail_subject; 
    } 
    /**
     * 得到郵件內容
     * @return 郵件內容
     */ 
    public String getMail_body() { 
        return mail_body; 
    } 
    /**
     * 設置郵件內容
     * @param mail_body 郵件內容
     */ 
    public void setMail_body(String mail_body) { 
        this.mail_body = mail_body; 
    } 
    /**
     * 得到附件所在的絕對路徑
     * @return 絕對路徑
     */ 
    public Vector<String> getFile() { 
        return file; 
    } 
    /**
     * 天劍附件所在的絕對路徑
     * @return 絕對路徑
     */ 
    public void setFile(Vector<String> file) { 
        this.file = file; 
    } 

五、調用方式
[java] 
public static void main(String[] args) { 
        SendMailService sendmail = SendMailService.getService(); 
        MailInformation mailInformation = new MailInformation( 
                "發件人email", "發件人email密碼", "發件人顯示姓名"); 
        mailInformation.set163Host(); 
        mailInformation.setMail_subject("測試發送郵件"); 
        mailInformation.setMail_body("這是一封測試是否能夠發送帶附件郵件的信"); 
        mailInformation.setSendEmail("收件人email"); 
        Vector<String> fileStr = new Vector<String>(); 
        fileStr.add("附件地址絕對路徑"); 
        mailInformation.setFile(fileStr); 
        sendmail.setMailInfor(mailInformation); 
        try { 
            sendmail.send(); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
        } 
    } 

發佈留言