drupal Mail cc übergeben
am 15.03.2011 - 01:41 Uhr in
Hallo,
hat jemand nen plan von der Mail Klasse von Drupal? Vorallem in der Drupal Version 6
Also wenn ja
Ich möchte nicht nur an eine Email Adresse senden sondern auch cc and weiter Email Adressen,
das ganze ist leider nicht mehr so einfach möglich weil ja in der Drupal 6 der Parameter $headers entfernt wurde, und statt dessen $params jetzt nur noch vorhanden ist.
Ich wollte jetzt via
<?php
$headers['cc'] = email@email.de;
$params['headers'] = $headers;
?>
versucht zu lösen, nur leider klappt das nicht. Der nächste ansatz den ich im Web gefunden habe, ist via $to das zu lösen, nur ich möchte das ganze ja auf bcc haben und nicht an diese email Adressen.
Dafür hat einer geschrieben $to['headers']['cc'] = email@email.de;
Nur das klappt natürlich auch nicht und ist meiner Meinung nach auch falsch, da in der $to ein string erwartet wird und kein Array.
Ich hoffe es hat irgend jemand einen Plan was ich falsch mache, ich verzweifle an drupal schön langsam
Mit freundlichen Grüßen
Michael Hagl
- Anmelden oder Registrieren um Kommentare zu schreiben
drupal_mail
am 15.03.2011 - 07:53 Uhr
Hallo.
das ganze ist leider nicht mehr so einfach möglich weil ja in der Drupal 6 der Parameter $headers entfernt wurde, und statt dessen $params jetzt nur noch vorhanden ist.
Schau Dir mal die Dokumentation der Funktion [api:drupal_mail:6] an. Dort ist in einem Beispiel erklärt, dass die Header jetzt Teil der eigentlichen Nachricht (
$message
) sind.Da man die Header jedoch nicht mehr direkt übergeben kann, muss man hier auf ein eigenes Modul und [api:hook_mail_alter:6] zurückgreifen.
Beispiel: http://civicactions.com/blog/2009/oct/10/modifying_your_sites_email_header
Für Deinen konkreten Fall würde dies also in etwa so aussehen (in einem Modul "carboncopy"):
<?php
/**
* Adds bcc to emails.
*/
function carboncopy_mail_alter(&$message) {
if ($message['id'] == 'modulename_messagekey') {
// Get default BCC mail from variable and set header.
$message['headers']['bcc'] = variable_get('carboncopy_bcc', 'info@example.com');
}
}
?>
Damit setzt Du den BCC-Header für alle Mails mit der ID "modulename_messagekey".
hth,
Stefan
Hallo, danke für deine
am 15.03.2011 - 09:43 Uhr
Hallo,
danke für deine schnelle Antwort.
Das war genau das was ich gebraucht habe;). Nur, jetzt kann ich die zwar auf cc oder bcc setzen, aber Mails werden trotzdem nur an den Empfänger gesendet.
Ich hab als test mal die Email Adresse auf CC gesetzt, wenn ich jetzt die Mail bekomme steht die 2. Email Adresse auf CC aber unter dieser Email Adresse bekomme ich keine Emails:(
<?php
function xxxx_messaging_mail($key, &$message, $params) {
$headers = array(
'MIME-Version' => '1.0',
'Content-Type' => 'text/html; charset=UTF-8; format=flowed',
'Content-Transfer-Encoding' => '8Bit',
'X-Mailer' => 'Drupal'
);
foreach ($headers as $key => $value) {
$message['headers'][$key] = $value;
}
$message['headers']['bcc'] = variable_get('carboncopy_bcc', 'halpha1990@googlemail.com');
$language = $message['language'];
$variables = xxxxx_messaging_mail_tokens($params['account'], $language);
$message['subject'] = str_replace(array("\r", "\n"), '', $params['subject']);
$message['body'] = t($params['body'], $variables, $language->language);
}
?>
Mache ich da jetzt irgendetwas falsch?
Zur info ich hab jetzt 2 Funktionen, die 1.
<?php
function xxxx_messaging_email($uid, $params = array()){
//$uid could be both array of uids or single uid
if (is_numeric($uid)){
$uid = array($uid);
} elseif(!is_array($uid)) {
return false;
}
foreach ($uid as $account_id) {
// Define $params account, this is the current user
$params['account'] = user_load($account_id);
// Get the the e-mail adress from the current user
$to = $params['account']->mail;
// Define the language
$language = user_preferred_language($GLOBALS['user']);
// Send mail
drupal_mail(
xxxx_MESSAGING_MODULE,
'mail',
$to,
$language,
$params
);
}
}
?>
Die 2. ist die obere;). Dürfte eigentlich auch passen. Die Email wird durch die email function gesendet und dann mit der hook function mail bearbeitet.
Lg
Michael
bcc
am 15.03.2011 - 09:52 Uhr
Hallo.
Also wenn die 2. Adresse als BCC in der Mail steht, die bei Adresse 1 empfangen wurde, funktioniert auf der Seite von Drupal alles korrekt.
Wenn die Mail bei Adresse 2 nicht ankommt, vermute ich da eher ein Problem mit dem Email-Server. Hast Du Zugriff auf die entsprechenden log-Dateien?
Stefan
Naja ich habe 10 Email
am 15.03.2011 - 10:02 Uhr
Naja ich habe 10 Email Adressen und habe Empfänger und CC immer ausgetauscht und jedes mal hab ich mit $to die Email bekommen aber wenn ich die gleiche Email Adresse dann für CC verwendet habe, kam nix an.
Dann kann es ja kaum am Server liegen, würde ich vermuten.
LG
Log
am 15.03.2011 - 10:18 Uhr
Lass Dir mal in [api:drupal_mail_send:6] die komplette Nachricht und die Variable
$mimeheaders
ausgeben.Wichtig ist auch, dass Du "Cc" bzw. "Bcc" verwendest.
Zusätzlich kannst Du Dir noch eine PHP-Datei erstellen, die mail() direkt aufruft (ohne Drupal). In Beispiel #4 wird gezeigt, wie die Header aussehen müssen.
Stefan
So jetzt pass auf, das ist
am 15.03.2011 - 10:50 Uhr
So jetzt pass auf, das ist interessant :D
Also die funktion drupal_mail_send()
<?php
function drupal_mail_send($message) {
//echo '<pre>'.print_r($message, true).'</pre>';
// Allow for a custom mail backend.
if (variable_get('smtp_library', '') && file_exists(variable_get('smtp_library', ''))) {
include_once './'. variable_get('smtp_library', '');
return drupal_mail_wrapper($message);
}
else {
$mimeheaders = array();
foreach ($message['headers'] as $name => $value) {
$mimeheaders[] = $name .': '. mime_header_encode($value);
}
echo '<pre>'.print_r($mimeheaders, true).'</pre>';
return mail(
$message['to'],
mime_header_encode($message['subject']),
// Note: e-mail uses CRLF for line-endings, but PHP's API requires LF.
// They will appear correctly in the actual e-mail that is sent.
str_replace("\r", '', $message['body']),
// For headers, PHP's API suggests that we use CRLF normally,
// but some MTAs incorrecly replace LF with CRLF. See #234403.
join("\n", $mimeheaders)
);
}
}
?>
Die mimeheaders werden schon mal gar nicht gesetzt, weil die if true ist. Ich hab dann mal probiert die if auszukomentieren und nur die else auszugeben, dann hab ich in den mimeheaders als Header drin die ich brauche, natürlich auch cc.
<?php
Array
(
[0] => MIME-Version: 1.0
[1] => Content-Type: text/html; charset=UTF-8; format=flowed
[2] => Content-Transfer-Encoding: 8Bit
[3] => X-Mailer: Drupal
[4] => Errors-To: info@xx.de
[5] => Return-Path: info@xx.de
[6] => Sender: info@xx.de
[7] => From: info@xx.de
[8] => Cc: xx@email.de
)
?>
Ansonst sind aber auch in der $message die Header eigentlich schön gesetzt,
<?php
[headers] => Array
(
[MIME-Version] => 1.0
[Content-Type] => text/html; charset=UTF-8; format=flowed
[Content-Transfer-Encoding] => 8Bit
[X-Mailer] => Drupal
[Errors-To] => info@xx.de
[Return-Path] => info@xx.de
[Sender] => info@xx.de
[From] => info@xx.de
[Cc] => michael.hagl@xxx.de
)
?>
Die mail() werd ich jetzt dann mal erstellen;) hast eine Idee was hier falsch sein könnte?
smtp
am 15.03.2011 - 11:02 Uhr
Die mimeheaders werden schon mal gar nicht gesetzt, weil die if true ist. ... hast eine Idee was hier falsch sein könnte?
Es ist nichts falsch. Auf Deinem Server wird eine SMTP-Bibliothek anstelle von
mail()
verwendet.Schau mal, welches Modul die Funktion
drupal_mail_wrapper()
definiert.Jup hab ich mittlerweile auch
am 15.03.2011 - 11:09 Uhr
Jup hab ich mittlerweile auch rausgefunden;)
Also die function drupal_mail_wrapper($message) gibt es bei mir 2 mal:
1. Im phpmail.module
<?php
if (strpos(variable_get('smtp_library', ''), 'phpmailer') && !function_exists('drupal_mail_wrapper')) {
/**
* Implementation of drupal_mail_wrapper().
*/
function drupal_mail_wrapper($message) {
module_load_include('inc', 'phpmailer', 'includes/phpmailer.drupal');
return phpmailer_send($message);
}
}
?>
2. Im smtp.module
<?php
if (!strpos(variable_get('smtp_library', ''), 'mimemail') &&
!function_exists('drupal_mail_wrapper') ) {
function drupal_mail_wrapper($message) {
return smtp_drupal_mail_wrapper($message);
}
}
?>
Normalerweise müsste der PHP Mailer auch benutzt werden, da ich von dem die Benutzer Daten und auch den Absender im Admin Bereich einstellen kann.
PhpMailer
am 20.04.2011 - 17:52 Uhr
Ich hab denselben Fehler gehabt und unglaublich lange im Code und im Internet gesucht, das Problem aber lösen können. Es liegt daran, dass im PhpMailer-Modul "BCC" und "CC" stehen statt "Bcc" und "Cc", was nach RFC richtig wäre und was Drupal erwartet. Die entsprechenden Zeilen musst du per Hand ändern oder den Patch applyen:
http://drupal.org/node/927646
Grüße,
OneExtra