java mail发送图片、附件全攻略(无需插件)

自己实际项目中的一个方法,直接看代码就能看懂

public static boolean sendMail(String smtpFromMail, String pwd, int port, String host,
                                   String subject, String toMail, String content,
                                   List<String> files)
    {
        try
        {
            // 使用Properties来创建邮件的相关信息
            Properties props = new Properties();
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.auth", "true");
            // 创建邮件的session
            Session session = Session.getDefaultInstance(props);
            session.setDebug(false);
            // 遍历收件人,分别发送
            String[] emailTo = toMail.split(",");
            for (String string : emailTo)
            {
                // ##########通过session创建MimeMessage对象,用来发送数据##########
                MimeMessage mm = new MimeMessage(session);

                // ##########设置相关信息##########
                mm.setFrom(new InternetAddress(smtpFromMail, subject));
                // 设置邮件的收件人
                mm.addRecipient(Message.RecipientType.TO, new InternetAddress(string));
                // 设置邮件主题
                mm.setSubject(subject);
                mm.addHeader("charset", "UTF-8");

                // ##########MimeBodyPart类用来写邮件的正文##########
                MimeBodyPart mp = new MimeBodyPart();
                String contentStr = "<h4>" + content + "</h4>";
                for (String file : files)
                {
                    if (!file.endsWith("pdf"))
                    {
                        int start = file.lastIndexOf("/");
                        int end = file.lastIndexOf(".");
                        String fileName = file.substring(start + 1, end);
                        // 这里了就是设置了你要使用的图片的cid是哪个,具体cid代表哪张图片,会在下面的逻辑中设置
                        contentStr += "<h4>" + fileName + "使用情况如下:</h4><img src='cid:" + fileName
                                      + ".jpg'><br>";

                    }
                }
                mp.setContent(contentStr, "text/html;charset=gb2312");

                // ##########4、创建关系,把图片的文字联系起来,用到的类是MimeMultiPart##########
                MimeMultipart mmp = new MimeMultipart();
                mmp.addBodyPart(mp);
                // ##########开始写图片##########
                for (String file : files)
                {
                    if (!file.endsWith("pdf"))
                    {
                        int start = file.lastIndexOf("/");
                        int end = file.lastIndexOf(".");
                        String fileName = file.substring(start + 1, end);
                        MimeBodyPart mp2 = new MimeBodyPart();
                        mp2.setDataHandler(new DataHandler(new FileDataSource(file)));
                        // 设置文件的id值,和上面的相对应
                        mp2.setContentID(fileName + ".jpg");
                        // 添加正文和图片的关联
                        mmp.addBodyPart(mp2);
                    }
                }
                mmp.setSubType("related");// related是表示关联关系

                 5、再把上面的关系放到MimeBodyPart中
                MimeBodyPart mp4 = new MimeBodyPart();
                mp4.setContent(mmp);

                // 添加附件信息
                MimeBodyPart mp5 = null;
                for (String file : files)
                {
                    if (file.endsWith(".pdf"))
                    {
                        /* 添加附件 */
                        File usFile = new File(file);
                        mp5 = new MimeBodyPart();
                        DataSource source = new FileDataSource(file);
                        // 设置附件
                        mp5.setDataHandler(new DataHandler(source));
                        sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
                        // 设置附件名
                        mp5.setFileName(
                            "=?GBK?B?" + enc.encode(usFile.getName().getBytes()) + "?=");
                    }
                }
                // 7、再创建关系
                MimeMultipart mmp2 = new MimeMultipart();
                mmp2.addBodyPart(mp4);
                mmp2.addBodyPart(mp5);
                mmp2.setSubType("mixed");
                mm.setContent(mmp2);
                mm.saveChanges();
                Transport transport = session.getTransport("smtp");
                transport.connect(host, port, smtpFromMail, pwd);
                transport.sendMessage(mm, mm.getAllRecipients());
                transport.close();
            }
        }
        catch (

        Exception e)
        {
            logger.error("邮件发送异常,请检查配置是否正确。");
            e.printStackTrace();
            return false;
        }
        return true;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值