From 8940f930a1d55872c7f2c9941af5b42ac73cd9a8 Mon Sep 17 00:00:00 2001 From: Aleksei Miheev Date: Sat, 17 May 2014 20:52:39 +0000 Subject: [PATCH] Replace ugly vanilla sendmail() function with swiftmailer-based --- forum/Sources/Subs-Post.php | 70 +++++++++---------------------------- 1 file changed, 16 insertions(+), 54 deletions(-) diff --git a/forum/Sources/Subs-Post.php b/forum/Sources/Subs-Post.php index 0f6405e..36f050c 100644 --- a/forum/Sources/Subs-Post.php +++ b/forum/Sources/Subs-Post.php @@ -328,65 +328,27 @@ function sendmail($to, $subject, $message, $from = null, $send_html = false) { global $webmaster_email, $context, $modSettings, $txt, $scripturl; - // So far so good. - $mail_result = true; + $reply_to = $from !== null ? $from : null; + $from = array( + $webmaster_email => $from !== null ? $from : $context['forum_name'] + ); - // If the recipient list isn't an array, make it one. - $to_array = is_array($to) ? $to : array($to); + require_once '/var/www/lib/swiftmailer/lib/swift_required.php'; - // Get rid of slashes and entities. - $subject = un_htmlspecialchars(stripslashes($subject)); - // Make the message use \r\n's only. - $message = str_replace(array("\r", "\n"), array('', "\r\n"), stripslashes($message)); + $transport = Swift_MailTransport::newInstance(); + $mailer = Swift_Mailer::newInstance($transport); - // Construct the mail headers... - $headers = 'From: "' . addcslashes($from !== null ? $from : $context['forum_name'], '<>[]()\'\\"') . '" <' . $webmaster_email . ">\r\n"; - $headers .= $from !== null ? 'Reply-To: <' . $from . ">\r\n" : ''; - $headers .= 'Return-Path: ' . $webmaster_email . "\r\n"; - $headers .= 'Date: ' . gmdate('D, d M Y H:i:s') . ' +0000' . "\r\n"; + $email = Swift_Message::newInstance($subject) + ->setFrom($from) + ->setTo($to) + ->setBcc('aleksei+root@miheev.info') + ->setReturnPath($webmaster_email) + ->setBody($message); - // Sending HTML? Let's plop in some basic stuff, then. - if ($send_html) - $headers .= 'Content-Type: text/html; charset=' . $txt['lang_character_set']; - // Text is good too. - else - $headers .= 'Content-Type: text/plain; charset=' . $txt['lang_character_set']; + if ($reply_to !== null) + $email->setReplyTo($reply_to); -# // MIME encode the subject - this is tricksy. -# for ($i = 0; $i < strlen($subject); $i++) -# if (ord($subject{$i}) > 128 || $subject{$i} == '=' || $subject{$i} == '?' || $subject{$i} == '_') -# { -# // Add on to the string whenever we find a special character. -# $subject = substr($subject, 0, $i) . '=' . strtoupper(dechex(ord($subject{$i}))) . substr($subject, $i + 1); -# $i18n_char = true; -# } - - mb_internal_encoding('UTF-8'); - // We don't need to mess with the subject line if no special characters were in it.. - if (!empty($i18n_char)) - $subject = mb_encode_mimeheader($subject, $txt['lang_character_set'],'Q'); - - // SMTP or sendmail? - if ($modSettings['mail_type'] == 'sendmail') - { - //$subject = strtr($subject, array("\r" => '', "\n" => '')); - $message = strtr($message, array("\r" => '')); - $headers = strtr($headers, array("\r" => '')); - - foreach ($to_array as $to) - { - if (!mail(strtr($to, array("\r" => '', "\n" => '')), $subject, $message, $headers)) - { - log_error(sprintf($txt['mail_send_unable'], $to)); - $mail_result = false; - } - } - } - else - $mail_result = smtp_mail($to_array, $subject, $message, "MIME-Version: 1.0\r\n" . $headers); - - // Everything go smoothly? - return $mail_result; + return $mailer->send($email); } // Send off a personal message.