Wie sende ich mit drupal_mail E-Mails an mehrere Empfänger?


8

Ich benutze drupal_mail, um E-Mails zu senden.

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

Ich möchte E-Mails an mehrere E-Mail-Adressen gleichzeitig senden. Soll ich das machen?

$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);

Überprüfen Sie diesen Beitrag, dropbucket.org/node/308
Shrish

Hey Tanvir, vielleicht erwäge ich, eine andere Antwort zu akzeptieren. Die derzeit akzeptierte Antwort birgt das Risiko, dass bei der Verarbeitung vieler tausend solcher E-Mails nicht genügend Speicher oder Zeit zur Verfügung steht.
Leymannx

Antworten:


24

Der to-Parameter to drupal_mailist eine Zeichenfolge, kein Array. Sie können jedoch beliebig viele Empfänger in der E-Mail-Zeichenfolge "to" haben, sofern diese durch Kommas getrennt sind.

Gehen Sie wie folgt vor, um dieselbe E-Mail an mehrere Empfänger zu senden:

$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);

Siehe auch API-Dokumentation fürdrupal_mail


Ich sage nur, wenn ich es versuche, $to = 'one@email.com, two@email.com, three@email.com';erhalte ich nur eine E-Mail, aber wenn ich es $to = 'one@email.com,two@email.com,three@email.com';ohne Leerzeichen versuche , habe ich alle E-Mails erhalten!
Michael

1

Verwenden Sie hook_mail , um mehrere Empfänger zu senden, indem Sie Folgendes übergeben:

$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

Laut PHP-Dokument können Sie nur einen Brief über einen Aufruf der Funktion drupal_mail senden. Sie sollten also Cycle verwenden. Beispiel

$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);
}

Eine einfachere Möglichkeit finden Sie in der folgenden Lösung von @FreeRadical.
Brady

Ich habe meine Nachricht aktualisiert, um Verwirrung zu vermeiden. Vielen Dank
Eugene

0

Wenn Sie die Funktionsdokumentation von drupal_mail lesen, wird angezeigt, dass der Parameter '$ to' eine Zeichenfolge akzeptiert, die kein Array in bestimmten Formaten ist, wie z.

  1. user@example.com
  2. user@example.com, anotheruser@example.com
  3. Benutzer
  4. Benutzer, ein anderer Benutzer

So können wir Ihr $ in Array mithilfe der Implode-Funktion problemlos in das erforderliche Format konvertieren. Daher müssen Sie E-Mails auf einmal an mehrere Empfänger senden. Hier ist der Code:

$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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.