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

转自:http://www.blogjava.net/fastzch/archive/2007/12/03/164912.html
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格式来发送邮件。不多说了,看代码吧!

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->  1import java.io.ByteArrayOutputStream;
  2import java.io.File;
  3import java.io.FileReader;
  4import java.io.IOException;
  5import java.io.InputStream;
  6import java.util.Date;
  7import java.util.HashMap;
  8import java.util.Map;
  9import java.util.Properties;
 10
 11import javax.activation.DataHandler;
 12import javax.mail.Address;
 13import javax.mail.BodyPart;
 14import javax.mail.internet.InternetAddress;
 15import javax.mail.internet.MimeBodyPart;
 16import javax.mail.internet.MimeMessage;
 17import javax.mail.internet.MimeMultipart;
 18import javax.mail.util.ByteArrayDataSource;
 19
 20/** *//**
 21 * 
 22 * @author robin
 23 * @version $Revision: 1.4 $
 24 */

 25public class SendMailUtil {
 26
 27    /** *//**
 28     * Field mailServerAddress.
 29     */

 30    private String mailServerAddress;
 31
 32    /** *//**
 33     * Field user.
 34     */

 35    private String user;
 36
 37    /** *//**
 38     * Field password.
 39     */

 40    private String password;
 41
 42    /** *//**
 43     * Field toAddress.
 44     */

 45    private String toAddress;
 46
 47    /** *//**
 48     * Field ccAddress.
 49     */

 50    private String ccAddress;
 51
 52    /** *//**
 53     * Field title.
 54     */

 55    private String title;
 56
 57    /** *//**
 58     * Field content.
 59     */

 60    private String content;
 61
 62    /** *//**
 63     * Field isHtml.
 64     */

 65    private boolean isHtml = true;
 66
 67    /** *//**
 68     * Field attachmentFiles.
 69     */

 70    private Map attachmentFiles = null;
 71
 72    /** *//**
 73     * Field senereAddress.
 74     */

 75    private String senderAddress;
 76
 77    private byte[] getImageBytes(String file) {
 78        byte[] myData = null;
 79        InputStream input = getClass().getClassLoader().getResourceAsStream(
 80                file);
 81        try {
 82            ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
 83            int ch = 0;
 84            while ((ch = input.read()) != -1{
 85                byteArray.write(ch);
 86            }

 87            // System.out.println(byteArray.size());
 88            myData = byteArray.toByteArray();
 89            // System.out.println(myData.length);
 90        }
 catch (Exception e) {
 91            e.printStackTrace();
 92        }

 93        return myData;
 94    }

 95
 96    public void sendMail() throws Exception {
 97        Properties pos = new Properties();
 98        pos.put("mail.smtp.host""10.5.1.1");
 99        javax.mail.Session mailSession = javax.mail.Session.getInstance(pos,
100                null);
101        MimeMessage msg = new MimeMessage(mailSession);
102        msg.setFrom(new InternetAddress(this.getSenderAddress()));
103        msg.setSubject(this.getTitle());
104        msg.setSentDate(new Date());
105        Address[] adds = InternetAddress.parse(getToAddress());
106        msg.addRecipients(javax.mail.Message.RecipientType.TO, adds);
107        // 新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
108        MimeMultipart mm = new MimeMultipart("related");
109        // 新建一个存放信件内容的BodyPart对象
110        BodyPart mdp = new MimeBodyPart();
111        // 给BodyPart对象设置内容和格式/编码方式
112        mdp.setContent(this.getContent(), "text/html;charset=utf-8");
113        // 这句很重要,千万不要忘了
114        mm.addBodyPart(mdp);
115
116        // ---------图片处理开始!!!!!!!!!!!!!!!!
117        mdp = new MimeBodyPart();
118        byte bbb[] = new byte[1024 * 10];
119        this.getClass().getClassLoader().getResourceAsStream("notice.jpg")
120                .read(bbb);
121        DataHandler dh = new DataHandler(new ByteArrayDataSource(this
122                .getImageBytes("notice.jpg"), "application/octet-stream"));
123        mdp.setDataHandler(dh);
124        // 加上这句将作为附件发送,否则将作为信件的文本内容
125        mdp.setFileName("1.jpg");
126        mdp.setHeader("content-id""<IMG1>");
127        // 将含有附件的BodyPart加入到MimeMultipart对象中
128        mm.addBodyPart(mdp);
129        // ---------图片处理结束!!!!!!!!!!!!!!!!
130
131        // 把mm作为消息对象的内容
132        msg.setContent(mm);
133        msg.saveChanges();
134        javax.mail.Transport transport = mailSession.getTransport("smtp");
135        transport.connect();
136        transport.sendMessage(msg, msg.getAllRecipients());
137        transport.close();
138
<
分享到:
评论

你可能感兴趣的:(java,html,.net)