第20章 電子メール


Seam には電子メールの送信およびテンプレート作成用のオプションコンポーネントが含まれています。
電子メールのサポートは jboss-seam-mail.jar により提供されます。 この JAR にはメールの作成に使用されるメール JSF コントロール、および mailSession マネージャコンポーネントが含まれます。
電子メールサポートのデモが Seam にありますので、 examples/mail プロジェクトをご覧ください。 正しいパッケージの方法を示すデモ、 および現在対応している主要な機能が数点含まれています。
Seam の統合テスト環境で電子メールのシステムをテストすることができます。 「Seam メールの統合テスト」 を参照してください。

20.1. メッセージの作成

Seam は Facelets を使用して電子メールのテンプレートを作成します。
<m:message xmlns="http://www.w3.org/1999/xhtml"
           xmlns:m="http://jboss.com/products/seam/mail"
           xmlns:h="http://java.sun.com/jsf/html">
  
  <m:from name="Peter" address="peter@example.com" />
  <m:to name="#{person.firstname} #{person.lastname}">
    #{person.address}
  </m:to>
  <m:subject>Try out Seam!</m:subject>
  
  <m:body>
    <p><h:outputText value="Dear #{person.firstname}" />,</p>
    <p>You can try out Seam by visiting 
    <a href="http://labs.jboss.com/jbossseam">
      http://labs.jboss.com/jbossseam
      </a>.
    </p>
    <p>Regards,</p>
    <p>Pete</p>
  </m:body>
  
</m:message>
Copy to Clipboard Toggle word wrap
<m:message> タグはメッセージ全体を囲み、 Seam に電子メールのレンダリングを開始するよう指示します。 <m:message> タグ内では、 メッセージの送信者の指定に <m:from> タグ、 受信者の指定に <m:to> タグ、さらに <m:subject> タグを使用します (EL は通常の Facelets にあるためそれが使用される点に注意してください)。
<m:body> タグは電子メールの本文を囲みます。 HTML 正規タグを本文内や JSF コンポーネント内に使用することができます。
m:message がレンダリングされると、 mailSession が電子メールを送信するよう呼び出されます。 電子メールを送信するには Seam にそのビューをレンダリングするよう指示します。
@In(create=true)
private Renderer renderer;
    
public void send() {
    try {
        renderer.render("/simple.xhtml");
        facesMessages.add("Email sent successfully");
    } catch (Exception e) {
        facesMessages.add("Email sending failed: " + e.getMessage());
    }
}
Copy to Clipboard Toggle word wrap
たとえば、 無効な電子メールアドレスを入力すると例外が送出され、その例外はキャッチされユーザーに表示します。

20.1.1. 添付ファイル

Seam はファイルの処理に関してほとんどの Java の標準タイプに対応するため、 電子メールへのファイルの添付は簡単です。
たとえば、 jboss-seam-mail.jar を送信するには
<m:attachment value="/WEB-INF/lib/jboss-seam-mail.jar"/>
Copy to Clipboard Toggle word wrap
Seam はファイルをクラスパスからロードして電子メールにそれを添付します。 デフォルトでは、 jboss-seam-mail.jar という名前で添付されますが、 fileName 属性を追加して編集すると添付ファイルの名前を変更することができます。
<m:attachment value="/WEB-INF/lib/jboss-seam-mail.jar" 
      fileName="this-is-so-cool.jar"/>
Copy to Clipboard Toggle word wrap
java.io.Filejava.net.URL を添付することもできます。
<m:attachment value="#{numbers}"/>
Copy to Clipboard Toggle word wrap
または、 byte[] あるいは java.io.InputStream
<m:attachment value="#{person.photo}" contentType="image/png"/>
Copy to Clipboard Toggle word wrap
byte[]java.io.InputStream には添付ファイルの MIME タイプを指定する必要があります。 この情報はファイルの一部とはならないためです。
通常のタグの前後を <m:attachment> タグで囲むことで、Seam 生成の PDF や標準の JSF ビューを添付することができます。
<m:attachment fileName="tiny.pdf"> 
  <p:document>
    A very tiny PDF
  </p:document> 
</m:attachment>
Copy to Clipboard Toggle word wrap
複数のファイル一式を添付する場合 — 例えばデータベースからロードした複数の写真一式など — <ui:repeat> を使うことができます。
<ui:repeat value="#{people}" var="person"> 
  <m:attachment value="#{person.photo}" contentType="image/jpeg"
                fileName="#{person.firstname}_#{person.lastname}.jpg"/> 
</ui:repeat>
Copy to Clipboard Toggle word wrap
添付したイメージをインラインで表示させるには
<m:attachment value="#{person.photo}" contentType="image/jpeg" 
              fileName="#{person.firstname}_#{person.lastname}.jpg" 
              status="personPhoto" disposition="inline" /> 
<img src="cid:#{personPhoto.contentId}" />
Copy to Clipboard Toggle word wrap
cid:#{...} タグはイメージ検索が試行されたときに添付ファイルの検査が行われるよう指定します。 cidContent-ID — が一致しなければなりません。
ステータスオブジェクトにアクセスする前に、添付ファイルを宣言しなければいけません。

20.1.2. HTML /Text 代替部分

ほとんどのメールリーダーは HTML に対応していますが、一部でサポートしていないメールリーダーもあります。 メール本文にプレーンテキストを入れることができます。
<m:body> 
  <f:facet name="alternative">
    Sorry, your email reader can't show our fancy email. Please go to 
    http://labs.jboss.com/jbossseam to explore Seam.
  </f:facet>
</m:body>
Copy to Clipboard Toggle word wrap

20.1.3. 複数の受信者

登録ユーザーなど、 複数の受信者で構成されるグループに電子メールを送信したいことがよくあります。 すべての受信者のメールタグを <ui:repeat> の中に置くことができます。
<ui:repeat value="#{allUsers} var="user"> 
  <m:to name="#{user.firstname} #{user.lastname}" 
        address="#{user.emailAddress}"/> 
</ui:repeat>
Copy to Clipboard Toggle word wrap

20.1.4. 複数のメッセージ

パスワードのリセットなど、 若干異なる内容のメッセージを各受信者に送信する必要がある場合もあります。 最適な方法としては、 メッセージ全体を <ui:repeat> 内に配置することです。
<ui:repeat value="#{people}" var="p">
  <m:message> 
    <m:from name="#{person.firstname} #{person.lastname}">
      #{person.address}
    </m:from> 
    <m:to name="#{p.firstname}">#{p.address}</m:to> 
    ... 
  </m:message> 
</ui:repeat>
Copy to Clipboard Toggle word wrap

20.1.5. テンプレートの作成

メールテンプレートのサンプルでは Facelets のテンプレートが Seam のメールタグと動作することを示しています。
template.xhtml には次の内容が含まれています。
<m:message>
  <m:from name="Seam" address="do-not-reply@jboss.com" />
  <m:to name="#{person.firstname} #{person.lastname}">
    #{person.address}
  </m:to>
  <m:subject>#{subject}</m:subject>
  <m:body>
    <html>
      <body>
        <ui:insert name="body">
          This is the default body, specified by the template.
        </ui:insert>
      </body>
    </html>
  </m:body>
</m:message>
Copy to Clipboard Toggle word wrap
templating.xhtml には次の内容が含まれています。
<ui:param name="subject" value="Templating with Seam Mail"/> 
<ui:define name="body"> 
  <p>
    This example demonstrates that you can easily use 
    <i>facelets templating</i> in email!
  </p> 
</ui:define>
Copy to Clipboard Toggle word wrap
電子メールには Facelets のソースタグも使用できます。 ソースタグは WEB-INF/lib の JAR ファイルに入れて置く必要があります。 Seam Mail を使用する場合は web.xml からの .taglib.xml の参照は信頼性に欠けるためです (非同期でメールを送信すると Seam Mail は JSF あるいは Servelt コンテキストにアクセスできないため、 web.xml の設定パラメータを認識しません)。
メール送信時にさらに Facelets や JSF の設定を行うためには、 Renderer コンポーネントを上書きしてプログラム的に設定を行う必要があります。これは上級ユーザーのみ行うようにしてください。

20.1.6. 国際化

Seam は国際化メッセージの送信に対応しています。デフォルトでは、 JSF によるエンコーディングが使用されますが、 テンプレートで上書きすることができます。
<m:message charset="UTF-8"> 
  ... 
</m:message>
Copy to Clipboard Toggle word wrap
本文、 件名、 受信者名および送信者名はコード化されます。 テンプレートのエンコーディングを設定して、 Facelets にページの解析をする際に必ず正しい文字セットを使用させるようにする必要があります。
<?xml version="1.0" encoding="UTF-8"?>
Copy to Clipboard Toggle word wrap

20.1.7. その他のヘッダー

Seam は電子メールのヘッダーにもサポートを提供しています (「タグ」参照)。電子メールの重要度を設定し、受信者の受け取り確認を求めることができます。
<m:message xmlns:m="http://jboss.com/products/seam/mail" 
           importance="low" requestReadReceipt="true"/>
Copy to Clipboard Toggle word wrap
または、 <m:header> タグを使うとメッセージにあらゆるヘッダーを追加することができます。
<m:header name="X-Sent-From" value="JBoss Seam"/>
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat