From 1f61f312a78e212aaa4a4bc3f60961036ec07fd7 Mon Sep 17 00:00:00 2001
From: Dominik Eckelmann <deckelmann@gmail.com>
Date: Fri, 23 Nov 2012 18:48:09 +0100
Subject: [PATCH] remove empty BCC/CC mail headers

Empty BCC/CC headers may cause errors on IIS.
---
 _test/tests/inc/mailer.test.php | 17 +++++++++++++++++
 inc/Mailer.class.php            | 11 +++++++++++
 2 files changed, 28 insertions(+)

diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php
index b2c74a257..91c4a999d 100644
--- a/_test/tests/inc/mailer.test.php
+++ b/_test/tests/inc/mailer.test.php
@@ -7,6 +7,14 @@ class TestMailer extends Mailer {
     public function prop($name){
         return $this->$name;
     }
+
+    public function &propRef($name) {
+        return $this->$name;
+    }
+
+    public function prepareHeaders() {
+        return parent::prepareHeaders();
+    }
 }
 
 class mailer_test extends DokuWikiTest {
@@ -90,5 +98,14 @@ class mailer_test extends DokuWikiTest {
         }
     }
 
+    function test_emptyBCCorCC() {
+        $mail = new TestMailer();
+        $headers = &$mail->propRef('headers');
+        $headers['Bcc'] = '';
+        $headers['Cc'] = '';
+        $header = $mail->prepareHeaders();
+        $this->assertEquals(0, preg_match('/(^|\n)Bcc: (\n|$)/', $header), 'Bcc found in headers.');
+        $this->assertEquals(0, preg_match('/(^|\n)Cc: (\n|$)/', $header), 'Bcc found in headers.');
+    }
 }
 //Setup VIM: ex: et ts=4 :
diff --git a/inc/Mailer.class.php b/inc/Mailer.class.php
index cbd1eb0a9..256a76d22 100644
--- a/inc/Mailer.class.php
+++ b/inc/Mailer.class.php
@@ -553,6 +553,7 @@ class Mailer {
      * @returns string the headers
      */
     protected function prepareHeaders() {
+        $this->removeEmptyBccOrCcHeader();
         $headers = '';
         foreach($this->headers as $key => $val) {
             $headers .= "$key: $val".MAILHEADER_EOL;
@@ -560,6 +561,16 @@ class Mailer {
         return $headers;
     }
 
+    /**
+     * Removes empty BCC and CC Header.
+     *
+     * Empty BCC/CC Header can cause an error with Microsoft IIS.
+     */
+    protected function removeEmptyBccOrCcHeader() {
+        if (isset($this->headers['Bcc']) && empty($this->headers['Bcc'])) unset($this->headers['Bcc']);
+        if (isset($this->headers['Cc']) && empty($this->headers['Cc'])) unset($this->headers['Cc']);
+    }
+
     /**
      * return a full email with all headers
      *
-- 
GitLab