2012-09-20 59 views
1

我一直在試圖獲得解決方案,但我無法做到。這是整個事情。我寫了下面的代碼發送字符串作爲使用javamail的附件

MimeMessage message = new MimeMessage(session); 
message.setFrom(new InternetAddress(from)); 
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
message.setSubject(subject); 
message.setSentDate(new Date()); 

MimeBodyPart messagePart = new MimeBodyPart(); 
messagePart.setContent(messageContent, "text/html"); 
Multipart multipart = new MimeMultipart("mixed"); 
multipart.addBodyPart(messagePart); 

MimeBodyPart attachmentPart = new MimeBodyPart(); 
DataSource source = new ByteArrayDataSource(attachment.getBytes(), "text/plain"); 
attachmentPart.setDataHandler(new DataHandler(source)); 
attachmentPart.setFileName(attachmentFileName); 
multipart.addBodyPart(attachmentPart); 
message.setContent(multipart); 

try { 
Transport.send(message);     
} catch (Exception e) { 
e.printStackTrace(); 
    } 

該代碼幾乎不言自明。 messagePart是郵件和attachmentPart是附件。但是這裏的messagePart不是純文本。它是HTML。所以問題是如果我運行這個代碼郵件發送成功,但附件不附加到郵件。所以我的問題歸結爲這一點。是否可以發送html內容並同時將某些內容附加到郵件中。我被困在這裏。任何人都可以幫忙請。

回答

0

我沒有看到任何明顯錯誤的代碼。

你如何確定該消息沒有附件?

您可以通過添加「message.writeTo(System.out);」來準確瞭解JavaMail將發送的內容。在你調用Transport.send之前。

你使用的是什麼版本的JavaMail?你使用什麼郵件服務器?有些郵件服務器(我在看着你,Exchange)會將郵件重新格式化爲他們認爲應該的內容,即使它與你想要的不同。

+0

Javamail版本是1.4.3。我在Google App Engine上運行此代碼。這可能是一切背後的問題嗎? – user1540439

+0

添加了一個虛擬文本部分,它工作正常。謝謝你們的幫助 – user1540439

+0

是的!添加虛擬文本部分也適用於我 - 也在Google App Engine上。 –

0

您要添加

attachmentPart.setDisposition(Part.ATTACHMENT); 

Part.ATTACHMENT意味着部分應顯示爲附件。

Part.INLINE表示您想要將附件顯示爲消息的一部分。

0

如果您是在Google App Engine上運行的,並且您添加了虛擬文本部分,那麼它的效果很好。我不知道爲什麼虛擬文本部分使它工作,但我有完全相同的問題,並添加一個虛擬文本部分也爲我工作。

+0

我如何標記這個谷歌應用程序引擎? –

相關問題