2017-07-08 57 views
0

逗人,Java郵件:接收電子郵件正文與附件和車身

面臨的一個問題,郵件正文使用Java郵件(微軟Exchange服務器)發送電子郵件時重複進行移動沿着.htm文件附件。發送郵件正文和pdf作爲附件,但當客戶收到郵件時收件箱中的郵件正文內容正在複製(兩次),同時發送PDF和一個.htm文件作爲附件。由於.htm文件,電子郵件正文兩次來到。如何在郵件中避免這種重複機構。以下是用於發送電子郵件的代碼。這個問題不會發生在基於瀏覽器的電子郵件客戶端,它只發生在移動設備上

設置電子郵件正文(HTML內容),如下

import javax.mail.Message; 
Message msg = new SMTPMessage(session); 
MimeMultipart mp = new MimeMultipart(); 
MimeBodyPart mbp = null; 
mbp = new MimeBodyPart(); 
mbp.setContent("Hi, This is a test.", "text/html; charset=utf-8"); 
mp.addBodyPart(mbp); 

設置PDF作爲附件

MimeBodyPart mbp = null; 
ByteArrayDataSource xfds3 = null; 
mbp = new MimeBodyPart(); 
byte[] b = //PDF byte array 
xfds3 = new ByteArrayDataSource(b, "application/pdf"); 
mbp.setDataHandler(new DataHandler(xfds3)); 
String maskName = maskingNo(fileName, prop); 
mbp.setFileName(maskName); 
mp.addBodyPart(mbp); 
msg.setContent(mp); 
transport.sendMessage(msg, msg.getAllRecipients()); 

誰能幫助如何解決這個問題呢?

輸出在郵件正文未來:

嗨, 這是一個測試。

嗨, 這是一個測試

+0

所有移動客戶端或只有一個?哪一個?是從Exchange還是從其他郵件服務中讀取郵件?如果您使用JavaMail閱讀郵件,它是否具有您期望的結構和內容? –

回答

0

這取決於您要發送的形式以及客戶端顯示或建立基於這一點。

有:

  • 純/文(沒有花哨的造型)
  • text/html的
  • 富文本(通常應該避免,由於winmail.dat的問題)
  • 多/混合

所以可能的電子郵件可以有來源:

multipart/mixed 
    multipart/alternative (holding the two forms of the body part) 
     text/plain 
     text/html 
    text/plain or image/gif (the attachment) 

enter image description here

但是根據郵件客戶端上此郵件可能只顯示純文本元素,沒有「結構」的說法。以上這些東西如果經常被用來具有一定的兼容性,所以如果電子郵件客戶端不能處理HTML電子郵件,用戶仍然可以閱讀純文本。如果客戶端不能理解HTML(或者多段部分被破壞),則HTML內容可能會變成附件(可能是您的問題)。

所以,你這難道不是容易回答的問題,因爲我們:

  • 不知道哪個Exchange服務器發送這些電子郵件
  • 這是用來格式發送出去的電子郵件
  • 如果某樣東西正在改變的方式的格式向發送者
  • 使用哪個客戶端的接收器

此外troubleshoo婷必須在你的身邊來完成:

  • 是,當你發送電子郵件到內部用戶
  • 正在發生的事情是發生在您發送電子郵件到Gmail,Outlook.com,...
  • 發送沒有HTML內容的電子郵件時發生這種情況(僅附件)?
  • 您的多部分部分是否正確?查看互聯網上的一些示例,例如here

    package net.codejava.mail;

    import java.io.IOException; import java.util.Date; import java.util.Properties;

    import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart;

    公共類EmailAttachmentSender {

    public static void sendEmailWithAttachments(String host, String port, 
         final String userName, final String password, String toAddress, 
         String subject, String message, String[] attachFiles) 
         throws AddressException, MessagingException { 
        // sets SMTP server properties 
        Properties properties = new Properties(); 
        properties.put("mail.smtp.host", host); 
        properties.put("mail.smtp.port", port); 
        properties.put("mail.smtp.auth", "true"); 
        properties.put("mail.smtp.starttls.enable", "true"); 
        properties.put("mail.user", userName); 
        properties.put("mail.password", password); 
    
        // creates a new session with an authenticator 
        Authenticator auth = new Authenticator() { 
         public PasswordAuthentication getPasswordAuthentication() { 
          return new PasswordAuthentication(userName, password); 
         } 
        }; 
        Session session = Session.getInstance(properties, auth); 
    
        // creates a new e-mail message 
        Message msg = new MimeMessage(session); 
    
        msg.setFrom(new InternetAddress(userName)); 
        InternetAddress[] toAddresses = { new InternetAddress(toAddress) }; 
        msg.setRecipients(Message.RecipientType.TO, toAddresses); 
        msg.setSubject(subject); 
        msg.setSentDate(new Date()); 
    
        // creates message part 
        MimeBodyPart messageBodyPart = new MimeBodyPart(); 
        messageBodyPart.setContent(message, "text/html"); 
    
        // creates multi-part 
        Multipart multipart = new MimeMultipart(); 
        multipart.addBodyPart(messageBodyPart); 
    
        // adds attachments 
        if (attachFiles != null && attachFiles.length > 0) { 
         for (String filePath : attachFiles) { 
          MimeBodyPart attachPart = new MimeBodyPart(); 
    
          try { 
           attachPart.attachFile(filePath); 
          } catch (IOException ex) { 
           ex.printStackTrace(); 
          } 
    
          multipart.addBodyPart(attachPart); 
         } 
        } 
    
        // sets the multi-part as e-mail's content 
        msg.setContent(multipart); 
    
        // sends the e-mail 
        Transport.send(msg); 
    
    } 
    
    /** 
    * Test sending e-mail with attachments 
    */ 
    public static void main(String[] args) { 
        // SMTP info 
        String host = "smtp.gmail.com"; 
        String port = "587"; 
        String mailFrom = "your-email-address"; 
        String password = "your-email-password"; 
    
        // message info 
        String mailTo = "your-friend-email"; 
        String subject = "New email with attachments"; 
        String message = "I have some attachments for you."; 
    
        // attachments 
        String[] attachFiles = new String[3]; 
        attachFiles[0] = "e:/Test/Picture.png"; 
        attachFiles[1] = "e:/Test/Music.mp3"; 
        attachFiles[2] = "e:/Test/Video.mp4"; 
    
        try { 
         sendEmailWithAttachments(host, port, mailFrom, password, mailTo, 
          subject, message, attachFiles); 
         System.out.println("Email sent."); 
        } catch (Exception ex) { 
         System.out.println("Could not send email."); 
         ex.printStackTrace(); 
        } 
    } 
    

    }

0

而是這行: mbp.setContent("Hi, This is a test.", "text/html; charset=utf-8"); 這樣寫: mbp.setContent("Hi, This is a test.", "text/plain; charset=utf-8");