drupal_mailを使用して複数の受信者にメールを送信する方法


8

drupal_mailを使用してメールを送信しています。

$to = 'email@email.com';
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

一度に複数のメールアドレスにメールを送信したい。私はこれを行うべきですか?

$to  = array('one@email.com', 'two@email.com', 'three@email.com',);
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

この投稿をチェックしてください、dropbucket.org
node

タンビルさん、別の答えを受け入れることを検討してください。現在受け入れられている回答は、そのような何千もの電子メールを処理するときに、メモリまたは時間制限が不足するリスクを伴います。
leymannx

回答:


24

toパラメータへ drupal_mailは、配列ではなく文字列です。ただし、コンマで区切られている場合は、電子メールの "to"文字列に任意の数の受信者を含めることができます。

したがって、同じメールを複数の受信者に送信するには、次のようにします。

$to  = 'one@email.com,two@email.com,three@email.com';
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

SeのAPIドキュメントdrupal_mail


試してみる$to = 'one@email.com, two@email.com, three@email.com';と1通のメールしか届か$to = 'one@email.com,two@email.com,three@email.com';ないが、スペースを入れずに試すとすべてのメールが届くと言っているだけです。
マイケル

1

以下を渡して、hook_mailを使用して複数の受信者を送信します。

$params = array();
$params['cc'][] = 'abc@ex.org'
drupal_mail('$module_name', 'custom_key', $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);


//hook will be the module name

function hook_mail($key,&$message,$params) {

  if ($key == 'custom_key') {
    $message['headers']['cc'] = $params['cc'];
    //.
    //.
    //.
    //.
  }    
}

1

PHP docによると、関数drupal_mailの1回の呼び出しで送信できる文字は1つだけです。したがって、サイクルを使用する必要があります。例

$to  = array('one@email.com', 'two@email.com', 'three@email.com',);
foreach ($to as $email) {
  drupal_mail('$module_name', $key, $email, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
}

これを行う簡単な方法については、@ FreeRadicalの以下の解決策を参照してください。
Brady

混乱を避けるためにメッセージを更新しました。ありがとう
ユージーン

0

drupal_mail関数のドキュメントを読むと、 '$ to' paramが次のような特定の形式の配列ではなく文字列を受け入れることがわかります。

  1. user@example.com
  2. user @ example.com、anotheruser @ example.com
  3. ユーザー
  4. ユーザー、別のユーザー

したがって、$ to配列は、関数implodeを使用して必要な形式に簡単に変換できるため、一度に複数の受信者に電子メールを送信する必要があります。コードは次のとおりです。

$to  = array('one@email.com', 'two@email.com', 'three@email.com',);

//To change array('one@email.com', 'two@email.com', 'three@email.com',)  -> 'one@email.com, two@email.com, three@email.com' use implode

$to_str = implode(",", $to);

drupal_mail('$module_name', $key, $to_str, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.