添付ファイル付きのメールを受信して、メールの内容をオブジェクトに保存

目的

salesforceにて、添付ファイル付きのメールを受信して、メールの内容をオブジェクトに保存する

ポイント

  • まずは、Messaging.InboundEmailHandler インターフェースを実装したクラスを作成する必要があります。サンプル・コードを参考にして、クラスを作成してください。
  • 次に、salesforceがメールを受信するアドレスを設定する必要があります。以下のメニューから設定を行います。
    • [設定] > [アプリケーションの設定] > [開発] > [電子メールサービス]
      [新規電子メールサービス]をクリックし、先ほど作成したクラスを[Apexクラス]に設定し、[有効]にチェックを入れて[保存 & 新規電子メールアドレス]ボタンをクリックします。
    • 続いて[保存]ボタンをクリックします。
    • [許可する送信元]に、メール受入元となるメールアドレスまたはドメインを指定します。制限をしない場合には、この項目は空にしておきます。
    • [保存ボタン]をクリックします。
    • メールの取り込み対象となる電子メールアドレスが表示されています。このメールアドレスに直接送付する、もしくは自社メールサーバに届いたメールをこのメールアドレスにリダイレクトすることで、メールの取り込みを行うことができます。

サンプルコード

global class TestHandler implements Messaging.InboundEmailHandler {
  global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope envelope) {
    
    // 受信したメールの内容をTestObject__cに格納
    TestObject__c obj = new TestObject__c();
    obj.title__c = email.subject;
    obj.comment__c = email.plainTextBody;      
    insert obj;
    
    // メールの添付ファイルを、先ほど作成したTestObject__cのレコードに紐付け
    List<Attachment> atts = new List<Attachment>();
    List<Messaging.Inboundemail.Binaryattachment> batts = email.binaryAttachments;
    if (batts != null && batts.size() > 0){
      for (Messaging.Inboundemail.Binaryattachment batt: batts){
        Attachment att = new Attachment();
        // ファイル名を設定
        att.name = batt.fileName;
        // ファイルの内容を設定
        att.Body = batt.body;
        // 紐付け先を設定
        att.ParentId = obj.id;
        atts.add(att);
      }     
      insert atts;
      
    }
    
    // 受信メールの処理が成功したのでresultをsuccessに
    Messaging.InboundEmailResult result = new Messaging.InboundEmailresult();
    result.success = true;
    return result;
  }
}

制限事項