2014-09-02 85 views
0

我試圖使用javamail從webapp發送一封電子郵件,並且郵件沒有發送正文和附件。我試着調試它,我看不出有什麼問題。 我使用tomee + 1.7和javamail 1.4.7。javamail不發送郵件內容

這裏是我的代碼:

// Msg body 
     session.setDebug(true); 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     messageBodyPart.setText("Attached are your query results"); 
     messageBodyPart.addHeader("Content-Type", "text/html; charset=windows-1255"); 
     messageBodyPart.addHeader("Content-Transfer-Encoding", "base64"); 

     // attachment 
     LOG.info("Building attachment from file " + file.getName()); 
     MimeBodyPart attachmentPart = new MimeBodyPart(); 
     attachmentPart.attachFile(file); 
     attachmentPart.setFileName(file.getName()); 

     Multipart multipart = new MimeMultipart(); 
     multipart.addBodyPart(messageBodyPart); 
     multipart.addBodyPart(attachmentPart); 

     // Send message 
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
     message.setSubject("Query report...");   
     message.setContent(multipart); 
     Transport.send(message); 
     LOG.info("Sent message successfully ..."); 

我得到的消息:

From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: Query report... 
MIME-Version: 1.0 
Content-Type: multipart/mixed; 
     boundary="----=_Part_0_1099874708.1409738093124" 
+0

「我嘗試過調試它,我看不到有什麼問題」;您可以發佈javamail的調試輸出,因爲您設置了'session.setDebug(true);' – Seismoid 2014-09-02 15:13:39

+0

您是否在任何地方看到錯誤消息? – 2014-09-02 15:19:36

+0

任何地方都沒有錯誤消息..我實際上收到一條空消息 – style 2014-09-03 09:42:22

回答

0

最後我刪除了消息的文本部分和加載的文件內容爲字符串:

 Message message = new MimeMessage(session); 
     message.setDataHandler(new DataHandler(new ByteArrayDataSource(csv.getBytes("8859_8"), 
       "text/csv"))); 
     message.setFileName("data.csv"); 
     message.setFrom(new InternetAddress(from)); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
     message.setSubject("Query report..."); 
     Transport.send(message); 
     LOG.info("Sent message successfully ..."); 
0

很難說沒有你所得到的錯誤消息確切根源。我有以下代碼適用於我

import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.activation.*; 

public class SendFileEmail 
{ 
public static void main(String [] args) 
{ 

    // Recipient's email ID needs to be mentioned. 
    String to = "[email protected]"; 

    // Sender's email ID needs to be mentioned 
    String from = "[email protected]"; 

    // Assuming you are sending email from localhost 
    String host = "localhost"; 

    // Get system properties 
    Properties properties = System.getProperties(); 

    // Setup mail server 
    properties.setProperty("mail.smtp.host", host); 

    // Get the default Session object. 
    Session session = Session.getDefaultInstance(properties); 

    try{ 
    // Create a default MimeMessage object. 
    MimeMessage message = new MimeMessage(session); 

    // Set From: header field of the header. 
    message.setFrom(new InternetAddress(from)); 

    // Set To: header field of the header. 
    message.addRecipient(Message.RecipientType.TO, 
           new InternetAddress(to)); 

    // Set Subject: header field 
    message.setSubject("This is the Subject Line!"); 

    // Create the message part 
    BodyPart messageBodyPart = new MimeBodyPart(); 

    // Fill the message 
    messageBodyPart.setText("This is message body"); 

    // Create a multipar message 
    Multipart multipart = new MimeMultipart(); 

    // Set text message part 
    multipart.addBodyPart(messageBodyPart); 

    // Part two is attachment 
    messageBodyPart = new MimeBodyPart(); 
    String filename = "file.txt"; 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 
    multipart.addBodyPart(messageBodyPart); 

    // Send the complete message parts 
    message.setContent(multipart); 

    // Send message 
    Transport.send(message); 
    System.out.println("Sent message successfully...."); 
    }catch (MessagingException mex) { 
    mex.printStackTrace(); 
    } 
} 
} 
+0

他想發送附件,而不僅僅是一條短信。不回答這個問題。 – EJP 2014-09-02 22:34:50

+0

@EJP:謝謝,我已經更新了我的解決方案,它支持電子郵件附件 – 2014-09-03 13:43:53

1

將messageBodyPart添加到AttachmentPart之前的multipart。

如果仍不起作用,請發佈調試輸出。您可以檢查通過添加message.writeTo(new FileOutputStream(「msg.txt」))發送的消息。在Transport.send之前。您也可以升級到latest version of JavaMail - 1.5.2

+0

兩種都試過 - 沒有幫助..我編輯問題以包含消息內容 – style 2014-09-03 09:55:58

+0

您可以發佈整個調試輸出嗎?我不相信你正在使用你認爲你正在使用的JavaMail版本。作爲另一個實驗,添加message.saveChanges();在Transport.send之前。如果解決了這個問題,那麼您使用的是JavaMail的**非常老的版本。另外,嘗試在try/catch中包裝你的代碼,以確保你沒有得到任何意外的異常。 – 2014-09-03 18:49:16

1

對不起提高老話題,但我希望這會幫助別人。

問題是您的類路徑中有多個java.mail jar。 例如,我在TomEE lib文件夾中有一個名爲geronimo javamail 1.4 jar的東西,它具有java郵件的類。您可能認爲您使用的是最新版本的java.mail,但它是錯誤的