2011-03-07 109 views
51

Tôi phải gửi tệp HTML qua email nhưng không phải là tệp đính kèm.cách gửi email HTML

Message simpleMessage = new MimeMessage(mailSession); 
try { 
    fromAddress = new InternetAddress(from); 
    toAddress = new InternetAddress(to); 

} catch (AddressException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

try { 
    simpleMessage.setFrom(fromAddress); 
    simpleMessage.setRecipient(RecipientType.TO, toAddress); 

    simpleMessage.setSubject(subject); 
    simpleMessage.setText(text); 

    Transport.send(simpleMessage); 
} catch (MessagingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

Gửi email chỉ đơn giản bằng tin nhắn văn bản. Tôi muốn gửi nội dung HTML được lưu trữ trong tập tin khác nhưng không phải là tập tin đính kèm

+3

Bạn thực sự nên [chấp nhận một số câu trả lời cho câu hỏi của bạn] (http://stackoverflow.com/faq#howtoask). – dkarp

Trả lời

104

Đừng upCast bạn MimeMessage-Message:

MimeMessage simpleMessage = new MimeMessage(mailSession); 

Sau đó, khi bạn muốn thiết lập nội dung thư, một trong hai cuộc gọi

simpleMessage.setText(text, "utf-8", "html"); 

hoặc gọi

simpleMessage.setContent(text, "text/html; charset=utf-8"); 

Nếu bạn muốn sử dụng bộ ký tự khác hơn utf-8, hãy thay thế nó ở vị trí thích hợp.

JavaMail có thêm một, lớp vô dụng trừu tượng mà thường để lại bạn giữ lớp như Multipart, Message, và Address, mà tất cả chỉ còn lại ít nhiều chức năng hơn so với các lớp con thực (MimeMultipart, MimeMessage, và InternetAddress) mà đang thực sự bị xây dựng ...

+0

Tôi đang sử dụng mã được đề cập đến với 'simpleMessage.setContent (văn bản," text/html; charset = utf-8 ");' để đặt nội dung nhưng khi thực hiện nó, mọi nơi trong nội dung mà tôi có dấu chấm hỏi '=' nó được chuyển đổi thành '= 3D' ngăn các thuộc tính HTML được đặt chính xác, bất kỳ ý tưởng nào tại sao? – mohamnag

+1

@mohamnag Có thể bạn sẽ nhận thấy rằng thông báo kết quả có tiêu đề đọc là 'Nội dung-Chuyển-Mã hóa: được trích dẫn-in'. (Điều này có thể do bạn bao gồm văn bản không phải ASCII trong phần HTML của bạn và email không giống như nội dung không phải ASCII.) Người nhận thư sẽ cần phải chuyển-giải mã nội dung thư để chuyển đổi những người đó '= 3D' s trở lại '=' s. Hãy thử sử dụng 'MimeMessage.getInputStream' thay vì' MimeMessage.getContentStream' ở phía người nhận. – dkarp

+0

@dkrap cảm ơn vì đã đề cập đến nó, tôi đã bỏ qua mã hóa chuyển và kết quả HTML không hiển thị chính xác. – mohamnag

Các vấn đề liên quan