[salesforce]Visualforeメールテンプレートを使ってメール送信

By |10月 31, 2009|salesforce, |


Salesforce上からはメールを送信する手段として、取引先やリードなどの標準オブジェクトの画面上から標準機能を使って送信する方法や、APEXスクリプト内から送る2つの方法などがあります。そのときに送信するメールのテンプレート機能として

  • テキスト形式メールテンプレート
  • HTML形式メールテンプレート
  • Visualforceメールテンプレート

の3つのタイプがあります。
テキスト形式は普通のプレーンテキストでテンプレートを定義、HTML形式はHTMLを使ってメールテンプレートを定義します。そのままです。

その中の一つのVisualforceメールテンプレート機能の使い方まとめ。

[概要]

  • メールテンプレート用のVisualforceタグを使ってメールテンプレートを定義することができます。最終的に生成されるのはHTMLになりますが、APEXの機能にアクセスしたり複雑な処理を経てHTMLを生成することができます。メールタイトル、本文の定義と添付ファイルの定義をすることができます。
  • 全てのVisualforceタグを使用できるわけではありません。また、メールテンプレート用のVisualforceタグがあります。
  • メールテンプレート用に作ったカスタムコントローラを使うこともできます。

[作り方]
[設定]→[コミュニケーションテンプレート]→[電子メールテンプレート]→[新規テンプレート]→[Visualforce]を選択、で作ることができます。

Visualforceテンプレート属性欄
電子メール件名:メールのサブジェクトになります。
受信者種別:メールの送信先対象になる相手を選択します。後から変更できますのでよくわからなければとりあえず適当に選択。
関連先種別:メールテンプレート内で項目情報を差し込む対象のオブジェクトの選択

これで作成できます。Visualforceメールテンプレートの基本構成は以下のような感じ。
ws000085
参考:Creating a Visualforce Email Template

[CSSの定義について]
VisualforceメールテンプレートではCSSを使ってHTMLメールに装飾をすることができます。この時、普通のVisualforceページのように静的リソースなどから外部読み込みするCSS定義はできません。VisualforceメールテンプレートにCSSを定義するには、

  • <style>タグ内に直接記述するか、
  • <apex:component>タグを使って別途定義したコンポーネントを読み込む

という方法をとります。

参考:Using a Custom Stylesheet in a Visualforce Email Template

[添付ファイル]
Visualforceで生成した情報を簡単に添付ファイルとして添付することができます。PDFに変換して添付することもできます。これは便利。
こんな感じで記述します。

[php]
<messaging:attachment filename="list.pdf" renderas="pdf">
<apex:repeat var="cx" value="{!relatedTo.Cases}">
Case Number: {!cx.CaseNumber}Origin: {!cx.Origin}Creator Email: {!cx.Contact.email}Case Number: {!cx.Status}
</apex:repeat>
</messaging:attachment>
[/php]

  • <messaging:attachment>タグに囲まれた領域がテキストファイルとしてメールに添付されます。
  • filename属性でファイル名を定義できます。.csvや.htmlなどでファイル名を定義すればcsvやhtmlファイルとして開けますが内容は<messaging:attachment>タグで囲まれた領域のテキストがそのまま出力されます。CSVやHTMLファイルとしての体裁を自動的に整えてくれるわけではありません。
  • renderas属性でファイルを変換できます。現状はPDFのみサポートされています。<messaging:attachment>タグで囲まれた領域のテキストやHTML情報をPDFに変換します。
  • 静的リソースからCSSを読み込んでPDFの内容を整形することができます。画像も静的リソースから読み込んでPDFを生成できます。

参考:Adding Attachments