web-dev-qa-db-ja.com

送信手順の途中でメールの送信を中止することはできますか?

メール送信は、サードパーティのモジュールの奥深くで開始されます。介入する必要があり、環境変数によっては、それを通過させるか、防止する場合があります。それ、どうやったら出来るの?

$message['to']+に設定する奇妙なテクニックを実際に見たことがあります(ちなみに、この背後にあるロジックは何ですか?)。ただし、これによりサーバーログにエラーが発生します。

何か案は?

2
jayarjo

hook_mail_alter() のドキュメントで報告されているように、_$message['send']_をFALSEに設定すると、メッセージが送信されないようにすることができます。

パラメーター

  • _$message_:メッセージデータを含む配列。この配列のキーは次のとおりです。

    • 'id':メッセージのdrupal_mail()id。モジュールのソースコードまたはdrupal_mail()で可能なID値を確認してください。
    • 'to':メッセージの送信先の1つまたは複数のアドレス。この文字列のフォーマットは、PHP電子メール検証フィルターで検証されます。
    • 'from':メッセージの送信元としてマークされるアドレス。カスタムアドレスまたはサイト全体のデフォルトの電子メールアドレスのいずれかです。
    • 'subject':送信するメールの件名。これには改行文字を含めることはできません。含まない場合、電子メールが正しく送信されない可能性があります。
    • 'body':メッセージテキストを含む文字列の配列。メッセージ本文は、「\ n\n」を区切り文字として使用して、個々の配列文字列を単一のテキスト文字列に連結することによって作成されます。
    • 'headers':From、Sender、MIME-Version、Content-Typeなどのメールヘッダーを含む連想配列。
    • 'params':drupal_mail()が呼び出される前にメッセージを作成するために使用される、hook_mail_alter()の呼び出し元によって提供されるオプションのパラメーターの配列。
    • 'language':hook_mail_alter()が呼び出される前にメッセージを作成するために使用される言語オブジェクト。
    • 'send':この電子メールメッセージの送信を中止するには、FALSEに設定します

少なくとも、コードは、モジュールの短い名前とモジュールからのメッセージに割り当てられたキーを連結した_$message['id']_の値をチェックする必要があります。

_function mymodule_mail_alter(&$message) {
  if ($message['id'] == 'modulename_messagekey') {

    // Verify other conditions are true.

    $message['send'] = FALSE;
  }
}
_
2
kiamlaluno

これはあなたが必要とすることをするはずです:

function hook_mail_alter(&$message){

    // Some logic here to test if you want to abort the mail
    $message['send'] = false;
}
0