`

用Java Mail发送带图片附件

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

java 代码

private   byte [] getImageBytes(String file) {  
    byte [] myData =  null ;  
    InputStream input = getClass().getClassLoader().getResourceAsStream(file);  
    try  {  
        ByteArrayOutputStream byteArray = new  ByteArrayOutputStream();  
        int  ch =  0 ;  
        while  ((ch = input.read()) != - 1 ) {  
        byteArray.write(ch);  
    }  
    // System.out.println(byteArray.size());   
    myData = byteArray.toByteArray();  
    // System.out.println(myData.length);   
    }  
    catch  (Exception e) {  
        e.printStackTrace();}  
        return  myData;  
    }  


2,发送邮件的“机关”

java 代码

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



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

java 代码

import  java.io.ByteArrayOutputStream;  
import  java.io.File;  
import  java.io.FileReader;  
import  java.io.IOException;  
import  java.io.InputStream;  
import  java.util.Date;  
import  java.util.HashMap;  
import  java.util.Map;  
import  java.util.Properties;  
import  javax.activation.DataHandler;  
import  javax.mail.Address;  
import  javax.mail.BodyPart;  
import  javax.mail.internet.InternetAddress;  
import  javax.mail.internet.MimeBodyPart;  
import  javax.mail.internet.MimeMessage;  
import  javax.mail.internet.MimeMultipart;  
import  javax.mail.util.ByteArrayDataSource;  
/** */ /**  
*  
* @author robin  
* @version $Revision: 1.4 $  
*/   
public   class  SendMailUtil {  
    private  String mailServerAddress;  
    private  String user;  
    private  String password;  
    private  String toAddress;  
    private  String ccAddress;  
    private  String title;  
    private  String content;  
    private   boolean  isHtml =  true ;  
    private  Map attachmentFiles =  null ;  
    private  String senderAddress;  
  
    private   byte [] getImageBytes(String file) {  
        byte [] myData =  null ;  
        InputStream input = getClass().getClassLoader().getResourceAsStream(file);  
        try  {  
            ByteArrayOutputStream byteArray = new  ByteArrayOutputStream();  
            int  ch =  0 ;  
            while  ((ch = input.read()) != - 1 ) {  
                byteArray.write(ch);  
            }  
            // System.out.println(byteArray.size());   
            myData = byteArray.toByteArray();  
            // System.out.println(myData.length);   
        } catch  (Exception e) {  
            e.printStackTrace();  
        }  
        return  myData;  
    }  
  
    public   void  sendMail()  throws  Exception {  
        Properties pos = new  Properties();  
        pos.put("mail.smtp.host" ,  "10.5.1.1" );  
        javax.mail.Session mailSession = javax.mail.Session.getInstance(pos,null );  
        MimeMessage msg = new  MimeMessage(mailSession);  
        msg.setFrom(new  InternetAddress( this .getSenderAddress()));  
        msg.setSubject(this .getTitle());  
        msg.setSentDate(new  Date());  
        Address[] adds = InternetAddress.parse(getToAddress());  
        msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);  
        // 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)   
        MimeMultipart mm = new  MimeMultipart( "related" );  
        // 新建一个存放信件内容的BodyPart对象   
        BodyPart mdp = new  MimeBodyPart();  
        // 给BodyPart对象设置内容和格式/编码方式   
        mdp.setContent(this .getContent(),  "text/html;charset=utf-8" );  
        // 这句很重要,千万不要忘了   
        mm.addBodyPart(mdp);  
  
        // ---------图片处理开始!!!!!!!!!!!!!!!!   
        mdp = new  MimeBodyPart();  
        byte  bbb[] =  new   byte [ 1024  *  10 ];  
        this .getClass().getClassLoader().getResourceAsStream( "notice.jpg" ).read(bbb);  
        DataHandler dh = new  DataHandler( new  ByteArrayDataSource( this .getImageBytes( "notice.jpg" ),  "application/octet-stream" ));  
        mdp.setDataHandler(dh);  
        // 加上这句将作为附件发送,否则将作为信件的文本内容   
        mdp.setFileName("1.jpg" );  
        mdp.setHeader("content-id" ,  "<IMG1>" );  
        // 将含有附件的BodyPart加入到MimeMultipart对象中   
        mm.addBodyPart(mdp);  
        // ---------图片处理结束!!!!!!!!!!!!!!!!   
  
        // 把mm作为消息对象的内容   
        msg.setContent(mm);  
        msg.saveChanges();  
        javax.mail.Transport transport = mailSession.getTransport("smtp" );  
        transport.connect();  
        transport.sendMessage(msg, msg.getAllRecipients());  
        transport.close();  
    }  
  
    public  String getCcAddress() {  
        return  ccAddress;  
    }  
  
    public  String getContent() {  
        if  (content ==  null ) {  
            return   "" ;  
        } else  {  
            return  content;  
        }  
    }  
  
    public  String getMailServerAddress() {  
        return   "10.5.1.1" ;  
    }  
  
    public  String getUser() {  
        if  (user ==  null  || user.equals( "" )) {  
            user = "" ;  
        }  
        return  user;  
    }  
  
    public  String getPassword() {  
        if  (password ==  null  || password.equals( "" )) {  
            password = "" ;  
        }  
        return  password;  
    }  
  
    public  String getTitle() {  
        if  (title ==  null ) {  
            return   "" ;  
        } else  {  
            return  title;  
        }  
    }  
  
    public  String getToAddress() {  
        return  toAddress;  
    }  
  
    public   boolean  isHtml() {  
        return  isHtml;  
    }  
  
    public   void  setCcAddress(String ccAddress) {  
        this .ccAddress = ccAddress;  
    }  
  
    public   void  setContent(String content) {  
        this .content = content;  
    }  
  
    public   void  setMailServerAddress(String mailServerAddress) {  
        this .mailServerAddress = mailServerAddress;  
    }  
  
    public   void  setUser(String user) {  
        this .user = user;  
    }  
  
    public   void  setPassword(String password) {  
        this .password = password;  
    }  
  
    public   void  setTitle(String title) {  
        this .title = title;  
    }  
  
    public   void  setToAddress(String toAddress) {  
        this .toAddress = toAddress;  
    }  
  
    public   void  setIsHtml( boolean  isHtml) {  
        this .isHtml = isHtml;  
    }  
  
    public   void  setAttachmentFiles(Map attachmentFiles) {  
        this .attachmentFiles = attachmentFiles;  
    }  
  
    public  Map getAttachmentFiles() {  
        return  attachmentFiles;  
    }  
  
    public   void  setHtml( boolean  isHtml) {  
        this .isHtml = isHtml;  
    }  
  
    public  String getSenderAddress() {  
        return  senderAddress;  
    }  
  
    public   void  setSenderAddress(String senderAddress) {  
        this .senderAddress = senderAddress;  
    }  
  
    public  String readMailTemplate(String year, String season) throws  IOException {  
        ClassLoader loder = this .getClass().getClassLoader();  
        InputStream is = loder.getResourceAsStream("t.html" );  
        byte [] buf =  new   byte [ 1024  *  5 ];  
        is.read(buf);  
        String t = new  String(buf,  "utf-8" );  
        t = t.replaceFirst("#year" , year);  
        t = t.replaceFirst("#season" , season);  
        // System.out.println(t);   
        return  t;  
    }  
  
    public   static   void  sendNoticeMail(String title, String year, String season,String sender, File f) {  
        SendMailUtil logic = new  SendMailUtil();  
        try  {  
            logic.setTitle(title);  
            // logic.setMailServerAddress("10.5.1.1");   
            String temp = logic.readMailTemplate(year, season);  
            logic.setSenderAddress(sender);  
            FileReader fr = new  FileReader(f);  
  
            char [] ch =  new   char [ new  Long(f.length()).intValue()];  
            fr.read(ch);  
            StringBuffer sb = new  StringBuffer( new  Long(f.length()).intValue());  
            for  ( int  i =  0 ; i < ch.length; i++) {  
                sb.append(ch[i]);  
            }  
            String[] all = sb.toString().split("\n" );  
  
            // System.out.println(sb.toString());   
            for  ( int  i =  0 ; i < all.length; i++) {  
                if  (all[i].equals( "" )) {  
                    continue ;  
                }  
                String t = temp;  
                String[] item = all[i].split("," );  
                logic.setToAddress(item[2 ]);  
                // 处理内容   
                t = t.replaceFirst("#name" , item[ 1 ] +  "("  + item[ 0 ] +  ")" );  
                t = t.replaceAll("#total" , item[ 3 ]);  
                t = t.replaceFirst("#tax" , item[ 4 ]);  
                t = t.replaceFirst("#actualTotal" , item[ 5 ]);  
                logic.setContent(t);  
                logic.sendMail();  
            }  
        } catch  (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  



分享到:
评论

相关推荐

    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是...

    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