Java带图片的邮件发送方法实现

jopen 10年前

    package sendEmail;                import java.util.Properties;                import javax.activation.DataHandler;        import javax.activation.FileDataSource;        import javax.mail.Authenticator;        import javax.mail.Message;        import javax.mail.PasswordAuthentication;        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;                public class AttchImgMail {            // JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机.            public static void main(String[] args) throws Exception {                Properties properties = new Properties();                // properties.put("mail.smtp.host", "mailcas.chinapnr.com");// 设置smtp主机                properties.put("mail.smtp.host", "smtp.163.com");// 设置smtp主机                properties.put("mail.smtp.auth", "true");// 使用smtp身份验证                /*                * 在 JavaMail 中,可以通过 extends Authenticator 抽象类,在子类中覆盖父类中的                * getPasswordAuthentication() 方法,就可以实现以不同的方式来进行登录邮箱时的用户身份认证。JavaMail                * 中的这种设计是使用了策略模式(Strategy                */                MimeMessage message = new MimeMessage(Session.getInstance(properties,                        new Authenticator() {                            public PasswordAuthentication getPasswordAuthentication() {                                return new PasswordAuthentication(//设置发送帐号密码                                        "帐号", "密码");                            }                        }));                // 设置邮件的属性                // 设置邮件的发件人                message.setFrom(new InternetAddress("发件人"));                // 设置邮件的收件人 cc表示抄送 bcc 表示暗送                message.setRecipient(Message.RecipientType.TO, new InternetAddress(                        "收件人"));                // 设置邮件的主题                message.setSubject("系统自动发送邮件");                // 创建邮件的正文                MimeBodyPart text = new MimeBodyPart();                // setContent(“邮件的正文内容”,”设置邮件内容的编码方式”)                text.setContent("此邮件为系统自动发送<img src='cid:a'><img src='cid:b'>",                        "text/html;charset=gb2312");                        // 点到点的发送                // 一对多发送只要改一个地方如下:                                // // 构建一个群发地址数组                // InternetAddress[] adr=new InternetAddress[toMore.length];                // for(int i=0;i<toMore.length;i++){ adr[i]=new                // InternetAddress(toMore[i]); }                // // Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点 到点不一样                // message.setRecipients(Message.RecipientType.TO,adr);                                         // 创建图片                MimeBodyPart img = new MimeBodyPart();                /*                * JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分.                * 除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的. JavaMail                * API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法.                */                DataHandler dh = new DataHandler(new FileDataSource("src//a.jpg"));//图片路径                img.setDataHandler(dh);                // 创建图片的一个表示用于显示在邮件中显示                img.setContentID("a");                        MimeBodyPart img2 = new MimeBodyPart();                DataHandler dh2 = new DataHandler(new FileDataSource("src//b.jpg"));//第二张图片路径                img2.setDataHandler(dh2);                img2.setContentID("b");                // 创建附件                // MimeBodyPart attch = new MimeBodyPart();                // DataHandler dh1 = new DataHandler(new FileDataSource("src//b.jpg"));                // attch.setDataHandler(dh1);                // String filename1 = dh1.getName();                // MimeUtility 是一个工具类,encodeText()用于处理附件字,防止中文乱码问题                // attch.setFileName(MimeUtility.encodeText(filename1));                // 关系 正文和图片的                MimeMultipart mm = new MimeMultipart();                mm.addBodyPart(text);                mm.addBodyPart(img);                mm.setSubType("related");// 设置正文与图片之间的关系                // 图班与正文的 body                MimeBodyPart all = new MimeBodyPart();                all.setContent(mm);                // 附件与正文(text 和 img)的关系                MimeMultipart mm2 = new MimeMultipart();                mm2.addBodyPart(all);                mm2.addBodyPart(img2);                mm2.setSubType("mixed");// 设置正文与附件之间的关系                        message.setContent(mm2);                message.saveChanges(); // 保存修改                        Transport.send(message);// 发送邮件                System.out.println("邮件发送成功");                    }        }  
Java发送带图片的邮件,代码为发生2张图片的邮件关联方式,注释中有发送带附件、带多人发生解析的代码,可以自行调整。

来自:http://blog.csdn.net/chickencin/article/details/28232693