bug 1389: send all mails correct in quoted-prinable
authorFelix Dörre <felix@dogcraft.de>
Tue, 21 Jul 2015 20:25:15 +0000 (22:25 +0200)
committerFelix Dörre <felix@dogcraft.de>
Tue, 21 Jul 2015 20:25:19 +0000 (22:25 +0200)
caller should now send plain utf-8 or html-encoded

includes/mysql.php.sample

index 10185fc..01570df 100644 (file)
@@ -26,7 +26,7 @@
        $_SESSION['_config']['securehostname'] = "secure.cacert.org";
        $_SESSION['_config']['tverify'] = "tverify.cacert.org";
 
-       function sendmail($to, $subject, $message, $from, $replyto = "", $toname = "", $fromname = "", $errorsto = "returns@cacert.org", $extra="")
+       function sendmail($to, $subject, $message, $from, $replyto = "", $toname = "", $fromname = "", $errorsto = "returns@cacert.org", $use_utf8 = true)
        {
                $lines = explode("\n", $message);
                $message = "";
@@ -49,7 +49,7 @@
                $smtp = fsockopen("localhost", 25);
                if(!$smtp)
                {
-                  echo("Could not connect to mailserver at localhost:25\n");
+                 echo("Could not connect to mailserver at localhost:25\n");
                  return;
                }
                $InputBuffer = fgets($smtp, 1024);
                if($extra == "")
                {
                        fputs($smtp, "Content-Type: text/plain; charset=\"utf-8\"\r\n");
-                       fputs($smtp, "Content-Transfer-Encoding: 8bit\r\n");
-               } else {
+               }
+               else
+               {
                        fputs($smtp, "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n");
-                       fputs($smtp, "Content-Transfer-Encoding: quoted-printable\r\n");
-                       fputs($smtp, "Content-Disposition: inline\r\n");
                }
+               fputs($smtp, "Content-Transfer-Encoding: quoted-printable\r\n");
+               fputs($smtp, "Content-Disposition: inline\r\n");
+
 //             fputs($smtp, "Content-Transfer-Encoding: BASE64\r\n");
                fputs($smtp, "\r\n");
 //             fputs($smtp, chunk_split(base64_encode(recode("html..utf-8", $message)))."\r\n.\r\n");
-               fputs($smtp, recode("html..utf-8", $message)."\r\n.\r\n");
+               $encoded_lines = explode( "\n", str_replace("\r", "", $message) );
+               array_walk( $encoded_lines,
+               function (&$a) {
+                 $a = quoted_printable_encode(recode("html..utf-8", $a));
+               });
+               $encoded_message = implode("\n", $encoded_lines);
+
+               $encoded_message = str_replace("\r.", "\r=2E", $encoded_message);
+               $encoded_message = str_replace("\n.", "\n=2E", $encoded_message);
+               fputs($smtp, $encoded_message);
+               fputs($smtp, "\r\n.\r\n");
                fputs($smtp, "QUIT\n");
                $InputBuffer = fgets($smtp, 1024);
                fclose($smtp);