Heartseeker
2017-09-14 02:23
采纳率: 25%
浏览 1.4k
已采纳

Java实现含图片的复杂邮件

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

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

3条回答 默认 最新

  • syt_Jimmy 2017-09-14 02: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();
        }
    }
    
    评论
    解决 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题