Wie der Titel erklärt, enthält die E-Mail beim Senden einer HTML-E-Mail mit drupal_mail () keine HTML-Tags.
$module = 'module';
$key = 'contact_message';
$language = language_default();
$params = array();
$email = '[email protected]';
$from = variable_get('site_mail', '[email protected]');
$send = TRUE;
$message = drupal_mail($module, $key, $email, $language, $params, $from, $send);
$message['headers']['Content-Type'] = 'text/html; charset=UTF-8';
$message['subject'] = 'Test';
$message['body'] = array();
$message['body'][] = '<a href="#">Testing anchor in mail</a>';
$system = drupal_mail_system($module, $key);
$message = $system->format($message);
$message['result'] = $system->mail($message);
Und wenn Sie die E-Mail empfangen und die Quelle anzeigen:
Message-Id: <201305090722.r497MLAV005654@test.server>
X-Authentication-Warning: testserver : www-data set sender to sender@email.com using -f
To: from@email.com
Subject: Test
X-PHP-Originating-Script: 1000:system.mail.inc
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8Bit
X-Mailer: Drupal
Sender: sender@email.com
From: from@email.com
Testing anchor in mail [1]
[1] #
So können Sie sehen, dass alle HTML-Tags entfernt wurden. Und es spielt keine Rolle, welche HTML-Tags ich in den Body eingefügt habe.
Ich dachte, es könnte mit Text-Formaten zusammenhängen, aber ich habe aktive Filter "Gefiltertes HTML" und "Volles HTML" mit allen Berechtigungen.
Das, was mich verwirrte, waren die Ubercart-Rechnungen. Zuerst wurden sie mit HTML gesendet, und dann hörte es irgendwann auf. Sie erhielten Klartext. Nachdem ich ein bisschen @develkar Antwort gegraben habe, habe ich dies in einem der Ubercart-Updates gefunden:
/**
* Installs HTML Mail System for Ubercart.
*/
function uc_store_update_7004() {
// Set mail handler for all Ubercart modules
variable_set('mail_system',
array_merge(
variable_get('mail_system', array('default-system' => 'DefaultMailSystem')),
array(
'uc_cart' => 'UbercartMailSystem',
'uc_order' => 'UbercartMailSystem',
'uc_file' => 'UbercartMailSystem',
'uc_roles' => 'UbercartMailSystem',
'uc_stock' => 'UbercartMailSystem',
'uc_store' => 'UbercartMailSystem',
)
)
);
}
Ich vermute, dass irgendwann eines der installierten Module (ich vermute das SMTP-Modul) diese Variable überschrieben hat, und deshalb kamen E-Mails als einfacher Text. Nachdem Sie dieses Update erneut manuell ausgeführt haben, sind Ubercat-Rechnungen wieder HTML-Rechnungen.
Für den Rest der E-Mails muss ich einige Module installieren, wie in anderen Antworten vorgeschlagen.
Danke.
drupal_mail_sytem()
.In hook_mail können Sie die Header auch als text / html definieren. Anschließend erhalten Sie Mail als HTML-Format, wie zum Beispiel:
quelle
Probieren Sie es mit installiertem und konfiguriertem HTML Mail- Modul aus.
quelle
Es spielt keine Rolle, wie der Header-Inhaltstyp lautet. Das Standard-Mail-System von Drupal konvertiert HTML in einfachen Text. Siehe DefaultMailSystem :: format () in mail.inc
}}
Um HTML im Nachrichtentext zu senden, müssen Sie:
Teilen Sie Drupal mit, dass Sie Ihre benutzerdefinierte Mail-Systemklasse verwenden möchten
variable_set('mail_system', array('default-system' => 'ExampleMailSystem'));
Setzen Sie den Content-Type-Header von "text / plain" auf "html / plain".
$message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
In dieser Dokumentation zu do wird die Lösung gut beschrieben und ein Beispiel bereitgestellt.
https://www.drupal.org/docs/7/converting-drupal-6-modules-to-drupal-7/creating-html-formatted-emails-in-drupal-7#comment-11792179
quelle