メッセージクラスを使用したカスタムコントローラの作成
Apex Messaging 名前空間を使用するカスタムコントローラには、少なくともメールの件名、本文、および受信者が必要です。また、件名と本文を記入し、メールを配信するためのフォームとして機能するページが必要です。
sendEmailPage という新規ページを作成し、次のコードを使用します。
1<apex:page controller="sendEmail">
2 <apex:messages />
3 <apex:pageBlock title="Send an Email to Your
4 {!account.name} Representatives">
5 <p>Fill out the fields below to test how you might send an email to a user.</p>
6 <br />
7 <apex:dataTable value="{!account.Contacts}" var="contact" border="1">
8 <apex:column >
9 <apex:facet name="header">Name</apex:facet>
10 {!contact.Name}
11 </apex:column>
12 <apex:column >
13 <apex:facet name="header">Email</apex:facet>
14 {!contact.Email}
15 </apex:column>
16 </apex:dataTable>
17
18 <apex:form >
19 <br /><br />
20 <apex:outputLabel value="Subject" for="Subject"/>:<br />
21 <apex:inputText value="{!subject}" id="Subject" maxlength="80"/>
22 <br /><br />
23 <apex:outputLabel value="Body" for="Body"/>:<br />
24 <apex:inputTextarea value="{!body}" id="Body" rows="10" cols="80"/>
25 <br /><br /><br />
26 <apex:commandButton value="Send Email" action="{!send}" />
27 </apex:form>
28 </apex:pageBlock>
29</apex:page>ページマークアップでは、取引先 ID はページの URL から取得されます。この例が正しく機能するためには、Visualforce ページを URL の有効な取引先レコードに関連付ける必要があります。たとえば、001D000000IRt53 が取引先 ID の場合、次の URL を使用します。
レコードの ID の取得についての詳細は、「Visualforce による項目値の表示」を参照してください。
1https://Salesforce_instance/apex/sendEmailPage?id=001D000000IRt53次のコードは、Messaging.SingleEmailMessage クラスを実装する sendEmail というコントローラを作成して、取引先に関連する取引先責任者を受信者として使用します。
1public class sendEmail {
2 public String subject { get; set; }
3 public String body { get; set; }
4
5 private final Account account;
6
7 // Create a constructor that populates the Account object
8 public sendEmail() {
9 account = [select Name, (SELECT Contact.Name, Contact.Email FROM Account.Contacts)
10 from Account where id = :ApexPages.currentPage().getParameters().get('id')];
11 }
12
13 public Account getAccount() {
14 return account;
15 }
16
17 public PageReference send() {
18 // Define the email
19 Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
20
21 String addresses;
22 if (account.Contacts[0].Email != null)
23 {
24 addresses = account.Contacts[0].Email;
25 // Loop through the whole list of contacts and their emails
26 for (Integer i = 1; i < account.Contacts.size(); i++)
27 {
28 if (account.Contacts[i].Email != null)
29 {
30 addresses += ':' + account.Contacts[i].Email;
31 }
32 }
33 }
34
35 String[] toAddresses = addresses.split(':', 0);
36
37 // Sets the paramaters of the email
38 email.setSubject( subject );
39 email.setToAddresses( toAddresses );
40 email.setPlainTextBody( body );
41
42 // Sends the email
43 Messaging.SendEmailResult [] r =
44 Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
45
46 return null;
47 }
48}コントローラでは、次の点に留意してください。
- メールの件名と本文は、別の Visualforce ページで設定され、コントローラに渡されます。
- メールを送信するメソッドは send() と呼ばれます。この名前は、メールを送信する Visualforce ボタンのアクション名と一致する必要があります。
- メールの受信者、つまり、toAddresses[] に保存されているメールアドレスは、関連付けられた取引先で使用可能な取引先責任者のアドレスから作成されます。取引先責任者、リード、またはその他のレコードから受信者のリストをコンパイルするとき、すべてのレコードをループ処理してメールアドレスがレコードごとに定義されているか確認することをお勧めします。取引先 ID がページの URL から取得されます。
sendEmailPage のフォーム例