Replaces SwiftMailer's mail() method with WP's PHPMailer

This commit is contained in:
Vlad
2017-06-08 21:25:18 -04:00
parent cbedd5ff40
commit c91f8ccc7a
2 changed files with 83 additions and 53 deletions

View File

@ -1,10 +1,13 @@
<?php
namespace MailPoet\Mailer\Methods;
use MailPoet\Mailer\Mailer;
if(!defined('ABSPATH')) exit;
require_once ABSPATH . WPINC . '/class-phpmailer.php';
class PHPMail {
public $sender;
public $reply_to;
@ -22,12 +25,12 @@ class PHPMail {
function send($newsletter, $subscriber, $extra_params = array()) {
try {
$message = $this->createMessage($newsletter, $subscriber, $extra_params);
$result = $this->mailer->send($message);
$mailer = $this->configureMailerWithMessage($newsletter, $subscriber, $extra_params);
$result = $mailer->send();
} catch(\Exception $e) {
return Mailer::formatMailerSendErrorResult($e->getMessage());
}
if($result === 1) {
if($result === true) {
return Mailer::formatMailerSendSuccessResult();
} else {
$result = sprintf(__('%s has returned an unknown error.', 'mailpoet'), Mailer::METHOD_PHPMAIL);
@ -39,33 +42,30 @@ class PHPMail {
}
function buildMailer() {
$transport = \Swift_MailTransport::newInstance();
return \Swift_Mailer::newInstance($transport);
$mailer = new \PHPMailer(true);
// send using PHP's mail() function
$mailer->isMail();
return $mailer;
}
function createMessage($newsletter, $subscriber, $extra_params = array()) {
$message = \Swift_Message::newInstance()
->setTo($this->processSubscriber($subscriber))
->setFrom(array(
$this->sender['from_email'] => $this->sender['from_name']
))
->setSender($this->sender['from_email'])
->setReplyTo(array(
$this->reply_to['reply_to_email'] => $this->reply_to['reply_to_name']
))
->setReturnPath($this->return_path)
->setSubject($newsletter['subject']);
function configureMailerWithMessage($newsletter, $subscriber, $extra_params = array()) {
$mailer = $this->mailer;
$mailer->clearAddresses();
$mailer->clearCustomHeaders();
$mailer->isHTML();
$mailer->CharSet = 'UTF-8';
$mailer->setFrom($this->sender['from_email'], $this->sender['from_name'], false);
$mailer->addReplyTo($this->reply_to['reply_to_email'], $this->reply_to['reply_to_name']);
$subscriber = $this->processSubscriber($subscriber);
$mailer->addAddress($subscriber['email'], $subscriber['name']);
$mailer->Subject = (!empty($newsletter['subject'])) ? $newsletter['subject'] : '';
$mailer->Body = (!empty($newsletter['body']['html'])) ? $newsletter['body']['html'] : '';
$mailer->AltBody = (!empty($newsletter['body']['text'])) ? $newsletter['body']['text'] : '';
$mailer->Sender = $this->return_path;
if(!empty($extra_params['unsubscribe_url'])) {
$headers = $message->getHeaders();
$headers->addTextHeader('List-Unsubscribe', '<' . $extra_params['unsubscribe_url'] . '>');
$this->mailer->addCustomHeader('List-Unsubscribe', $extra_params['unsubscribe_url']);
}
if(!empty($newsletter['body']['html'])) {
$message = $message->setBody($newsletter['body']['html'], 'text/html');
}
if(!empty($newsletter['body']['text'])) {
$message = $message->addPart($newsletter['body']['text'], 'text/plain');
}
return $message;
return $mailer;
}
function processSubscriber($subscriber) {
@ -76,8 +76,8 @@ class PHPMail {
);
}
return array(
$subscriber_data['email'] =>
(isset($subscriber_data['name'])) ? $subscriber_data['name'] : ''
'email' => $subscriber_data['email'],
'name' => (isset($subscriber_data['name'])) ? $subscriber_data['name'] : ''
);
}
}