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

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条)

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容