public function PostmarkMailSystem::mail in Postmark 7
Send the e-mail message.
Parameters
$message: A message array, as described in hook_mail_alter().
Return value
TRUE if the mail was successfully accepted, otherwise FALSE.
Overrides MailSystemInterface::mail
See also
File
- ./
postmark.mail.inc, line 60 - Implements postmark support on behalf of Drupal core.
Class
- PostmarkMailSystem
- Modify the drupal mail system to use smtp when sending emails. Include the option to choose between plain text or HTML
Code
public function mail(array $message) {
$postmarkApiKey = variable_get('postmark_api_key', '');
$postmark_mail = variable_get('postmark_library_version') == '0.4.5' ? new Mail_Postmark() : new Postmark\Mail($postmarkApiKey);
// Parse 'From' e-mail address.
$address = postmark_parse_address($message['from']);
$sender = $address[0]['mail'];
$name = $address[0]['name'];
$from = variable_get('site_mail', ini_get('sendmail_from'));
$postmark_mail
->from($from);
$postmark_mail
->subject($message['subject']);
// Handle reply to and from name
if ($sender != $from) {
// replacing sender, move to reply-to, replacing original reply-to
$postmark_mail
->replyTo($sender, $name == '' ? NULL : $name);
unset($message['headers']['Reply-To']);
}
else {
// using original sender, set from name
if ($name != '') {
$postmark_mail
->fromName($name);
}
}
// Prepare sender name for inclusion in email footer
$fullsender = $sender;
if ($name != '') {
$fullsender = $name . ' [' . $sender . ']';
}
// Handle custom headers
foreach ($message['headers'] as $name => $value) {
if ($name == 'Reply-To') {
$reply_to = postmark_parse_address($message['headers']['Reply-To']);
$postmark_mail
->replyTo($reply_to[0]['mail'], $reply_to[0]['name']);
}
// @todo support other custom headers
}
// Set up our debugging mode vars
$debug_mode = variable_get('postmark_debug_mode', 0);
$debug_email = variable_get('postmark_debug_email', '');
if (!$debug_mode) {
// Set recipients.
foreach (postmark_parse_address($message['to']) as $id => $address) {
// For the first email set as initial 'To'
if ($id == 0) {
$postmark_mail
->to($address['mail'], $address['name']);
}
else {
$postmark_mail
->addTo($address['mail'], $address['name']);
}
}
}
else {
// Reroute to debug e-mail address.
if ($debug_email != '') {
drupal_set_message(t('Debugging email used @email', array(
'@email' => $debug_email,
)), 'warning');
$postmark_mail
->to($debug_email);
}
}
// Check the header content type to see if email is plain text
// if not we send as HTML
if (strpos($message['headers']['Content-Type'], 'text/plain') !== FALSE) {
if ($sender != $from) {
$message['body'] .= "\r\n\r\n";
$message['body'] .= t('Message sent by') . ":\r\n";
$message['body'] .= $fullsender;
}
$postmark_mail
->messagePlain($message['body']);
}
else {
if ($sender != $from) {
$message['body'] .= "<p>" . t('Message sent by') . ":<br />" . $fullsender . "</p>";
}
$postmark_mail
->messageHtml($message['body']);
}
// If debug mode is on, output the message
if ($debug_mode) {
drupal_set_message('Message array: <pre>' . print_r($message, TRUE) . '</pre>', 'warning');
}
// If the debug option of not sending a credit, i.e.
// for testing, is switched on just return TRUE,
// otherwise send the email via Postmark
if (variable_get('postmark_debug_no_send', 0)) {
drupal_set_message('Email successfully tested, no email has been sent (no credits used)', 'warning');
return TRUE;
}
else {
try {
if (!($result = $postmark_mail
->send())) {
watchdog('postmark', "Mail sending error: {$postmark_mail->ErrorInfo}", NULL, WATCHDOG_ERROR);
}
} catch (Exception $e) {
watchdog('postmark', 'Exception message: ' . $e
->getMessage(), NULL, WATCHDOG_ERROR);
drupal_set_message('Mail sending error: ' . $e
->getMessage(), 'error');
// If debugging is on let's put the whole exception into watchdog
// to enable closer inspection
if ($debug_mode) {
watchdog('postmark', 'Exception caught: <pre>' . print_r($e, TRUE) . '</pre>', NULL, WATCHDOG_ERROR);
}
}
}
return $result;
}