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

8

Ich benutze drupal_mail, um E-Mails zu senden.

$to = '[email protected]';
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('[email protected]', '[email protected]', '[email protected]',);
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
Tanvir Ahmad
quelle
Ü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  = '[email protected],[email protected],[email protected]';
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

Siehe auch API-Dokumentation fürdrupal_mail

Freie Radikale
quelle
Ich sage nur, wenn ich es versuche, $to = '[email protected], [email protected], [email protected]';erhalte ich nur eine E-Mail, aber wenn ich es $to = '[email protected],[email protected],[email protected]';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'][] = '[email protected]'
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'];
    //.
    //.
    //.
    //.
  }    
}
Harshal
quelle
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('[email protected]', '[email protected]', '[email protected]',);
foreach ($to as $email) {
  drupal_mail('$module_name', $key, $email, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
}
Eugene
quelle
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. [email protected]
  2. [email protected], [email protected]
  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('[email protected]', '[email protected]', '[email protected]',);

//To change array('[email protected]', '[email protected]', '[email protected]',)  -> '[email protected], [email protected], [email protected]' use implode

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

drupal_mail('$module_name', $key, $to_str, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
Karan
quelle