<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[359] wp-testcase/test_includes_pluggable.php: Add some test cases for wp_mail behaviour with RFC2822 addresses like &quot;Name &lt; address@tld.com&gt;&quot;.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg > ul, #logmsg > ol { margin-left: 0; margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd>359</dd>
<dt>Author</dt> <dd>westi</dd>
<dt>Date</dt> <dd>2011-05-23 10:33:35 +0000 (Mon, 23 May 2011)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add some test cases for wp_mail behaviour with RFC2822 addresses like &quot;Name &lt; address@tld.com&gt;&quot;.

These worked fine with the old PHP4 compatible PHPMailer but the PHP5 only version is more strict about how we configure it.

The test cases have different expected results for old and new WordPress versions because of this.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#wptestcasetest_includes_pluggablephp">wp-testcase/test_includes_pluggable.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="wptestcasetest_includes_pluggablephp"></a>
<div class="modfile"><h4>Modified: wp-testcase/test_includes_pluggable.php (358 => 359)</h4>
<pre class="diff"><span>
<span class="info">--- wp-testcase/test_includes_pluggable.php        2011-05-23 09:51:03 UTC (rev 358)
+++ wp-testcase/test_includes_pluggable.php        2011-05-23 10:33:35 UTC (rev 359)
</span><span class="lines">@@ -140,6 +140,84 @@
</span><span class="cx">                 $this-&gt;assertEquals($body, $GLOBALS['phpmailer']-&gt;mock_sent[0]['body']);
</span><span class="cx">                 unset( $_SERVER['SERVER_NAME'] );
</span><span class="cx">         }
</span><ins>+
+        function test_wp_mail_rfc2822_addresses() {
+                $this-&gt;knownWPBug(17305);
+                
+                $to = &quot;Name &lt;address@tld.com&gt;&quot;;
+                $from = &quot;Another Name &lt;another_address@different-tld.com&gt;&quot;;
+                $cc = &quot;The Carbon Guy &lt;cc@cc.com&gt;&quot;;
+                $bcc = &quot;The Blind Carbon Guy &lt;bcc@bcc.com&gt;&quot;;
+                $subject = &quot;RFC2822 Testing&quot;;
+                $message = &quot;My RFC822 Test Message&quot;;
+                $headers[] = &quot;From: {$from}&quot;;
+                $headers[] = &quot;CC: {$cc}&quot;;
+                $headers[] = &quot;BCC: {$bcc}&quot;;
+
+                unset($GLOBALS['phpmailer']-&gt;mock_sent);
+                $_SERVER['SERVER_NAME'] = 'example.com';
+                wp_mail( $to, $subject, $message, $headers );
+
+                // WordPress 3.2 and later correctly split the address into the two parts and send them seperately to PHPMailer
+                // Earlier versions of PHPMailer were not touchy about the formatting of these arguments.
+                if ( version_compare( $GLOBALS['wp_version'], '3.1.9', '&gt;' ) ) {
+                        $this-&gt;assertEquals('address@tld.com', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][0][0]);
+                        $this-&gt;assertEquals('Name', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][0][1]);
+                        $this-&gt;assertEquals('cc@cc.com', $GLOBALS['phpmailer']-&gt;mock_sent[0]['cc'][0][0]);
+                        $this-&gt;assertEquals('The Carbon Guy', $GLOBALS['phpmailer']-&gt;mock_sent[0]['cc'][0][1]);
+                        $this-&gt;assertEquals('bcc@bcc.com', $GLOBALS['phpmailer']-&gt;mock_sent[0]['bcc'][0][0]);
+                        $this-&gt;assertEquals('The Blind Carbon Guy', $GLOBALS['phpmailer']-&gt;mock_sent[0]['bcc'][0][1]);
+                } else {
+                        $this-&gt;assertEquals($to, $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][0][0]);
+                        $this-&gt;assertEquals($cc, $GLOBALS['phpmailer']-&gt;mock_sent[0]['cc'][0][0]);
+                        $this-&gt;assertEquals($bcc, $GLOBALS['phpmailer']-&gt;mock_sent[0]['bcc'][0][0]);
+                }
+
+                $this-&gt;assertEquals($message . &quot;\n&quot;, $GLOBALS['phpmailer']-&gt;mock_sent[0]['body']);
+                unset( $_SERVER['SERVER_NAME'] );
+        }
+
+        function test_wp_mail_multiple_rfc2822_to_addresses() {
+                $this-&gt;knownWPBug(17305);
+                
+                $to = &quot;Name &lt;address@tld.com&gt;, Another Name &lt;another_address@different-tld.com&gt;&quot;;
+                $subject = &quot;RFC2822 Testing&quot;;
+                $message = &quot;My RFC822 Test Message&quot;;
+
+                unset($GLOBALS['phpmailer']-&gt;mock_sent);
+                $_SERVER['SERVER_NAME'] = 'example.com';
+                wp_mail( $to, $subject, $message );
+
+                // WordPress 3.2 and later correctly split the address into the two parts and send them seperately to PHPMailer
+                // Earlier versions of PHPMailer were not touchy about the formatting of these arguments.
+                if ( version_compare( $GLOBALS['wp_version'], '3.1.9', '&gt;' ) ) {
+                        $this-&gt;assertEquals('address@tld.com', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][0][0]);
+                        $this-&gt;assertEquals('Name', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][0][1]);
+                        $this-&gt;assertEquals('another_address@different-tld.com', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][1][0]);
+                        $this-&gt;assertEquals('Another Name', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][1][1]);
+                } else {
+                        $this-&gt;assertEquals('Name &lt;address@tld.com&gt;', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][0][0]);
+                        $this-&gt;assertEquals('Another Name &lt;another_address@different-tld.com&gt;', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][1][0]);
+                }
+
+                $this-&gt;assertEquals($message . &quot;\n&quot;, $GLOBALS['phpmailer']-&gt;mock_sent[0]['body']);
+                unset( $_SERVER['SERVER_NAME'] );
+        }
+
+        function test_wp_mail_multiple_to_addresses() {
+                $to = &quot;address@tld.com, another_address@different-tld.com&quot;;
+                $subject = &quot;RFC2822 Testing&quot;;
+                $message = &quot;My RFC822 Test Message&quot;;
+
+                unset($GLOBALS['phpmailer']-&gt;mock_sent);
+                $_SERVER['SERVER_NAME'] = 'example.com';
+                wp_mail( $to, $subject, $message );
+
+                $this-&gt;assertEquals('address@tld.com', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][0][0]);
+                $this-&gt;assertEquals('another_address@different-tld.com', $GLOBALS['phpmailer']-&gt;mock_sent[0]['to'][1][0]);
+                $this-&gt;assertEquals($message . &quot;\n&quot;, $GLOBALS['phpmailer']-&gt;mock_sent[0]['body']);
+                unset( $_SERVER['SERVER_NAME'] );
+        }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class TestRedirectFunctions extends WPTestCase {
</span></span></pre>
</div>
</div>

</body>
</html>