diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Links.php b/lib/Cron/Workers/SendingQueue/Tasks/Links.php
index 530052f197..fa208e8196 100644
--- a/lib/Cron/Workers/SendingQueue/Tasks/Links.php
+++ b/lib/Cron/Workers/SendingQueue/Tasks/Links.php
@@ -23,6 +23,7 @@ class Links {
// join HTML and TEXT rendered body into a text string
$content = Helpers::joinObject($rendered_newsletter);
list($content, $links) = NewsletterLinks::process($content, $newsletter_id, $queue_id);
+ $links = NewsletterLinks::ensureUnsubscribeLink($links);
// split the processed body with hashed links back to HTML and TEXT
list($rendered_newsletter['html'], $rendered_newsletter['text'])
= Helpers::splitObject($content);
diff --git a/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php b/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php
index a02ac2a77d..30c043d86b 100644
--- a/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php
+++ b/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php
@@ -53,6 +53,21 @@ class LinksTest extends \MailPoetTest {
expect($result['html'])->contains($newsletter_link->hash);
}
+ function testItCanEnsureThatUnsubscribeLinkIsAlwaysPresent() {
+ $newsletter = Newsletter::create();
+ $newsletter->type = Newsletter::TYPE_STANDARD;
+ $newsletter->save();
+ $rendered_newsletter = [
+ 'html' => 'Example Link',
+ 'text' => 'Example Link',
+ ];
+ $queue = (object)['id' => 2];
+ Links::process($rendered_newsletter, $newsletter, $queue);
+ $unsubscribe_count = NewsletterLink::where('newsletter_id', $newsletter->id)
+ ->where('url', NewsletterLink::UNSUBSCRIBE_LINK_SHORT_CODE)->count();
+ expect($unsubscribe_count)->equals(1);
+ }
+
function _after() {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);