+ Start a Discussion
yama1173yama1173 

Apexトリガーでのメール送信エラーの起こし方

Apexトリガーでのメール送信時にエラーを起こす方法はありますでしょうか?

(以下のデバックログが正しく表示されることを確認したい)

 

Messaging.SendEmailResult[] mailResults = Messaging.sendEmail(messages);

//メール送信結果更新

 for(Messaging.SendEmailResult result : mailResults)

     if(result.isSuccess()){

       //送信結果更新処理

     }else{

       system.debug('エラーメッセージ' + result.getErrors()[0].getMessage()); ←★意図的にエラーを出し、この処理を確認したい。

     }

   }

 

よろしくお願いします。

Best Answer chosen by Admin (Salesforce Developers) 
Taiki YoshikawaTaiki Yoshikawa
メール送信の処理に対して次のように false をつけてみて下さい。
Messaging.sendEmail(new Messaging.Email[] {mail},false)

これで先ほどの不正なアドレスで実行するとエラー判定の処理を実行できると思います。

All Answers

Taiki YoshikawaTaiki Yoshikawa
送信先のメールアドレスに不正な形式の文字列を指定することでエラーを発生させられないでしょうか。(@の無い文字列など)
yama1173yama1173

ご回答ありがとうございます。

(説明不足ですみません。)

 

送信先にはユーザのTargetObjectIdを指定していますので

ご回答いただいた方法(不正な値を入力する)ができません。

 

ほかに手はないでしょうか?

 

 

Taiki YoshikawaTaiki Yoshikawa
System.debugの動作確認でしたら一時的にユーザIDを指定している所を文字列に差し替えて検証すればいいかなと思いました(^^

あと他の方法ですが件名あたりに255文字?以上の大量の文字をセットして実行したら、もしかするとエラーを発生させられるかもしれません。
yama1173yama1173

ご回答ありがとうございます!

ちょっと試してみます!

yama1173yama1173

試してみました。

っがエラーの結果をもらうことができませんでした。

 

①メール送信先に不正な文字をいれる

  →setToAddressにメールアドレスでない文字列をいれるとセットしたタイミングでエラーとなってしまいました。

   (メール送信のメソッド(sendEmail)を実行する前にシステムエラーで落ちてしまった。

    ので確認したかった条件分岐に到達できていない。)

 

②件名に10000文字を設定する

  →メール送信のメソッド(sendEmail)は正常に実行されました。(trueとなった)

   ただメールログを確認するとメールイベントは:Pとなりメール送信事態はできていないようです。

 

sendEmailでエラーをもらうことはできないのでしょうか?

 

Taiki YoshikawaTaiki Yoshikawa
メール送信の処理に対して次のように false をつけてみて下さい。
Messaging.sendEmail(new Messaging.Email[] {mail},false)

これで先ほどの不正なアドレスで実行するとエラー判定の処理を実行できると思います。
This was selected as the best answer
yama1173yama1173

ご回答ありがとうございます!

試してみます!

Taiki YoshikawaTaiki Yoshikawa

もう大丈夫かもしれませんがサンプルコードです。

これで大体確認できると思います。

 

Class

public with sharing class SendMailController {

    public SendMailController() {
    
    }
    
    public void doSendMail() {
    
        Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
        email.setToAddresses(new String[] { 'adminacme.com' });
        email.setSubject('my subject');
        email.setPlainTextBody('plain text body');
        
        List<Messaging.SendEmailResult> results = 
            Messaging.sendEmail(new Messaging.Email[] { email }, false);
            
        if (!results.get(0).isSuccess()) {
            System.StatusCode statusCode = results.get(0).getErrors()[0].getStatusCode();
            String errorMessage = results.get(0).getErrors()[0].getMessage();
        }    
    } 
}

 Test Class

@isTest
private class SendMailControllerTest {

    static testMethod void SendMailControllerTest() {
    
        Test.startTest();
    
        SendMailController cls = new SendMailController();
        cls.doSendMail();
        
        Test.stopTest();
    }
}

 

yama1173yama1173

サンプルコードまでありがとうございます!

これから試してみます!

 

yama1173yama1173

エラーコード内にはいることができました!ありがとうございました!

Taiki YoshikawaTaiki Yoshikawa
解決して良かったです。
自分も調べてみていろいろ勉強になりました(^^)