Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          JavaMail(2)--發送帶附件的郵件

          Posted on 2009-05-31 00:40 啥都寫點 閱讀(963) 評論(0)  編輯  收藏 所屬分類: J2SE
          關鍵技術:
          • 發送帶附件的郵件時必須使用MimeMultipart和MimeBodyPart。MimeBodyPart可以存儲HTML子內容,也可以存儲二進制數據,如文件內容。
          • MimeBodyPart的setDataHandler方法能夠把DataHandler對象保存到郵件消息中,而用文件的File對象可以構造文件數據源FileDataSource,由FileDataSource可以構造DataHandler對象,所以,可以把文件內容設置到郵件消息中,此時文件便成了郵件的附件。
          • MimeBodyPart的setFileName方法給附件設置文件。

          package book.email;

          import java.io.File;
          import java.util.Date;

          import javax.activation.DataHandler;
          import javax.activation.FileDataSource;
          import javax.mail.Address;
          import javax.mail.BodyPart;
          import javax.mail.Message;
          import javax.mail.Multipart;
          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;
          import javax.mail.internet.MimeUtility;

          /**
           * 發送帶附件的郵件
           
          */
          public class AttachmentMailSender {

              
          public static boolean sendMail(MailSenderInfo mailInfo) {
                  
          // 判斷是否需要身份認證
                  MyAuthenticator authenticator = null;
                  
          if (mailInfo.isValidate()) {
                      
          // 如果需要身份認證,則創建一個密碼驗證器
                      authenticator = new MyAuthenticator(mailInfo.getUserName(),
                              mailInfo.getPassword());
                  }
                  
          // 根據郵件發送的屬性和密碼驗證器構造一個發送郵件的session
                  Session sendMailSession = Session.getInstance(mailInfo
                          .getProperties(), authenticator);
                  
          try {
                      
          // 根據session創建一個郵件消息
                      Message mailMessage = new MimeMessage(sendMailSession);
                      
          // 創建郵件發送者地址
                      Address from = new InternetAddress(mailInfo.getFromAddress());
                      
          // 設置郵件消息的發送者
                      mailMessage.setFrom(from);
                      
          // 創建郵件的接收者地址,并設置到郵件消息中
                      Address to = new InternetAddress(mailInfo.getToAddress());
                      mailMessage.setRecipient(Message.RecipientType.TO,to);
                      
          // 設置郵件消息的主題
                      mailMessage.setSubject(mailInfo.getSubject());
                      
          // 設置郵件消息發送的時間
                      mailMessage.setSentDate(new Date());
                      
                      
          // MiniMultipart類是一個容器類,包含MimeBodyPart類型的對象
                      Multipart mainPart = new MimeMultipart();
                      
          // 創建一個包含HTML內容的MimeBodyPart
                      BodyPart html = new MimeBodyPart();
                      
          // 設置HTML內容
                      html.setContent(mailInfo.getContent(), "text/html; charset=GBK");
                      mainPart.addBodyPart(html);
                      
          // 為郵件添加附件
                      String[] attachFileNames = mailInfo.getAttachFileNames();
                      
          if (attachFileNames != null && attachFileNames.length > 0) {
                          
          // 存放郵件附件的MimeBodyPart
                          MimeBodyPart attachment = null;
                          File file 
          = null;
                          
          for (int i = 0; i < attachFileNames.length; i++) {
                              attachment 
          = new MimeBodyPart();
                              
          // 根據附件文件創建文件數據源
                              file = new File(attachFileNames[i]);
                              FileDataSource fds 
          = new FileDataSource(file);
                              attachment.setDataHandler(
          new DataHandler(fds));
                              
          // 為附件設置文件名
                              attachment.setFileName(MimeUtility.encodeWord(file.getName(), "GBK",
                                      
          null));
                              mainPart.addBodyPart(attachment);
                          }
                      }
                      
          // 將MiniMultipart對象設置為郵件內容
                      mailMessage.setContent(mainPart);
                      
          // 發送郵件
                      Transport.send(mailMessage);
                      
          return true;
                      
                  } 
          catch (Exception e) {
                      e.printStackTrace();
                      
          return false;
                  }
              }
              
              
          public static void main(String[] args) {
                  
          // 創建郵件信息
                  MailSenderInfo mailInfo = new MailSenderInfo();
                  mailInfo.setMailServerHost(
          "smtp.sina.com.cn");
                  mailInfo.setMailServerPort(
          "25");
                  mailInfo.setValidate(
          true);
                  mailInfo.setUserName(
          "***");
                  mailInfo.setPassword(
          "***");
                  mailInfo.setFromAddress(
          "***@sina.com");
                  mailInfo.setToAddress(
          "***@163.com");
                  mailInfo.setSubject(
          "MyMail測試");
                  mailInfo.setContent(
          "我的郵件測試\n\rMy test mail\n\r");

                  String[] fileNames 
          = new String[3];
                  fileNames[
          0= "C:/temp/new.txt";
                  fileNames[
          1= "C:/temp/test.wav";
                  fileNames[
          2= "C:/temp/mary_photo.jpg";
                  mailInfo.setAttachFileNames(fileNames);
                  
                  AttachmentMailSender.sendMail(mailInfo);
              }
          }



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 应城市| 林周县| 冕宁县| 龙海市| 高台县| 木兰县| 汾阳市| 嵩明县| 化德县| 原阳县| 襄汾县| 江孜县| 涞水县| 南昌县| 凤冈县| 卓尼县| 芮城县| 巨鹿县| 义乌市| 栖霞市| 菏泽市| 沿河| 乐东| 甘孜县| 安多县| 雷山县| 潢川县| 金溪县| 葵青区| 方山县| 纳雍县| 焦作市| 锡林浩特市| 新余市| 平泉县| 台山市| 微博| 石棉县| 克山县| 大悟县| 巧家县|