我的知识库

知识等于力量

« Ubuntu 7.10+ruby+rails+mongrel+nginx 架设简易说明,有别于7.04巴西国家医疗保健系统 »

用Java Mail发送带图片附件的要点

1,读入图片的方式:
发现网上讲的很多读取图片的方式都不对,按下面提供的这个方法来读取,保证成功。
 1    private byte[] getImageBytes(String file) {
 2        byte[] myData = null;
 3        InputStream input = getClass().getClassLoader().getResourceAsStream(
 4                file);
 5        try {
 6            ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
 7            int ch = 0;
 8            while ((ch = input.read()) != -1{
 9                byteArray.write(ch);
10            }

11            // System.out.println(byteArray.size());
12            myData = byteArray.toByteArray();
13            // System.out.println(myData.length);
14        }
 catch (Exception e) {
15            e.printStackTrace();
16        }

17        return myData;
18    }

2,发送邮件的“机关”
 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")
20                .read(bbb);
21        DataHandler dh = new DataHandler(new ByteArrayDataSource(this
22                .getImageBytes("notice.jpg"), "application/octet-stream"));
23        mdp.setDataHandler(dh);
24        // 加上这句将作为附件发送,否则将作为信件的文本内容
25        mdp.setFileName("1.jpg");
26        mdp.setHeader("content-id""<IMG1>");
27        // 将含有附件的BodyPart加入到MimeMultipart对象中
28        mm.addBodyPart(mdp);
29        // ---------图片处理结束!!!!!!!!!!!!!!!!
30
31        // 把mm作为消息对象的内容
32        msg.setContent(mm);
仔细看代码中的注释吧,相信大有帮助。

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