javax.mail 与 HTML 消息 + 附件不发送 HTML 消息但发送附件

javax.mail with HTML message + attachment not sending HTML message but sending attachment

我正在使用此代码发送 text/html 内容以及 attachment 但它只发送附件。

    package com.maling.sendmail;

    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

    public class sendmail {

        boolean flag = false;
        String from = "myemailid@gmail.com";
        String password = "Pa**w*rd";
        String filename = "D:\myfile.pdf";

        public boolean sendMail(String email_id_of_recipients) {
            System.out.println("into maling utility......");
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");
            Session session = Session.getInstance(props,
                    new javax.mail.Authenticator() {
                        @Override
                        protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
                            return new javax.mail.PasswordAuthentication(from, password);
                        }
                    });
            try {
                String text = "<h1>Hello My html formeted message</h1>";
                String to = email_id_of_recipients;
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from));
                message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
                message.setSubject("Myresume");
                message.setText(text, "utf-8", "html");
                message.setContent(text, "text/html; charset=utf-8");
                DataSource source = new FileDataSource(filename);
                message.setDataHandler(new DataHandler(source));
                message.setFileName(filename);
                Transport.send(message);

                flag = true;
                System.out.println("end of utility");
            } catch (Exception ex) {
                System.out.println(ex);
            }

            return flag;
        }

    }

我应该怎么改正?

您需要 multipart message 才能发送文本和附件。此代码应该有效:

String text = "<h1>Hello My HTML formatted message</h1>";
String to = email_id_of_recipients;
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("My resume");
// message.setText(text, "utf-8", "html");

MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(text, "text/html; charset=utf-8");

DataSource source = new FileDataSource(filename);
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
Multipart multipart = new MimeMultipart("mixed");
multipart.addBodyPart(textPart);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);

Transport.send(message);