module裡實現HTML mail
drupal預設不能發出HTML,是因為default mail system裡會過濾HTML程式碼,所以需要把它替換掉。
先安裝htmlmail與mailsystem,在mailsystem的設定替換default mail system為html mail,此後發出的郵件都能支援HTML。
// 給郵件提供額外的token
function example_mail_tokens(&$replacements, $data, $options) {
if (isset($data['user'])) {
$replacements['[custom:text]'] = 'custom content';
}
}
// 實現hook_mail,從variable得到郵件模板,以$key為郵件代號,並支援HTML
function example_mail($key, &$message, $params) {
$subject = variable_get('example_emails_'.$key.'_subject', 'please set subject');
// 支援token
$subject = token_replace($subject, $params, array('language' => language_default(), 'callback' => 'example_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE));
$body = variable_get('example_emails_'.$key.'_body', 'please set body');
$body = token_replace($body, $params, array('language' => language_default(), 'callback' => 'example_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE));
$message['subject'] = $subject;
$message['body'][] = $body;
$message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
}
// 傳送郵件
if(Infinity\Mail::sendTo('example', 'user_create_pending', $account->mail, array('user' => $account))) {
// true
}
SMTP
drupal7預設的郵件傳送方式為mail function,需要想使用SMTP,可以安裝SMTP module來實現。而且SMTP module允許支援HTML的選項,所以可以不必與htmlmail共用也可以實現HTML實現傳送功能。
其它郵件支援HTML
function example_mail_alter(&$message) {
if ($message['id'] == 'example_messagekey') {
$message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
$message['body'][] = wordwrap($body, 900, "\n"); // 郵件一行最長998個字元,超出會出現!號
}
}