【问题标题】:Not able to send html mail body along with xls file as attachment无法将 html 邮件正文与 xls 文件一起作为附件发送
【发布时间】:2014-11-27 05:26:15
【问题描述】:

我正在使用下面的代码发送 xls 文件并以表格格式显示一些数据。我能够将 xls 文件作为附件获取,但 html 代码不是表格格式。如果我取消注释 msg.setContent(body, "text/html") 行,那么我只会在正文中获得表格格式,但附件不存在

public synchronized static void sendEmail(Session session, String toEmail, String subject, String body, String recipient) {
    try {
        MimeMessage msg = new MimeMessage(session);

//            msg.addHeader("Content-type", "text/html");

        msg.setFrom(new InternetAddress("abc@xyz", "abc@xyz"));

        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));

        msg.setReplyTo(InternetAddress.parse(recipient, false));

        msg.setSubject(subject);

        msg.setSentDate(new Date());



        //==================================================================
        // create and fill the first message part
        MimeBodyPart mbp1 = new MimeBodyPart();
        mbp1.setText(body);
        // create the second message part
        MimeBodyPart mbp2 = new MimeBodyPart();
        // attach the file to the message
        FileDataSource fds = new FileDataSource("D:/Shashank/output.xls");
        mbp2.setDataHandler(new DataHandler(fds));
        mbp2.setFileName(fds.getName());
        // create the Multipart and add its parts to it
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(mbp1);
        mp.addBodyPart(mbp2);
        // add the Multipart to the message
        msg.setContent(mp);
//            msg.setContent(body, "text/html");
        msg.saveChanges();

        //==================================================================  
       System.out.println("Message is ready");

       Transport.send(msg);

       System.out.println("EMail Sent Successfully!!");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 尝试将 Content-Type 标头添加到您的 HTML 正文部分。 mbp1.addHeader("Content-type", "text/html");
  • @RichardNeish:添加此附件后附件不存在,但表格为 html 格式。请帮助:(

标签: java jakarta-mail


【解决方案1】:
use this :

#!/usr/bin/ksh

export MAILTO="spam@ebay.com"
export SUBJECT="Mail Subject"
export BODY="/tmp/email_body.html"
export ATTACH="/tmp/attachment.xls"
(
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo 'Content-Type: multipart/mixed; boundary="-q1w2e3r4t5"'
 echo
 echo '---q1w2e3r4t5'
 echo "Content-Type: text/html"
 echo "Content-Disposition: inline"
 cat $BODY
 echo '---q1w2e3r4t5'
 echo 'Content-Type: application; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: base64"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'

    uuencode -m $ATTACH $(basename $ATTACH)

 echo '---q1w2e3r4t5--'
) | /usr/sbin/sendmail $MAILTO

【讨论】:

  • 你的回答与java/javamail无关
【解决方案2】:

当您希望发送正文部分(文本)附件时,您必须创建一个 MIME 多部分消息。

例如plain java mail

或者使用apache commons email 来处理这个问题。

import org.apache.commons.mail.*;
...

// Create the attachment
EmailAttachment attachment = new EmailAttachment();
attachment.setPath("mypictures/john.jpg");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Picture of John");
attachment.setName("John");

// Create the email message
MultiPartEmail email = new MultiPartEmail();
email.setHostName("mail.myserver.com");
email.addTo("jdoe@somewhere.org", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("The picture");
email.setMsg("Here is the picture you wanted");

// add the attachment
email.attach(attachment);

// send the email
email.send();

【讨论】:

    【解决方案3】:

    此代码对我来说 100% 没问题...

           File file;//Attached file
           MimeMessage message = new MimeMessage(session);
           message.setFrom(new InternetAddress(EMAIL_FROM));
           final String[] to = emailsTo;
           // Create the message part
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent("", "text/html");
            message.setSubject("");
            /////////////Attach File/////////////
            // Create the message part
            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent("", "text/html");
            // Create a multipart message
            Multipart multipart = new MimeMultipart();
    
            // Set text message part
            multipart.addBodyPart(messageBodyPart);
    
            // Part two is attachment
            messageBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource(file);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(file.getName());
            multipart.addBodyPart(messageBodyPart);
    
            // Send the complete message parts
            message.setContent(multipart, "text/html");
            /////////////////////////////////////
            Transport.send(message);
    

    【讨论】:

      猜你喜欢
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 2015-10-14
      • 2018-05-06
      • 2019-01-16
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多