Java Mail 發送帶有附件的郵件


1、小編用的是163郵箱發送郵件,所以要先登錄163郵箱開啟POP3/SMTP/IMAP服務方法:

 

2、下載所需的java-mail 包

https://maven.java.net/content/repositories/releases/com/sun/mail/javax.mail/

 

3、貼上代碼

public class sendMail {
/**
 * 創建郵件信息
 * @param session
 * @param fromAccount
 * @param toAccount
 * @param sourcePath xml文件目錄   e.g. xml
 * @param zipPath   zip文件目錄  e.g. zip/person.zip
 */
    public static void CreateMessage(final Session session, final String fromAccount, final String toAccount,final String sourcePath,final String zipPath){
        try{
            final String subjectStr="聖誕節快樂";//主題
            final StringBuffer contentStr=new StringBuffer();//內容
            contentStr.append("<h2>Dear Friends,</h2><br/>");
            contentStr.append("Christmas is coming up soon. <br/> Wish you lots of love, joy &happiness. happy christmas.");
            contentStr.append("<h3>Regards,</h3>").append("<h3>ZHBIT College</h3>");

           //創建默認的 MimeMessage 對象
           final MimeMessage message = new MimeMessage(session);
           //Set From: 頭部頭字段
           message.setFrom(new InternetAddress(fromAccount));
           //Set To: 頭部頭字段
           message.addRecipient(Message.RecipientType.TO,
                                    new InternetAddress(toAccount));
           //Set Subject: 頭部頭字段
           message.setSubject(subjectStr);
          //創建消息部分
           final BodyPart messageBodyPart = new MimeBodyPart();
           //消息
           messageBodyPart.setContent(contentStr.toString(),"text/html;charset=UTF-8");
           //創建多重消息
           final Multipart multipart = new MimeMultipart();
           //設置文本消息部分
           multipart.addBodyPart(messageBodyPart);
           //為郵件添加多個附件
           MimeBodyPart attachment = null;
           final File source = new File(sourcePath);
           if (!source.exists()) {
               System.out.println(sourcePath + " not exists");
               return;
           }
           final File[] files = source.listFiles();
           for (final File f : files) {
               attachment = new MimeBodyPart();
               final String filePath =f.getPath();
               //根據附件文件創建文件數據源
               final DataSource ds = new FileDataSource(filePath);
               attachment.setDataHandler(new DataHandler(ds));
               //為附件設置文件名
               attachment.setFileName(ds.getName());
               multipart.addBodyPart(attachment);
           }

           //添加zip附件
           attachment = new MimeBodyPart();
           //根據附件文件創建文件數據源
           final DataSource ds = new FileDataSource(zipPath);
           attachment.setDataHandler(new DataHandler(ds));
           //為附件設置文件名
           attachment.setFileName(ds.getName());
           multipart.addBodyPart(attachment);

           // 發送完整消息
           message.setContent(multipart);
           // 發送消息
           Transport.send(message);

        }catch (final MessagingException mex) {
           mex.printStackTrace();
        }
    }


/**
 * 將源文件目錄下的所有文件打包成zip文件
 * @param sourceFilePath  e.g. xml
 * @param zipFilePath   e.g. zip
 * @param fileName   e.g. person
 * @return 返回生成的zip文件目錄  e.g. zip/person.zip
 */
    public static String tozip(final String sourceFilePath, final String zipFilePath,
            final String fileName) {
        final File sourceFile = new File(sourceFilePath);
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        FileOutputStream fos = null;
        ZipOutputStream zos = null;
        final String createZipPath=zipFilePath+ "/" + fileName+ ".zip";

        if(!sourceFile.exists()){
            System.out.println("待壓縮的文件目錄:" + sourceFilePath + "不存在");
        } else {
            try {
                final File zipFile = new File(createZipPath);
                final File[] sourceFiles = sourceFile.listFiles();
                if(null == sourceFiles || sourceFiles.length < 1) {
                    System.out.println("待壓縮的文件目錄:" + sourceFilePath + " 里面不存在文件,無需壓縮");
                }else{
                    fos = new FileOutputStream(zipFile);
                    zos = new ZipOutputStream(new BufferedOutputStream(fos));
                    final byte[] bufs = new byte[1024*10];
                    for(int i=0;i<sourceFiles.length;i++) {
                        // 創建ZIP實體,並添加進壓縮包
                        final ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName());
                        zos.putNextEntry(zipEntry);
                        // 讀取待壓縮的文件並寫進壓縮包里
                        fis = new FileInputStream(sourceFiles[i]);
                        bis = new BufferedInputStream(fis,1024*10);
                        int read = 0;
                        while((read=bis.read(bufs, 0, 1024*10)) != -1) {
                            zos.write(bufs, 0, read);
                        }
                    }
                }

            } catch (final FileNotFoundException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } catch (final IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                try {
                    if (null != bis) {
                        bis.close();
                    }
                    if (null != zos) {
                        zos.close();
                    }
                } catch (final IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }
        return createZipPath;
    }


    public static void main(final String[] args) {
        //收件人電子郵箱
        final String toAccount = "********@qq.com";
        //發件人的 郵箱 和 密碼
        final String fromAccount = "**********@163.com";
        final String fromPassword = "**********";
        //指定發送郵件的主機
        final String host = "smtp.163.com";

        //創建參數配置, 獲取系統屬性
        final Properties properties = System.getProperties();
        properties.setProperty("mail.transport.protocol", "smtp");
        properties.setProperty("mail.smtp.host", host);
        properties.put("mail.smtp.auth", "true");

        //根據配置創建會話對象,獲取默認session對象
        final Session session = Session.getDefaultInstance(properties,new Authenticator(){
          @Override
            public PasswordAuthentication getPasswordAuthentication()
              {
               return new PasswordAuthentication(fromAccount, fromPassword); //發件人郵件用戶名、密碼
              }
         });
        session.setDebug(true);

        final String xmlPath="xml";
        final String zipPath=tozip(xmlPath,"zip","person");
        CreateMessage(session,fromAccount,toAccount,xmlPath,zipPath);
    }

}

 

4、收到郵件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM