1. 程式人生 > >Java Mail 發送帶有附件的郵件

Java Mail 發送帶有附件的郵件

list body nts put releases debug 字段 sage multi

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

技術分享圖片

2、下載所需的java-mail 包

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

3、貼上代碼

package javamail;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Authenticator;
import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; 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、收到郵件

技術分享圖片

Java Mail 發送帶有附件的郵件