drupal7 mail

weixin_33806914發表於2016-08-01

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個字元,超出會出現!號
  }
}

相關文章