2 qq 40091932 qq_40091932 于 2017.09.14 10:23 提问

Java实现含图片的复杂邮件

刚上班让做这个,有点蒙,求大神帮助。前端和后台代码。谢谢!
(邮箱编辑页面实现:可发送多人,正文可以嵌入图片,可以上传附件)
功能要求

3个回答

syt_Jimmy
syt_Jimmy   2017.09.14 10:56
已采纳

private static String HOST = "";
private static String USER = "";
private static String PWD = "";
private static String FROM = "";

public static void main(String[] agrs) {
    System.out.println("发邮件开始");
    //需要注意这个图片的地址   如果是本地地址   邮件看不到图片   必须是服务器地址

    sendHtmlEmail(to,"该付款了","<!DOCTYPE html><html><head><meta charset=''utf-8'></head><body><img src='http://192.168.1.108:9586/payImg/20170910.png'></body></html>");
    System.out.println("发邮件结束");
}




/**
 * 发送纯文本邮件
 * 
 * @param to
 *            收件人地址
 * @param subject
 *            邮件标题
 * @param content
 *            邮件内容
 * @author LY
 */
public static void sendTextEmail(String to, String subject, String content) {
    Properties props = new Properties();
    Authenticator auth = new EmailAuthenticator(); // 邮件服务器认证
    props.put("mail.smtp.host", HOST);
    // 验证授权
    props.put("mail.smtp.auth", "true");
    Session session = Session.getDefaultInstance(props, auth);
    // 在console处显示过程信息
    session.setDebug(true);
    // 用session为参数定义消息对象
    MimeMessage message = new MimeMessage(session);
    try {
        // 加载发件人地址
        message.setFrom(new InternetAddress(FROM));
        // 加载收件人地址
        // message.addRecipient(Message.RecipientType.TO, new
        // InternetAddress(to));

        // 加载收件人地址,发送多封邮件
        int mailtocount = to.split(";").length;

        if (mailtocount > 1) {
            String[] tos = to.split(";");
            for (int i = 0; i < mailtocount; i++) {
                message.addRecipient(Message.RecipientType.TO,
                        new InternetAddress(tos[i]));
            }
        } else {
            Address toAddress = new InternetAddress(to); // 收件人
            message.setRecipient(Message.RecipientType.TO, toAddress);
        }
        // 加载标题
        message.setSubject(subject);
        // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
        Multipart multipart = new MimeMultipart();

        // 设置邮件的文本内容
        BodyPart contentPart = new MimeBodyPart();
        contentPart.setText(content);
        multipart.addBodyPart(contentPart);

        message.setContent(multipart);
        // 保存邮件
        message.saveChanges();
        // 发送邮件
        Transport transport = session.getTransport("smtp");
        // 连接服务器的邮箱
        transport.connect(HOST, USER, PWD);
        // 把邮件发送出去
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void sendHtmlEmail(String to, String subject, String content) {
    Properties props = new Properties();
    Authenticator auth = new EmailAuthenticator(); // 邮件服务器认证
    props.put("mail.smtp.host", HOST);
    // 验证授权
    props.put("mail.smtp.auth", "true");
    Session session = Session.getDefaultInstance(props, auth);
    // 在console处显示过程信息
    session.setDebug(true);
    // 用session为参数定义消息对象
    MimeMessage message = new MimeMessage(session);
    try {
        // 加载发件人地址
        message.setFrom(new InternetAddress(FROM));
        // 加载收件人地址
        // message.addRecipient(Message.RecipientType.TO, new
        // InternetAddress(to));

        // 加载收件人地址,发送多封邮件
        int mailtocount = to.split(";").length;

        if (mailtocount > 1) {
            String[] tos = to.split(";");
            for (int i = 0; i < mailtocount; i++) {
                message.addRecipient(Message.RecipientType.TO,
                        new InternetAddress(tos[i]));
            }
        } else {
            Address toAddress = new InternetAddress(to); // 收件人
            message.setRecipient(Message.RecipientType.TO, toAddress);
        }
        // 加载标题
        message.setSubject(subject);
        message.setText("哎,损失了");
        /*
         * //设置消息正文,文本 message.setText("Welcome To JavaMail"); //设置HTML内容
         * message.setContent("<a href='http://www.163.com'>百度</a>",
         * "text/html;charset=utf-8");
         */
        // MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
        Multipart mainPart = new MimeMultipart();
        // 创建一个包含HTML内容的MimeBodyPart
        BodyPart body = new MimeBodyPart();
        // 设置html内容
        body.setContent(content, "text/html;charset=utf-8");
        // 将MimeMultipart设置为邮件内容
        mainPart.addBodyPart(body);
        message.setContent(mainPart);
        // /////////////////////sesion获得Transprot
        Transport transport = session.getTransport("smtp");
        // 连接服务器的邮箱
        transport.connect(HOST, USER, PWD);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 发送带内嵌图片的HTML邮件
 */
public static void sendHtmlWithInnerImageEmail(String to, String subject,
        String text, String imgPath) {
    try {
        // 创建Session实例对象
        Properties props = new Properties();
        Authenticator auth = new EmailAuthenticator(); // 邮件服务器认证
        props.put("mail.smtp.host", HOST);
        // 验证授权
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props, auth);
        // 创建邮件内容
        MimeMessage message = new MimeMessage(session);
        // 邮件主题,并指定编码格式
        message.setSubject(subject, "utf-8");
        // 发件人
        message.setFrom(new InternetAddress(FROM));
        // 收件人
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));
        // 抄送
        // message.setRecipient(RecipientType.CC, new
        // InternetAddress("java_test@sohu.com"));
        // 密送 (不会在邮件收件人名单中显示出来)
        // message.setRecipient(RecipientType.BCC, new
        // InternetAddress("417067629@qq.com"));
        // 发送时间
        message.setSentDate(new Date());

        // 创建一个MIME子类型为“related”的MimeMultipart对象
        MimeMultipart mp = new MimeMultipart("related");
        // 创建一个表示正文的MimeBodyPart对象,并将它加入到前面创建的MimeMultipart对象中
        MimeBodyPart htmlPart = new MimeBodyPart();
        mp.addBodyPart(htmlPart);
        // 创建一个表示图片资源的MimeBodyPart对象,将将它加入到前面创建的MimeMultipart对象中
        MimeBodyPart imagePart = new MimeBodyPart();
        mp.addBodyPart(imagePart);

        // 将MimeMultipart对象设置为整个邮件的内容
        message.setContent(mp);

        // 设置内嵌图片邮件体
        DataSource ds = new FileDataSource(new File(imgPath));
        DataHandler dh = new DataHandler(ds);
        imagePart.setDataHandler(dh);
        imagePart.setContentID("aaa.png"); // 设置内容编号,用于其它邮件体引用

        // 创建一个MIME子类型为"alternative"的MimeMultipart对象,并作为前面创建的htmlPart对象的邮件内容
        MimeMultipart htmlMultipart = new MimeMultipart("alternative");
        // 创建一个表示html正文的MimeBodyPart对象
        MimeBodyPart htmlBodypart = new MimeBodyPart();
        // 其中cid=androidlogo.gif是引用邮件内部的图片,即imagePart.setContentID("androidlogo.gif");方法所保存的图片
        htmlBodypart.setContent(text, "text/html;charset=utf-8");
        htmlMultipart.addBodyPart(htmlBodypart);
        htmlPart.setContent(htmlMultipart);

        // 保存并生成最终的邮件内容
        message.saveChanges();

        // 发送邮件
        Transport.send(message);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
syt_Jimmy
syt_Jimmy 回复Heartseeker: http://www.17sucai.com/pins/demoshow/25877
2 个月之前 回复
syt_Jimmy
syt_Jimmy 回复Heartseeker: 这个你需要上网找一个可编辑文字、图片的插件,网上应该挺多的;再在后台处理中把图片存储到服务器,发送邮件时将图片的路径改成服务器存储的路径
2 个月之前 回复
qq_40091932
qq_40091932 回复syt_Jimmy: 要求是编辑邮件时上传图片,图片显示在正文里。不是收到邮件看到的
2 个月之前 回复
syt_Jimmy
syt_Jimmy 回复Heartseeker: 这个就是在收到邮件的正文里显示图片呀
2 个月之前 回复
qq_40091932
qq_40091932 这个能在编辑邮件的正文里显示图片吗,不是收到邮件能看到图片,有类似的前端代码没..
2 个月之前 回复
showbo
showbo   Ds   Rxr 2017.09.14 10:41

邮件格式设置为html代码的,图片资源文件直接连接到url地址去就行了

http://blog.csdn.net/oyzl68/article/details/8245171

qq_26433213
qq_26433213   2017.09.14 10:42

如果是两端都是web的话可以使用富文本编辑器,发送和接受都是在富文本编辑器上打开

Csdn user default icon
上传中...
上传图片
插入图片