In Drupal 7 la gestione mail è flessibile, ma anche un tantino complicata. Sotto una sistema per semplificare l'invio di mail, con alcune features:
Questo il codice da inserire in un vostro modulo (oppure dentro settings.php):
function drupal_mail_send(&$message, $params) { $message['subject'] = $params['subject']; $message['body'][] = $params['body']; if (!empty($params['headers'])) $message['headers'] = $params['headers'] + $message['headers']; //dprint($message); if (strpos($message['headers']['Content-Type'], 'text/html') !== FALSE) { global $conf; $conf['mail_system'] = array( 'default-system' => 'DefaultMailSystem', $message['id'] => 'CommonHtmlMailSystem', ); } } class CommonHtmlMailSystem implements MailSystemInterface { public function format(array $message) { $message['body'] = implode("\n\n", $message['body']); return $message; } public function mail(array $message) { $mimeheaders = array(); foreach ($message['headers'] as $name => $value) { $mimeheaders[] = $name . ': ' . mime_header_encode($value); } $line_endings = variable_get('mail_line_endings', MAIL_LINE_ENDINGS); return mail( $message['to'], mime_header_encode($message['subject']), // Note: e-mail uses CRLF for line-endings. PHP's API requires LF // on Unix and CRLF on Windows. Drupal automatically guesses the // line-ending format appropriate for your system. If you need to // override this, adjust $conf['mail_line_endings'] in settings.php. preg_replace('@\r?\n@', $line_endings, $message['body']), // For headers, PHP's API suggests that we use CRLF normally, // but some MTAs incorrectly replace LF with CRLF. See #234403. join("\n", $mimeheaders) ); } }
Per inviare una mail è sufficiente usare questo codice all'interno di un vostro modulo:
... $mail_options = array( 'subject' => '...', 'body' => '...', 'headers' => array (...) ); drupal_mail('MODULE', 'KEY', $target_email, user_preferred_language($target_user), $mail_options, $from, true); ... function MODULE_mail($key, &$message, $params) { switch ($key) { case 'KEY': drupal_mail_send($message, $params); } }
Se il vostro modulo non ha particolari esigenze potete anche semplificare l'hook e la chiamata a drupal_mail:
drupal_mail('MODULE', '', $target_email, user_preferred_language($target_user), $mail_options, $from, true); ... function MODULE_mail($key, &$message, $params) { drupal_mail_send($message, $params); }
Aggiungi un commento