salesforceでメールを受け取って、そのメールアドレスでリードを作る方法と、
エラーで返信するときの方法。
apex
メールサービスを作成する際にapexクラスを指定するので、先に作成しておきます。
例えば今回は、送信元のメールアドレスを使用してリードを作成するとします。
また、すでに登録されているメールアドレスの場合、エラーメールを返信するとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| global class MailCreateLead implements Messaging.InboundEmailHandler {
global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope envelope) {
Messaging.InboundEmailResult result = new Messaging.InboundEmailresult();
//メールが重複しているかどうかをチェック
String mail_str = email.fromAddress;
List<Lead> check = [SELECT id FROM Lead WHERE Email=:mail_str LIMIT 1];
if(check.size() != 0){
result.message = '送信されたメールアドレスはすでに登録済です。';
result.success = false;
}else{
Lead l = new Lead();
l.Company = '-'; //(必須)
l.LastName = (email.fromName == null) ? 'メール会員' : email.fromName;
l.Email = email.fromAddress;
insert l;
result.success = true;
}
return result;
}
}
|
Messaging.InboundEmailResult
を返却するが、success
がfalseの場合は、
受信を拒否し、設定されたエラーメッセージ(message
)を送信元のメールアドレスに返す。
この時返信されるメールは、noreply@salesforce.com
となっており、これは変更できないっぽい。
重複していない場合は、送信元のメールアドレスと名前(あれば)を使用してリードを作っている。
テストコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| @isTest
public class MailCreateLead_Test {
//正常時
private static testMethod void execute_success() {
Test.startTest();
Messaging.InboundEmail email = new Messaging.InboundEmail() ;
Messaging.InboundEnvelope env = new Messaging.InboundEnvelope();
email.subject = 'Test Success';
email.fromname = 'FirstName LastName';
email.fromAddress = 'someaddress@email.com';
email.plainTextBody = '';
MailServiceToCreateLead emailService = new MailServiceToCreateLead();
Messaging.InboundEmailResult res = emailService.handleInboundEmail(email, env);
Test.stopTest();
}
//エラー時
private static testMethod void execute_fail(){
//重複チェック
Lead le = new Lead();
le.Company = '-';
le.LastName = 'failed test';
le.Email = 'test@test.com';
Insert le;
Test.startTest();
Messaging.InboundEmail email = new Messaging.InboundEmail() ;
Messaging.InboundEnvelope env = new Messaging.InboundEnvelope();
email.subject = 'Test Failed';
email.fromname = 'FirstName LastName';
email.fromAddress = 'test@test.com'; //上記メールアドレスと被せる
email.plainTextBody = '';
MailServiceToCreateLead emailService = new MailServiceToCreateLead();
Messaging.InboundEmailResult res = emailService.handleInboundEmail(email, env);
Test.stopTest();
}
}
|
メールサービス
設定 > 開発 > メールサービス
から作成します。
設定内容は、サービス名と、先程作成したapexクラスを指定してやるくらいです。
作成後、ユニークなメールアドレスが割り当てられるので、
そのアドレス宛てに送信するとメールサービスが起動します。
参考
InboundEmail オブジェクトの使用
An Introduction To Email Services on Force.com – developer.force.com
SFDC:Messaging.InboundEmailHandlerについて – tyoshikawa1106のブログ