Java发送内嵌图片的邮件

使用Java发送邮件时,既需要发送html文档又需要在邮件中内嵌图片(非附件形式),这里封装了一个类使用JavaMail组织的邮件发送,支持多张图片发送,并指定图片位置。注意img标签src要如下写<img src=\"cid:abcd\">"其中abcd对应mageMailDto#imageCid,可以自行定义,不要出现重复。

发送方法,注意替换几个邮件参数,如host、user、password

 /**
     * 发送内嵌图片的邮件
     *
     * @param fromEmailAddress   发件人邮箱地址
     * @param fromEmailName      发件人邮箱显示名称
     * @param subject            主题
     * @param content            邮件正文
     * @param toEmailAddressList 收件人邮箱集合(支持群发)
     * @return true:成功;false:失败
     */
    @Override
    public boolean sendImageHtmlEmail(String fromEmailAddress, String fromEmailName, String subject, String content, List<String> toEmailAddressList, ImageMailDto[] imageData) throws RuntimeException {
        if (CollectionUtils.isEmpty(toEmailAddressList)) {
            throw new RuntimeException("toEmailAddressList is empty!");
        }
        if (toEmailAddressList.size() > MAX_SEND_SIZE) {
            throw new RuntimeException("toEmailAddressList is more than [" + MAX_SEND_SIZE + "]!");
        }

        try {
            Properties props = new Properties();
            props.put("mail.smtp.host", hostName);
            props.put("mail.smtp.auth", "true");

            Session sendMailSession = Session.getDefaultInstance(props, authenticator);
            MimeMessage mimeMessage = new MimeMessage(sendMailSession);
            mimeMessage.setFrom(new InternetAddress(fromEmailAddress));
            InternetAddress[] address = new InternetAddress().parse(toEmailAddressList.toString());
            mimeMessage.setRecipients(Message.RecipientType.TO, address);
            mimeMessage.setSubject(subject);
            mimeMessage.setSentDate(new Date());
            BodyPart mdp = new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
            mdp.setContent(content, "text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式


            Multipart mm = new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对
            mm.addBodyPart(mdp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)

            if (imageData != null) {
                for (ImageMailDto dto : imageData) {
                    MimeBodyPart image = new MimeBodyPart();
                    image.setDataHandler(new DataHandler(new ByteArrayDataSource(dto.getImageData(), dto.getMimeType())));  //javamail jaf
                    image.setContentID(dto.getImageCid());
                    mm.addBodyPart(image);
                }
            }

            mimeMessage.setContent(mm);//把mm作为消息对象的内容
            mimeMessage.saveChanges();

            Transport.send(mimeMessage);
            return true;
        } catch (Exception e) {
            log.error("邮件发送异常邮件地址" + toEmailAddressList, e);
            throw new RuntimeException(e);
        }

    }


鉴权类写法:

  Authenticator authenticator = new DefaultAuthenticator(props.getProperty("mail.smtp.user"),props.getProperty("mail.smtp.password"));


图片存储类(自定义,可以修改替换):

import java.io.Serializable;

/**
 * 邮件发送图片
 *
 * @author wangqing
 * @since 16-3-2 下午4:39
 */
public class ImageMailDto implements Serializable {

    private static final long serialVersionUID = 1L;

    private byte[] imageData;
    private String imageCid;//"好好工作<img src=\"cid:abcd\">"
    private String mimeType;//like image/jpeg、image/bmp、image/gif


    public byte[] getImageData() {
        return imageData;
    }

    public void setImageData(byte[] imageData) {
        this.imageData = imageData;
    }

    public String getImageCid() {
        return imageCid;
    }

    public void setImageCid(String imageCid) {
        this.imageCid = imageCid;
    }

    public String getMimeType() {
        return mimeType;
    }

    public void setMimeType(String mimeType) {
        this.mimeType = mimeType;
    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值