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个字符,超出会出现!号
  }
}

猫之良品
2.5k 声望139 粉丝

资深Drupal, magento与Joomla


引用和评论

0 条评论