module里实现HTML mail
drupal默认不能发出HTML,是因为default mail system里会过滤HTML代码,所以需要把它替换掉。
先安装htmlmail与mailsystem,在mailsystem的设置替换default mail system为html mail,此后发出的邮件都能支持HTML。// 给邮件提供额外的tokenfunction example_mail_tokens(&$replacements, $data, $options) { if (isset($data['user'])) { $replacements['[custom:text]'] = 'custom content'; }} // 实现hook_mail,从variable得到邮件模板,以$key为邮件代号,并支持HTMLfunction 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个字符,超出会出现!号 }}