Add List-Unsubscribe header to emails [MAILPOET-793]
Amazon SES supports custom headers only via 'SendRawEmail' action MailPoet Sending Service doesn't support custom headers yet
This commit is contained in:
@ -2,6 +2,7 @@
|
|||||||
namespace MailPoet\Mailer;
|
namespace MailPoet\Mailer;
|
||||||
|
|
||||||
use MailPoet\Models\Setting;
|
use MailPoet\Models\Setting;
|
||||||
|
use MailPoet\Subscription\Url as SubscriptionUrl;
|
||||||
|
|
||||||
if(!defined('ABSPATH')) exit;
|
if(!defined('ABSPATH')) exit;
|
||||||
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
||||||
@ -29,8 +30,9 @@ class Mailer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function send($newsletter, $subscriber) {
|
function send($newsletter, $subscriber) {
|
||||||
|
$extra_params = $this->getExtraParams($newsletter, $subscriber);
|
||||||
$subscriber = $this->formatSubscriberNameAndEmailAddress($subscriber);
|
$subscriber = $this->formatSubscriberNameAndEmailAddress($subscriber);
|
||||||
return $this->mailer_instance->send($newsletter, $subscriber);
|
return $this->mailer_instance->send($newsletter, $subscriber, $extra_params);
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildMailer() {
|
function buildMailer() {
|
||||||
@ -166,6 +168,12 @@ class Mailer {
|
|||||||
return sprintf('=?utf-8?B?%s?=', base64_encode($name));
|
return sprintf('=?utf-8?B?%s?=', base64_encode($name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getExtraParams($newsletter, $subscriber) {
|
||||||
|
$extra_params = array();
|
||||||
|
$extra_params['unsubscribe_url'] = SubscriptionUrl::getUnsubscribeUrl($subscriber);
|
||||||
|
return $extra_params;
|
||||||
|
}
|
||||||
|
|
||||||
static function formatMailerConnectionErrorResult($error_message) {
|
static function formatMailerConnectionErrorResult($error_message) {
|
||||||
return array(
|
return array(
|
||||||
'response' => false,
|
'response' => false,
|
||||||
|
@ -18,6 +18,7 @@ class AmazonSES {
|
|||||||
public $sender;
|
public $sender;
|
||||||
public $reply_to;
|
public $reply_to;
|
||||||
public $return_path;
|
public $return_path;
|
||||||
|
public $message;
|
||||||
public $date;
|
public $date;
|
||||||
public $date_without_time;
|
public $date_without_time;
|
||||||
private $available_regions = array(
|
private $available_regions = array(
|
||||||
@ -48,10 +49,10 @@ class AmazonSES {
|
|||||||
$this->date_without_time = gmdate('Ymd');
|
$this->date_without_time = gmdate('Ymd');
|
||||||
}
|
}
|
||||||
|
|
||||||
function send($newsletter, $subscriber) {
|
function send($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$result = wp_remote_post(
|
$result = wp_remote_post(
|
||||||
$this->url,
|
$this->url,
|
||||||
$this->request($newsletter, $subscriber)
|
$this->request($newsletter, $subscriber, $extra_params)
|
||||||
);
|
);
|
||||||
if(is_wp_error($result)) {
|
if(is_wp_error($result)) {
|
||||||
return Mailer::formatMailerConnectionErrorResult($result->get_error_message());
|
return Mailer::formatMailerConnectionErrorResult($result->get_error_message());
|
||||||
@ -66,27 +67,61 @@ class AmazonSES {
|
|||||||
return Mailer::formatMailerSendSuccessResult();
|
return Mailer::formatMailerSendSuccessResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBody($newsletter, $subscriber) {
|
function getBody($newsletter, $subscriber, $extra_params = array()) {
|
||||||
|
$this->message = $this->createMessage($newsletter, $subscriber, $extra_params);
|
||||||
$body = array(
|
$body = array(
|
||||||
'Action' => 'SendEmail',
|
'Action' => 'SendRawEmail',
|
||||||
'Version' => '2010-12-01',
|
'Version' => '2010-12-01',
|
||||||
'Destination.ToAddresses.member.1' => $subscriber,
|
|
||||||
'Source' => $this->sender['from_name_email'],
|
'Source' => $this->sender['from_name_email'],
|
||||||
'ReplyToAddresses.member.1' => $this->reply_to['reply_to_name_email'],
|
'RawMessage.Data' => $this->encodeMessage($this->message)
|
||||||
'Message.Subject.Data' => $newsletter['subject'],
|
|
||||||
'ReturnPath' => $this->return_path
|
|
||||||
);
|
);
|
||||||
if(!empty($newsletter['body']['html'])) {
|
|
||||||
$body['Message.Body.Html.Data'] = $newsletter['body']['html'];
|
|
||||||
}
|
|
||||||
if(!empty($newsletter['body']['text'])) {
|
|
||||||
$body['Message.Body.Text.Data'] = $newsletter['body']['text'];
|
|
||||||
}
|
|
||||||
return $body;
|
return $body;
|
||||||
}
|
}
|
||||||
|
|
||||||
function request($newsletter, $subscriber) {
|
function createMessage($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$body = array_map('urlencode', $this->getBody($newsletter, $subscriber));
|
$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']);
|
||||||
|
if(!empty($extra_params['unsubscribe_url'])) {
|
||||||
|
$headers = $message->getHeaders();
|
||||||
|
$headers->addTextHeader('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;
|
||||||
|
}
|
||||||
|
|
||||||
|
function encodeMessage(\Swift_Message $message) {
|
||||||
|
return base64_encode($message->toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
function processSubscriber($subscriber) {
|
||||||
|
preg_match('!(?P<name>.*?)\s<(?P<email>.*?)>!', $subscriber, $subscriber_data);
|
||||||
|
if(!isset($subscriber_data['email'])) {
|
||||||
|
$subscriber_data = array(
|
||||||
|
'email' => $subscriber,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return array(
|
||||||
|
$subscriber_data['email'] =>
|
||||||
|
(isset($subscriber_data['name'])) ? $subscriber_data['name'] : ''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function request($newsletter, $subscriber, $extra_params = array()) {
|
||||||
|
$body = array_map('urlencode', $this->getBody($newsletter, $subscriber, $extra_params));
|
||||||
return array(
|
return array(
|
||||||
'timeout' => 10,
|
'timeout' => 10,
|
||||||
'httpversion' => '1.1',
|
'httpversion' => '1.1',
|
||||||
|
@ -17,7 +17,7 @@ class MailPoet {
|
|||||||
$this->reply_to = $reply_to;
|
$this->reply_to = $reply_to;
|
||||||
}
|
}
|
||||||
|
|
||||||
function send($newsletter, $subscriber) {
|
function send($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$message_body = $this->getBody($newsletter, $subscriber);
|
$message_body = $this->getBody($newsletter, $subscriber);
|
||||||
$result = wp_remote_post(
|
$result = wp_remote_post(
|
||||||
$this->url,
|
$this->url,
|
||||||
|
@ -20,9 +20,9 @@ class PHPMail {
|
|||||||
$this->mailer = $this->buildMailer();
|
$this->mailer = $this->buildMailer();
|
||||||
}
|
}
|
||||||
|
|
||||||
function send($newsletter, $subscriber) {
|
function send($newsletter, $subscriber, $extra_params = array()) {
|
||||||
try {
|
try {
|
||||||
$message = $this->createMessage($newsletter, $subscriber);
|
$message = $this->createMessage($newsletter, $subscriber, $extra_params);
|
||||||
$result = $this->mailer->send($message);
|
$result = $this->mailer->send($message);
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
return Mailer::formatMailerSendErrorResult($e->getMessage());
|
return Mailer::formatMailerSendErrorResult($e->getMessage());
|
||||||
@ -39,7 +39,7 @@ class PHPMail {
|
|||||||
return \Swift_Mailer::newInstance($transport);
|
return \Swift_Mailer::newInstance($transport);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createMessage($newsletter, $subscriber) {
|
function createMessage($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$message = \Swift_Message::newInstance()
|
$message = \Swift_Message::newInstance()
|
||||||
->setTo($this->processSubscriber($subscriber))
|
->setTo($this->processSubscriber($subscriber))
|
||||||
->setFrom(array(
|
->setFrom(array(
|
||||||
@ -51,6 +51,10 @@ class PHPMail {
|
|||||||
))
|
))
|
||||||
->setReturnPath($this->return_path)
|
->setReturnPath($this->return_path)
|
||||||
->setSubject($newsletter['subject']);
|
->setSubject($newsletter['subject']);
|
||||||
|
if(!empty($extra_params['unsubscribe_url'])) {
|
||||||
|
$headers = $message->getHeaders();
|
||||||
|
$headers->addTextHeader('List-Unsubscribe', '<' . $extra_params['unsubscribe_url'] . '>');
|
||||||
|
}
|
||||||
if(!empty($newsletter['body']['html'])) {
|
if(!empty($newsletter['body']['html'])) {
|
||||||
$message = $message->setBody($newsletter['body']['html'], 'text/html');
|
$message = $message->setBody($newsletter['body']['html'], 'text/html');
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,9 @@ class SMTP {
|
|||||||
$this->mailer = $this->buildMailer();
|
$this->mailer = $this->buildMailer();
|
||||||
}
|
}
|
||||||
|
|
||||||
function send($newsletter, $subscriber) {
|
function send($newsletter, $subscriber, $extra_params = array()) {
|
||||||
try {
|
try {
|
||||||
$message = $this->createMessage($newsletter, $subscriber);
|
$message = $this->createMessage($newsletter, $subscriber, $extra_params);
|
||||||
$result = $this->mailer->send($message);
|
$result = $this->mailer->send($message);
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
return Mailer::formatMailerSendErrorResult($e->getMessage());
|
return Mailer::formatMailerSendErrorResult($e->getMessage());
|
||||||
@ -60,7 +60,7 @@ class SMTP {
|
|||||||
return \Swift_Mailer::newInstance($transport);
|
return \Swift_Mailer::newInstance($transport);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createMessage($newsletter, $subscriber) {
|
function createMessage($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$message = \Swift_Message::newInstance()
|
$message = \Swift_Message::newInstance()
|
||||||
->setTo($this->processSubscriber($subscriber))
|
->setTo($this->processSubscriber($subscriber))
|
||||||
->setFrom(array(
|
->setFrom(array(
|
||||||
@ -72,6 +72,10 @@ class SMTP {
|
|||||||
))
|
))
|
||||||
->setReturnPath($this->return_path)
|
->setReturnPath($this->return_path)
|
||||||
->setSubject($newsletter['subject']);
|
->setSubject($newsletter['subject']);
|
||||||
|
if(!empty($extra_params['unsubscribe_url'])) {
|
||||||
|
$headers = $message->getHeaders();
|
||||||
|
$headers->addTextHeader('List-Unsubscribe', '<' . $extra_params['unsubscribe_url'] . '>');
|
||||||
|
}
|
||||||
if(!empty($newsletter['body']['html'])) {
|
if(!empty($newsletter['body']['html'])) {
|
||||||
$message = $message->setBody($newsletter['body']['html'], 'text/html');
|
$message = $message->setBody($newsletter['body']['html'], 'text/html');
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,10 @@ class SendGrid {
|
|||||||
$this->reply_to = $reply_to;
|
$this->reply_to = $reply_to;
|
||||||
}
|
}
|
||||||
|
|
||||||
function send($newsletter, $subscriber) {
|
function send($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$result = wp_remote_post(
|
$result = wp_remote_post(
|
||||||
$this->url,
|
$this->url,
|
||||||
$this->request($newsletter, $subscriber)
|
$this->request($newsletter, $subscriber, $extra_params)
|
||||||
);
|
);
|
||||||
if(is_wp_error($result)) {
|
if(is_wp_error($result)) {
|
||||||
return Mailer::formatMailerConnectionErrorResult($result->get_error_message());
|
return Mailer::formatMailerConnectionErrorResult($result->get_error_message());
|
||||||
@ -35,7 +35,7 @@ class SendGrid {
|
|||||||
return Mailer::formatMailerSendSuccessResult();
|
return Mailer::formatMailerSendSuccessResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBody($newsletter, $subscriber) {
|
function getBody($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$body = array(
|
$body = array(
|
||||||
'to' => $subscriber,
|
'to' => $subscriber,
|
||||||
'from' => $this->sender['from_email'],
|
'from' => $this->sender['from_email'],
|
||||||
@ -43,6 +43,13 @@ class SendGrid {
|
|||||||
'replyto' => $this->reply_to['reply_to_email'],
|
'replyto' => $this->reply_to['reply_to_email'],
|
||||||
'subject' => $newsletter['subject']
|
'subject' => $newsletter['subject']
|
||||||
);
|
);
|
||||||
|
$headers = array();
|
||||||
|
if(!empty($extra_params['unsubscribe_url'])) {
|
||||||
|
$headers['List-Unsubscribe'] = '<' . $extra_params['unsubscribe_url'] . '>';
|
||||||
|
}
|
||||||
|
if($headers) {
|
||||||
|
$body['headers'] = json_encode($headers);
|
||||||
|
}
|
||||||
if(!empty($newsletter['body']['html'])) {
|
if(!empty($newsletter['body']['html'])) {
|
||||||
$body['html'] = $newsletter['body']['html'];
|
$body['html'] = $newsletter['body']['html'];
|
||||||
}
|
}
|
||||||
@ -56,8 +63,8 @@ class SendGrid {
|
|||||||
return 'Bearer ' . $this->api_key;
|
return 'Bearer ' . $this->api_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
function request($newsletter, $subscriber) {
|
function request($newsletter, $subscriber, $extra_params = array()) {
|
||||||
$body = $this->getBody($newsletter, $subscriber);
|
$body = $this->getBody($newsletter, $subscriber, $extra_params);
|
||||||
return array(
|
return array(
|
||||||
'timeout' => 10,
|
'timeout' => 10,
|
||||||
'httpversion' => '1.1',
|
'httpversion' => '1.1',
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Models\Setting;
|
use MailPoet\Models\Setting;
|
||||||
|
use MailPoet\Subscription\Url as SubscriptionUrl;
|
||||||
|
|
||||||
class MailerTest extends MailPoetTest {
|
class MailerTest extends MailPoetTest {
|
||||||
function _before() {
|
function _before() {
|
||||||
@ -175,4 +176,11 @@ class MailerTest extends MailPoetTest {
|
|||||||
$result = $mailer->send($this->newsletter, $this->subscriber);
|
$result = $mailer->send($this->newsletter, $this->subscriber);
|
||||||
expect($result['response'])->true();
|
expect($result['response'])->true();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItCanGetExtraParams() {
|
||||||
|
$mailer = new Mailer($this->mailer, $this->sender, $this->reply_to);
|
||||||
|
$extra_params = $mailer->getExtraParams($this->newsletter, $this->subscriber);
|
||||||
|
expect($extra_params['unsubscribe_url'])
|
||||||
|
->equals(SubscriptionUrl::getUnsubscribeUrl($this->subscriber));
|
||||||
|
}
|
||||||
}
|
}
|
@ -43,6 +43,9 @@ class AmazonSESTest extends MailPoetTest {
|
|||||||
'text' => 'TEXT body'
|
'text' => 'TEXT body'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$this->extra_params = array(
|
||||||
|
'unsubscribe_url' => 'http://www.mailpoet.com'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItsConstructorWorks() {
|
function testItsConstructorWorks() {
|
||||||
@ -88,25 +91,41 @@ class AmazonSESTest extends MailPoetTest {
|
|||||||
|
|
||||||
function testItCanGenerateBody() {
|
function testItCanGenerateBody() {
|
||||||
$body = $this->mailer->getBody($this->newsletter, $this->subscriber);
|
$body = $this->mailer->getBody($this->newsletter, $this->subscriber);
|
||||||
expect($body['Action'])->equals('SendEmail');
|
expect($body['Action'])->equals('SendRawEmail');
|
||||||
expect($body['Version'])->equals('2010-12-01');
|
expect($body['Version'])->equals('2010-12-01');
|
||||||
expect($body['Source'])->equals($this->sender['from_name_email']);
|
expect($body['Source'])->equals($this->sender['from_name_email']);
|
||||||
expect($body['ReplyToAddresses.member.1'])
|
expect($body['RawMessage.Data'])
|
||||||
->equals($this->reply_to['reply_to_name_email']);
|
->equals($this->mailer->encodeMessage($this->mailer->message));
|
||||||
expect($body['Destination.ToAddresses.member.1'])
|
}
|
||||||
->contains($this->subscriber);
|
|
||||||
expect($body['Message.Subject.Data'])
|
function testItCanCreateMessage() {
|
||||||
|
$message = $this->mailer
|
||||||
|
->createMessage($this->newsletter, $this->subscriber, $this->extra_params);
|
||||||
|
expect($message->getTo())
|
||||||
|
->equals(array('mailpoet-phoenix-test@mailinator.com' => 'Recipient'));
|
||||||
|
expect($message->getFrom())
|
||||||
|
->equals(array($this->sender['from_email'] => $this->sender['from_name']));
|
||||||
|
expect($message->getSender())
|
||||||
|
->equals(array($this->sender['from_email'] => null));
|
||||||
|
expect($message->getReplyTo())
|
||||||
|
->equals(array($this->reply_to['reply_to_email'] => $this->reply_to['reply_to_name']));
|
||||||
|
expect($message->getSubject())
|
||||||
->equals($this->newsletter['subject']);
|
->equals($this->newsletter['subject']);
|
||||||
expect($body['Message.Body.Html.Data'])
|
expect($message->getBody())
|
||||||
->equals($this->newsletter['body']['html']);
|
->equals($this->newsletter['body']['html']);
|
||||||
expect($body['Message.Body.Text.Data'])
|
expect($message->getChildren()[0]->getContentType())
|
||||||
->equals($this->newsletter['body']['text']);
|
->equals('text/plain');
|
||||||
expect($body['ReturnPath'])->equals($this->return_path);
|
expect($message->getHeaders()->get('List-Unsubscribe')->getValue())
|
||||||
|
->equals('<' . $this->extra_params['unsubscribe_url'] . '>');
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanCreateRequest() {
|
function testItCanCreateRequest() {
|
||||||
$request = $this->mailer->request($this->newsletter, $this->subscriber);
|
$request = $this->mailer->request($this->newsletter, $this->subscriber);
|
||||||
|
// preserve the original message
|
||||||
|
$raw_message = $this->mailer->encodeMessage($this->mailer->message);
|
||||||
$body = $this->mailer->getBody($this->newsletter, $this->subscriber);
|
$body = $this->mailer->getBody($this->newsletter, $this->subscriber);
|
||||||
|
// substitute the message to synchronize hashes
|
||||||
|
$body['RawMessage.Data'] = $raw_message;
|
||||||
$body = array_map('urlencode', $body);
|
$body = array_map('urlencode', $body);
|
||||||
expect($request['timeout'])->equals(10);
|
expect($request['timeout'])->equals(10);
|
||||||
expect($request['httpversion'])->equals('1.1');
|
expect($request['httpversion'])->equals('1.1');
|
||||||
|
@ -28,6 +28,9 @@ class PHPMailTest extends MailPoetTest {
|
|||||||
'text' => 'TEXT body'
|
'text' => 'TEXT body'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$this->extra_params = array(
|
||||||
|
'unsubscribe_url' => 'http://www.mailpoet.com'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanBuildMailer() {
|
function testItCanBuildMailer() {
|
||||||
@ -45,7 +48,8 @@ class PHPMailTest extends MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testItCanCreateMessage() {
|
function testItCanCreateMessage() {
|
||||||
$message = $this->mailer->createMessage($this->newsletter, $this->subscriber);
|
$message = $this->mailer
|
||||||
|
->createMessage($this->newsletter, $this->subscriber, $this->extra_params);
|
||||||
expect($message->getTo())
|
expect($message->getTo())
|
||||||
->equals(array('mailpoet-phoenix-test@mailinator.com' => 'Recipient'));
|
->equals(array('mailpoet-phoenix-test@mailinator.com' => 'Recipient'));
|
||||||
expect($message->getFrom())
|
expect($message->getFrom())
|
||||||
@ -60,6 +64,8 @@ class PHPMailTest extends MailPoetTest {
|
|||||||
->equals($this->newsletter['body']['html']);
|
->equals($this->newsletter['body']['html']);
|
||||||
expect($message->getChildren()[0]->getContentType())
|
expect($message->getChildren()[0]->getContentType())
|
||||||
->equals('text/plain');
|
->equals('text/plain');
|
||||||
|
expect($message->getHeaders()->get('List-Unsubscribe')->getValue())
|
||||||
|
->equals('<' . $this->extra_params['unsubscribe_url'] . '>');
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanProcessSubscriber() {
|
function testItCanProcessSubscriber() {
|
||||||
|
@ -49,6 +49,9 @@ class SMTPTest extends MailPoetTest {
|
|||||||
'text' => 'TEXT body'
|
'text' => 'TEXT body'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$this->extra_params = array(
|
||||||
|
'unsubscribe_url' => 'http://www.mailpoet.com'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanBuildMailer() {
|
function testItCanBuildMailer() {
|
||||||
@ -81,7 +84,8 @@ class SMTPTest extends MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testItCanCreateMessage() {
|
function testItCanCreateMessage() {
|
||||||
$message = $this->mailer->createMessage($this->newsletter, $this->subscriber);
|
$message = $this->mailer
|
||||||
|
->createMessage($this->newsletter, $this->subscriber, $this->extra_params);
|
||||||
expect($message->getTo())
|
expect($message->getTo())
|
||||||
->equals(array('mailpoet-phoenix-test@mailinator.com' => 'Recipient'));
|
->equals(array('mailpoet-phoenix-test@mailinator.com' => 'Recipient'));
|
||||||
expect($message->getFrom())
|
expect($message->getFrom())
|
||||||
@ -96,6 +100,8 @@ class SMTPTest extends MailPoetTest {
|
|||||||
->equals($this->newsletter['body']['html']);
|
->equals($this->newsletter['body']['html']);
|
||||||
expect($message->getChildren()[0]->getContentType())
|
expect($message->getChildren()[0]->getContentType())
|
||||||
->equals('text/plain');
|
->equals('text/plain');
|
||||||
|
expect($message->getHeaders()->get('List-Unsubscribe')->getValue())
|
||||||
|
->equals('<' . $this->extra_params['unsubscribe_url'] . '>');
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanProcessSubscriber() {
|
function testItCanProcessSubscriber() {
|
||||||
@ -107,7 +113,7 @@ class SMTPTest extends MailPoetTest {
|
|||||||
->equals(array('test@test.com' => 'First Last'));
|
->equals(array('test@test.com' => 'First Last'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCantSentWithoutProperAuthentication() {
|
function testItCantSendWithoutProperAuthentication() {
|
||||||
if(getenv('WP_TEST_MAILER_ENABLE_SENDING') !== 'true') return;
|
if(getenv('WP_TEST_MAILER_ENABLE_SENDING') !== 'true') return;
|
||||||
$this->mailer->login = 'someone';
|
$this->mailer->login = 'someone';
|
||||||
$this->mailer->mailer = $this->mailer->buildMailer();
|
$this->mailer->mailer = $this->mailer->buildMailer();
|
||||||
|
@ -33,15 +33,21 @@ class SendGridTest extends MailPoetTest {
|
|||||||
'text' => 'TEXT body'
|
'text' => 'TEXT body'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$this->extra_params = array(
|
||||||
|
'unsubscribe_url' => 'http://www.mailpoet.com'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanGenerateBody() {
|
function testItCanGenerateBody() {
|
||||||
$body = $this->mailer->getBody($this->newsletter, $this->subscriber);
|
$body = $this->mailer->getBody($this->newsletter, $this->subscriber, $this->extra_params);
|
||||||
expect($body['to'])->contains($this->subscriber);
|
expect($body['to'])->contains($this->subscriber);
|
||||||
expect($body['from'])->equals($this->sender['from_email']);
|
expect($body['from'])->equals($this->sender['from_email']);
|
||||||
expect($body['fromname'])->equals($this->sender['from_name']);
|
expect($body['fromname'])->equals($this->sender['from_name']);
|
||||||
expect($body['replyto'])->equals($this->reply_to['reply_to_email']);
|
expect($body['replyto'])->equals($this->reply_to['reply_to_email']);
|
||||||
expect($body['subject'])->equals($this->newsletter['subject']);
|
expect($body['subject'])->equals($this->newsletter['subject']);
|
||||||
|
$headers = json_decode($body['headers'], true);
|
||||||
|
expect($headers['List-Unsubscribe'])
|
||||||
|
->equals('<' . $this->extra_params['unsubscribe_url'] . '>');
|
||||||
expect($body['html'])->equals($this->newsletter['body']['html']);
|
expect($body['html'])->equals($this->newsletter['body']['html']);
|
||||||
expect($body['text'])->equals($this->newsletter['body']['text']);
|
expect($body['text'])->equals($this->newsletter['body']['text']);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user