2011-03-07 35 views
51

HTMLファイルを電子メールで送信する必要がありますが、添付ファイルとして送信する必要はありません。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(); 
} 

文字メッセージで簡単にメールを送信しています。

その後
MimeMessage simpleMessage = new MimeMessage(mailSession); 

、あなたがメッセージ本文を設定する、のいずれかのコール: は、私は別のファイルに保存されているが、添付ファイルとして

+3

本当にあなたの質問に答えてください(http://stackoverflow.com/faq#howtoask)。 – dkarp

答えて

104

があなたのMimeMessageMessageへのアップキャストしないではないHTMLコンテンツを送信したいです

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

またはお電話

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

utf-8以外の文字セットを使用する場合は、適切な場所に置き換えてください。

JavaMailのは、すべてが実際に構築なっている本当のサブクラス(MimeMultipartMimeMessage、およびInternetAddress)よりもはるかに少ない機能を持っていることが多いあなたはMultipartMessage、およびAddressのようなクラスを保持したまま、抽象化の余分な、役に立たない層を、持っています...

+0

私は問題のコードを 'simpleMessage.setContent(text、" text/html; charset = utf-8 ");'で使用していますが、コンテンツを設定する際には、 '=' HTMLプロパティが正しく設定されないようにする '= 3D'に変換されます。 – mohamnag

+1

@mohamnagおそらく、結果のメッセージに 'Content-Transfer-Encoding:quoted-printable'というヘッダーがあることに気付くでしょう。 (これは、あなたのHTML部分に非ASCIIテキストを含み、電子メールは非ASCIIコンテンツを好まないためです)。メッセージの受信者は、それらを変換するためにメッセージコンテンツを転送デコードする必要があります。 '=' sに戻ります。受信側で 'MimeMessage.getContentStream'の代わりに' MimeMessage.getInputStream'を使ってみてください。 – dkarp

+0

@dkrapそれに言及してくれてありがとう、私は転送エンコーディングを無視していたので、HTMLが正しく表示されませんでした。 – mohamnag

関連する問題