タイトルが説明するように、drupal_mail()を使用してHTMLメールを送信すると、メールにはHTMLタグがありません。
$module = 'module';
$key = 'contact_message';
$language = language_default();
$params = array();
$email = 'sender@email.com';
$from = variable_get('site_mail', 'admin@example.com');
$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);
そして、電子メールを受信し、ソースを表示するとき:
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] #
これで、HTMLタグが取り除かれていることがわかります。また、本文に挿入するHTMLタグは関係ありません。
Text Fomatsに関連しているのではないかと思ったのですが、「Filtered HTML」と「Full HTML」のアクティブなフィルターがあり、あらゆる権限が与えられています。
私を混乱させたのは、Ubercartの請求書でした。最初はHTMLで送信されましたが、ある時点で停止しました。彼らは平文を受け取った。@develkarの回答を少し掘り下げた後、私はこれをubercartの更新の1つで見つけました:
/**
* 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',
)
)
);
}
ある時点で、インストールされたモジュールの1つ(SMTPモジュールと思われる)がこの変数をオーバーライドしたと思います。そのため、メールはプレーンテキストで送信されていました。この更新を手動で再度実行すると、Ubercatの請求書は再びHTMLになります。
残りのメールについては、他の回答で提案されているように、いくつかのモジュールをインストールする必要があります。
ありがとう。