`
Clayz
  • 浏览: 298589 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

用Java Mail发送带图片附件

    博客分类:
  • Java
阅读更多

1,读入图片的方式:
发现网上讲的很多读取图片的方式都不对,按下面提供的这个方法来读取,保证成功。

java 代码
 
  1. private   byte [] getImageBytes(String file) {  
  2.     byte [] myData =  null ;  
  3.     InputStream input = getClass().getClassLoader().getResourceAsStream(file);  
  4.     try  {  
  5.         ByteArrayOutputStream byteArray = new  ByteArrayOutputStream();  
  6.         int  ch =  0 ;  
  7.         while  ((ch = input.read()) != - 1 ) {  
  8.         byteArray.write(ch);  
  9.     }  
  10.     // System.out.println(byteArray.size());   
  11.     myData = byteArray.toByteArray();  
  12.     // System.out.println(myData.length);   
  13.     }  
  14.     catch  (Exception e) {  
  15.         e.printStackTrace();}  
  16.         return  myData;  
  17.     }  


2,发送邮件的“机关”

java 代码
 
  1. MimeMessage msg =  new  MimeMessage(mailSession);  
  2. msg.setFrom(new  InternetAddress( this .getSenderAddress()));  
  3. msg.setSubject(this .getTitle());  
  4. msg.setSentDate(new  Date());  
  5. Address[] adds = InternetAddress.parse(getToAddress());  
  6. msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);  
  7. // 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)   
  8. MimeMultipart mm = new  MimeMultipart( "related" );  
  9. // 新建一个存放信件内容的BodyPart对象   
  10. BodyPart mdp = new  MimeBodyPart();  
  11. // 给BodyPart对象设置内容和格式/编码方式   
  12. mdp.setContent(this .getContent(),  "text/html;charset=utf-8" );  
  13. // 这句很重要,千万不要忘了   
  14. mm.addBodyPart(mdp);  
  15.   
  16. // ---------图片处理开始!!!!!!!!!!!!!!!!   
  17. mdp = new  MimeBodyPart();  
  18. byte  bbb[] =  new   byte [ 1024  *  10 ];  
  19. this .getClass().getClassLoader().getResourceAsStream( "notice.jpg" ).read(bbb);  
  20. DataHandler dh = new  DataHandler( new  ByteArrayDataSource( this .getImageBytes( "notice.jpg" ), "application/octet-stream" ));  
  21. mdp.setDataHandler(dh);  
  22. // 加上这句将作为附件发送,否则将作为信件的文本内容   
  23. mdp.setFileName("1.jpg" );  
  24. mdp.setHeader("content-id" "<IMG1>" );  
  25. // 将含有附件的BodyPart加入到MimeMultipart对象中   
  26. mm.addBodyPart(mdp);  
  27.   
  28. // 把mm作为消息对象的内容   
  29. msg.setContent(mm); 


3,一个实际应用的完整代码
要求根据一个格式文件和模版,发一封漂亮的邮件,所以需要用到HTML格式来发送邮件。不多说了,看代码吧!

java 代码
 
  1. import  java.io.ByteArrayOutputStream;  
  2. import  java.io.File;  
  3. import  java.io.FileReader;  
  4. import  java.io.IOException;  
  5. import  java.io.InputStream;  
  6. import  java.util.Date;  
  7. import  java.util.HashMap;  
  8. import  java.util.Map;  
  9. import  java.util.Properties;  
  10. import  javax.activation.DataHandler;  
  11. import  javax.mail.Address;  
  12. import  javax.mail.BodyPart;  
  13. import  javax.mail.internet.InternetAddress;  
  14. import  javax.mail.internet.MimeBodyPart;  
  15. import  javax.mail.internet.MimeMessage;  
  16. import  javax.mail.internet.MimeMultipart;  
  17. import  javax.mail.util.ByteArrayDataSource;  
  18. /** */ /**  
  19. *  
  20. * @author robin  
  21. * @version $Revision: 1.4 $  
  22. */   
  23. public   class  SendMailUtil {  
  24.     private  String mailServerAddress;  
  25.     private  String user;  
  26.     private  String password;  
  27.     private  String toAddress;  
  28.     private  String ccAddress;  
  29.     private  String title;  
  30.     private  String content;  
  31.     private   boolean  isHtml =  true ;  
  32.     private  Map attachmentFiles =  null ;  
  33.     private  String senderAddress;  
  34.   
  35.     private   byte [] getImageBytes(String file) {  
  36.         byte [] myData =  null ;  
  37.         InputStream input = getClass().getClassLoader().getResourceAsStream(file);  
  38.         try  {  
  39.             ByteArrayOutputStream byteArray = new  ByteArrayOutputStream();  
  40.             int  ch =  0 ;  
  41.             while  ((ch = input.read()) != - 1 ) {  
  42.                 byteArray.write(ch);  
  43.             }  
  44.             // System.out.println(byteArray.size());   
  45.             myData = byteArray.toByteArray();  
  46.             // System.out.println(myData.length);   
  47.         } catch  (Exception e) {  
  48.             e.printStackTrace();  
  49.         }  
  50.         return  myData;  
  51.     }  
  52.   
  53.     public   void  sendMail()  throws  Exception {  
  54.         Properties pos = new  Properties();  
  55.         pos.put("mail.smtp.host" "10.5.1.1" );  
  56.         javax.mail.Session mailSession = javax.mail.Session.getInstance(pos,null );  
  57.         MimeMessage msg = new  MimeMessage(mailSession);  
  58.         msg.setFrom(new  InternetAddress( this .getSenderAddress()));  
  59.         msg.setSubject(this .getTitle());  
  60.         msg.setSentDate(new  Date());  
  61.         Address[] adds = InternetAddress.parse(getToAddress());  
  62.         msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);  
  63.         // 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)   
  64.         MimeMultipart mm = new  MimeMultipart( "related" );  
  65.         // 新建一个存放信件内容的BodyPart对象   
  66.         BodyPart mdp = new  MimeBodyPart();  
  67.         // 给BodyPart对象设置内容和格式/编码方式   
  68.         mdp.setContent(this .getContent(),  "text/html;charset=utf-8" );  
  69.         // 这句很重要,千万不要忘了   
  70.         mm.addBodyPart(mdp);  
  71.   
  72.         // ---------图片处理开始!!!!!!!!!!!!!!!!   
  73.         mdp = new  MimeBodyPart();  
  74.         byte  bbb[] =  new   byte [ 1024  *  10 ];  
  75.         this .getClass().getClassLoader().getResourceAsStream( "notice.jpg" ).read(bbb);  
  76.         DataHandler dh = new  DataHandler( new  ByteArrayDataSource( this .getImageBytes( "notice.jpg" ),  "application/octet-stream" ));  
  77.         mdp.setDataHandler(dh);  
  78.         // 加上这句将作为附件发送,否则将作为信件的文本内容   
  79.         mdp.setFileName("1.jpg" );  
  80.         mdp.setHeader("content-id" "<IMG1>" );  
  81.         // 将含有附件的BodyPart加入到MimeMultipart对象中   
  82.         mm.addBodyPart(mdp);  
  83.         // ---------图片处理结束!!!!!!!!!!!!!!!!   
  84.   
  85.         // 把mm作为消息对象的内容   
  86.         msg.setContent(mm);  
  87.         msg.saveChanges();  
  88.         javax.mail.Transport transport = mailSession.getTransport("smtp" );  
  89.         transport.connect();  
  90.         transport.sendMessage(msg, msg.getAllRecipients());  
  91.         transport.close();  
  92.     }  
  93.   
  94.     public  String getCcAddress() {  
  95.         return  ccAddress;  
  96.     }  
  97.   
  98.     public  String getContent() {  
  99.         if  (content ==  null ) {  
  100.             return   "" ;  
  101.         } else  {  
  102.             return  content;  
  103.         }  
  104.     }  
  105.   
  106.     public  String getMailServerAddress() {  
  107.         return   "10.5.1.1" ;  
  108.     }  
  109.   
  110.     public  String getUser() {  
  111.         if  (user ==  null  || user.equals( "" )) {  
  112.             user = "" ;  
  113.         }  
  114.         return  user;  
  115.     }  
  116.   
  117.     public  String getPassword() {  
  118.         if  (password ==  null  || password.equals( "" )) {  
  119.             password = "" ;  
  120.         }  
  121.         return  password;  
  122.     }  
  123.   
  124.     public  String getTitle() {  
  125.         if  (title ==  null ) {  
  126.             return   "" ;  
  127.         } else  {  
  128.             return  title;  
  129.         }  
  130.     }  
  131.   
  132.     public  String getToAddress() {  
  133.         return  toAddress;  
  134.     }  
  135.   
  136.     public   boolean  isHtml() {  
  137.         return  isHtml;  
  138.     }  
  139.   
  140.     public   void  setCcAddress(String ccAddress) {  
  141.         this .ccAddress = ccAddress;  
  142.     }  
  143.   
  144.     public   void  setContent(String content) {  
  145.         this .content = content;  
  146.     }  
  147.   
  148.     public   void  setMailServerAddress(String mailServerAddress) {  
  149.         this .mailServerAddress = mailServerAddress;  
  150.     }  
  151.   
  152.     public   void  setUser(String user) {  
  153.         this .user = user;  
  154.     }  
  155.   
  156.     public   void  setPassword(String password) {  
  157.         this .password = password;  
  158.     }  
  159.   
  160.     public   void  setTitle(String title) {  
  161.         this .title = title;  
  162.     }  
  163.   
  164.     public   void  setToAddress(String toAddress) {  
  165.         this .toAddress = toAddress;  
  166.     }  
  167.   
  168.     public   void  setIsHtml( boolean  isHtml) {  
  169.         this .isHtml = isHtml;  
  170.     }  
  171.   
  172.     public   void  setAttachmentFiles(Map attachmentFiles) {  
  173.         this .attachmentFiles = attachmentFiles;  
  174.     }  
  175.   
  176.     public  Map getAttachmentFiles() {  
  177.         return  attachmentFiles;  
  178.     }  
  179.   
  180.     public   void  setHtml( boolean  isHtml) {  
  181.         this .isHtml = isHtml;  
  182.     }  
  183.   
  184.     public  String getSenderAddress() {  
  185.         return  senderAddress;  
  186.     }  
  187.   
  188.     public   void  setSenderAddress(String senderAddress) {  
  189.         this .senderAddress = senderAddress;  
  190.     }  
  191.   
  192.     public  String readMailTemplate(String year, String season) throws  IOException {  
  193.         ClassLoader loder = this .getClass().getClassLoader();  
  194.         InputStream is = loder.getResourceAsStream("t.html" );  
  195.         byte [] buf =  new   byte [ 1024  *  5 ];  
  196.         is.read(buf);  
  197.         String t = new  String(buf,  "utf-8" );  
  198.         t = t.replaceFirst("#year" , year);  
  199.         t = t.replaceFirst("#season" , season);  
  200.         // System.out.println(t);   
  201.         return  t;  
  202.     }  
  203.   
  204.     public   static   void  sendNoticeMail(String title, String year, String season,String sender, File f) {  
  205.         SendMailUtil logic = new  SendMailUtil();  
  206.         try  {  
  207.             logic.setTitle(title);  
  208.             // logic.setMailServerAddress("10.5.1.1");   
  209.             String temp = logic.readMailTemplate(year, season);  
  210.             logic.setSenderAddress(sender);  
  211.             FileReader fr = new  FileReader(f);  
  212.   
  213.             char [] ch =  new   char [ new  Long(f.length()).intValue()];  
  214.             fr.read(ch);  
  215.             StringBuffer sb = new  StringBuffer( new  Long(f.length()).intValue());  
  216.             for  ( int  i =  0 ; i < ch.length; i++) {  
  217.                 sb.append(ch[i]);  
  218.             }  
  219.             String[] all = sb.toString().split("\n" );  
  220.   
  221.             // System.out.println(sb.toString());   
  222.             for  ( int  i =  0 ; i < all.length; i++) {  
  223.                 if  (all[i].equals( "" )) {  
  224.                     continue ;  
  225.                 }  
  226.                 String t = temp;  
  227.                 String[] item = all[i].split("," );  
  228.                 logic.setToAddress(item[2 ]);  
  229.                 // 处理内容   
  230.                 t = t.replaceFirst("#name" , item[ 1 ] +  "("  + item[ 0 ] +  ")" );  
  231.                 t = t.replaceAll("#total" , item[ 3 ]);  
  232.                 t = t.replaceFirst("#tax" , item[ 4 ]);  
  233.                 t = t.replaceFirst("#actualTotal" , item[ 5 ]);  
  234.                 logic.setContent(t);  
  235.                 logic.sendMail();  
  236.             }  
  237.         } catch  (Exception e) {  
  238.             e.printStackTrace();  
  239.         }  
  240.     }  
  241. }  


4,小技巧
我第一次发送后,发现读取图片的程序不对,在Outlook 2003中打开邮件,发现没有出现图片,搞半天也不知道是什么原因,后来我用FoxMail打开邮件,发现图片附件上打了个叉叉,才知道是附件中的图片读 取不对,如果你有这样的问题,不妨换个Mail客户端试试。

分享到:
评论

相关推荐

    java 发送附件mail

    总结一下,Java发送带有附件的邮件涉及到JavaMail API的使用,包括配置SMTP服务器、创建邮件对象、添加内容和附件,以及发送邮件等步骤。理解这些步骤和相关类的作用是实现此功能的关键。在处理不同类型的邮件时,...

    JAVA MAIL发送邮件带附件和图片

    在Java编程中,发送带有附件和图片的电子邮件是一项常见的任务,尤其在自动化通知、报告分发等场景下。本文将详细讲解如何使用Java Mail API来实现这一功能,同时参考提供的`TemplateMailMessage.java`和`...

    用Java Mail发送带有图片的html格式的邮件.txt

    在IT领域,特别是Java开发中,使用Java Mail API发送带有图片的HTML格式邮件是一项常见且实用的功能。本文将深入解析如何利用Java Mail实现这一需求,包括必要的知识点、代码示例及其实现细节。 ### 一、Java Mail ...

    java Mail 发送邮件及邮件附件

    在使用 Java Mail 发送邮件时,需要设置邮件的附件。Java Mail 支持多种邮件附件类型,包括文本、图像和二进制文件。下面是一个简单的示例代码: ```java public class Mail { public static void main(String[] ...

    java 发邮件带excel附件,以流的形式发送附件,不生成excel文件

    在Java编程中,发送带有Excel附件的电子邮件是一项常见的任务,特别是在数据报告或自动化流程中。在某些场景下,我们可能希望直接以流的形式处理Excel数据,而不是先将其保存为一个实际的文件,然后再作为附件发送。...

    用java mail发送包含图片的html

    标题中的“用Java Mail发送包含图片的HTML”指的是使用JavaMail API来发送带有嵌入式图像的HTML格式电子邮件。在电子邮件中,除了纯文本内容,我们有时需要包含图像以提高信息的可读性和视觉吸引力。JavaMail API是...

    javaemail发送邮件(带附件)

    javaemail发送邮件(带附件)是使用Java技术实现的邮件发送功能,支持带附件的发送。下面是该功能的知识点总结: 1. 使用JavaMailSenderImpl类来发送邮件,需要设置SMTP服务器、用户名、密码等参数。 2. 使用...

    java 邮件发送 可带附件

    5. 添加附件:如果需要发送附件,可以使用MimeBodyPart和Multipart类来创建包含附件的邮件。 6. 发送邮件:使用Transport类的send方法发送邮件。 四、添加附件的实现 1. 创建MimeBodyPart对象:为每个附件创建一个...

    java实现发送带有附件的邮件

    在Java编程语言中,发送带有附件的邮件是一个常见的任务,特别是在企业级应用或者自动化脚本中。这个场景通常涉及到SMTP(Simple Mail Transfer Protocol)服务,JavaMail API以及MIME(Multipurpose Internet Mail ...

    JAVA 发送HTML格式并带图片的邮件实例

    在Java编程中,发送带有HTML格式和图片的邮件是一项常见的任务,这通常涉及到电子邮件API的使用,例如JavaMail API。以下是对这个主题的详细讲解: 首先,JavaMail API是Java平台上的一个开源库,用于处理电子邮件...

    使用springMail发送带附件的email

    在本项目中,我们将深入探讨如何使用SpringMail发送带有附件的电子邮件。首先,我们需要了解几个核心概念: 1. **JavaMail API**: 这是Java平台上的一个标准API,用于处理邮件相关任务,如创建、发送和接收邮件。它...

    java邮件发送(含附件发送)源码

    如果要发送附件,可以使用`Multipart`和`BodyPart`来构建复杂的邮件结构。 ```java Multipart multipart = new MimeMultipart(); // 添加文本正文 BodyPart messageBodyPart = new MimeBodyPart(); ...

    java发邮件 带附件 多媒体邮件

    对于需要发送附件或图片的情况,可以通过构建`Multipart`对象来实现。`Multipart`允许我们将多个`BodyPart`(包括文本、图片等)组合在一起,形成一封完整的邮件。 ```java Multipart multipart = new ...

    SpringBoot中整合Mail实现发送带附件的邮件示例代码

    本文将详细介绍如何在Spring Boot项目中配置和使用JavaMailSender来发送带有附件的邮件。 首先,我们需要在项目的`pom.xml`或`build.gradle`文件中添加对`spring-boot-starter-mail`的依赖。对于Maven用户,可以在`...

    java mail 发送邮件

    4. **添加附件**:如果需要发送附件,可以使用MimeBodyPart和MimeMultipart类。 ```java MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile("path/to/your/file"); MimeMultipart ...

    使用 java mail 发送邮件

    要使用Java Mail发送邮件,首先需要添加相应的依赖库到项目中。对于Android项目,通常会通过Gradle来引入。 1. 添加依赖: 在项目的build.gradle文件中,添加以下依赖: ```groovy dependencies { ...

    javamailtest带附件

    这个“javamailtest带附件”可能是某个示例项目或教程,展示了如何使用JavaMail API来发送带有附件的电子邮件。下面将详细讨论JavaMail API以及如何在其中添加附件。 1. **JavaMail API基础**: JavaMail API 是...

    JAVA_Mail_邮件_发送_接收_抄送_密送_附件

    JAVA_Mail_邮件_发送_接收_抄送_密送_附件 该资源是一个Java项目,可用Eclipse导入即可运行。 共4个类: 1:ReceiveMail.java -接收普通邮件 2:ReciveMailWithAttachMent.java --接收含有附件的邮件 3:SendMail....

    java 邮件发送,支持附件发送

    本教程将深入讲解如何使用Java实现邮件发送功能,包括添加附件和向多个收件人发送邮件。 首先,我们来看`Mailer.java`,这个类通常会封装邮件发送的核心逻辑。在Java中,我们主要依赖JavaMail API来实现邮件的发送...

    利用Java并配置Foxmail发送邮箱(携带附件)

    发送附件是通过`Multipart`对象实现的,它允许我们组合多个部分,包括文本和二进制文件。首先,创建一个`MimeBodyPart`对象来表示附件,然后将其添加到`Multipart`: ```java MimeBodyPart attachmentPart = new ...

Global site tag (gtag.js) - Google Analytics