From b6c97c7072748fa573d54a91c1be14e496fd9990 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 3 Aug 2013 22:26:38 +0200 Subject: FS#2677 support arrays in to, cc, bcc headers in Mailer This does not fix FS#2677, it only adds support for fixing it later. --- _test/tests/inc/mailer.test.php | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to '_test/tests/inc/mailer.test.php') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index 053e216b8..ef78692b3 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -15,6 +15,11 @@ class TestMailer extends Mailer { public function prepareHeaders() { return parent::prepareHeaders(); } + + public function cleanHeaders() { + parent::cleanHeaders(); + } + } class mailer_test extends DokuWikiTest { @@ -67,6 +72,47 @@ class mailer_test extends DokuWikiTest { $this->assertArrayNotHasKey('Test-Header',$headers); } + function test_addresses(){ + $mail = new TestMailer(); + + $mail->to('andi@splitbrain.org'); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('andi@splitbrain.org', $headers['To']); + + $mail->to(''); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('andi@splitbrain.org', $headers['To']); + + $mail->to('Andreas Gohr '); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('Andreas Gohr ', $headers['To']); + + $mail->to('Andreas Gohr , foo '); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('Andreas Gohr , foo ', $headers['To']); + + $mail->to('Möp , foo '); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('=?UTF-8?B?TcO2cA==?= , foo ', $headers['To']); + + $mail->to(array('Möp ',' foo ')); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('=?UTF-8?B?TcO2cA==?= , foo ', $headers['To']); + + $mail->to(array('Beet, L van ',' foo ')); + $mail->cleanHeaders(); + $headers = $mail->prop('headers'); + $this->assertEquals('=?UTF-8?B?QmVldCwgTCB2YW4=?= , foo ', $headers['To']); + + + } + function test_simplemail(){ global $conf; $conf['htmlmail'] = 0; -- cgit v1.2.3 From 0ee5ed1e998c1e67c4a0b7687977c4e2e0f29494 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 12 Oct 2013 12:41:24 +0200 Subject: IETF's message lint service as a test for Mailer class --- _test/tests/inc/mailer.test.php | 56 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to '_test/tests/inc/mailer.test.php') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index ef78692b3..fefb6f508 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -156,5 +156,61 @@ class mailer_test extends DokuWikiTest { $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.'); } + + /** + * @group internet + */ + function test_lint(){ + // prepare a simple multipart message + $mail = new TestMailer(); + $mail->to(array('Möp ',' foo ')); + $mail->subject('This is a töst'); + $mail->setBody('Hello Wörld, + + please don\'t burn, okay? + '); + $mail->attachContent('some test data', 'text/plain', 'text.txt'); + $msg = $mail->dump(); + $msglines = explode("\n", $msg); + + // ask message lint if it is okay + $html = new HTTPClient(); + $results = $html->post('http://tools.ietf.org/tools/msglint/msglint', array('msg'=>$msg)); + $this->assertTrue($results !== false); + + // parse the result lines + $lines = explode("\n", $results); + $rows = count($lines); + $i=0; + while(trim($lines[$i]) != '-----------' && $i<$rows) $i++; //skip preamble + for($i=$i+1; $i<$rows; $i++){ + $line = trim($lines[$i]); + if($line == '-----------') break; //skip appendix + + // get possible continuation of the line + while($lines[$i+1][0] == ' '){ + $line .= ' '.trim($lines[$i+1]); + $i++; + } + + // check the line for errors + if(substr($line,0,5) == 'ERROR'){ + // get the context in which the error occured + $errorin = ''; + if(preg_match('/line (\d+)$/', $line, $m)){ + $errorin .= "\n".$msglines[$m[1] - 1]; + } + if(preg_match('/lines (\d+)-(\d+)$/', $line, $m)){ + for($x=$m[1]-1; $x<$m[2]; $x++){ + $errorin .= "\n".$msglines[$x]; + } + } + + // raise the error + throw new Exception($line.$errorin); + } + } + + } } //Setup VIM: ex: et ts=4 : -- cgit v1.2.3 From d6e04b603a81d6c55c3bb71974689892762b6a01 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 12 Oct 2013 13:30:54 +0200 Subject: successfully validate Mailer mails with msglint --- _test/tests/inc/mailer.test.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to '_test/tests/inc/mailer.test.php') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index fefb6f508..feb454fcf 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -164,6 +164,7 @@ class mailer_test extends DokuWikiTest { // prepare a simple multipart message $mail = new TestMailer(); $mail->to(array('Möp ',' foo ')); + $mail->from('Me '); $mail->subject('This is a töst'); $mail->setBody('Hello Wörld, @@ -173,6 +174,8 @@ class mailer_test extends DokuWikiTest { $msg = $mail->dump(); $msglines = explode("\n", $msg); + //echo $msg; + // ask message lint if it is okay $html = new HTTPClient(); $results = $html->post('http://tools.ietf.org/tools/msglint/msglint', array('msg'=>$msg)); @@ -195,6 +198,10 @@ class mailer_test extends DokuWikiTest { // check the line for errors if(substr($line,0,5) == 'ERROR'){ + // ignore some errors + if(strpos($line, "missing mandatory header 'return-path'")) continue; #set by MDA + if(strpos($line, "bare newline in text body decoded")) continue; #seems to be false positive + // get the context in which the error occured $errorin = ''; if(preg_match('/line (\d+)$/', $line, $m)){ -- cgit v1.2.3 From ec82d005b6a02f137645cd756cccfbab7025047a Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 12 Oct 2013 14:07:59 +0200 Subject: check msglint for warnings, too --- _test/tests/inc/mailer.test.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to '_test/tests/inc/mailer.test.php') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index feb454fcf..3a89413b4 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -170,7 +170,7 @@ class mailer_test extends DokuWikiTest { please don\'t burn, okay? '); - $mail->attachContent('some test data', 'text/plain', 'text.txt'); + $mail->attachContent('some test data', 'text/plain', 'a text.txt'); $msg = $mail->dump(); $msglines = explode("\n", $msg); @@ -197,7 +197,7 @@ class mailer_test extends DokuWikiTest { } // check the line for errors - if(substr($line,0,5) == 'ERROR'){ + if(substr($line,0,5) == 'ERROR' || substr($line,0,7) == 'WARNING'){ // ignore some errors if(strpos($line, "missing mandatory header 'return-path'")) continue; #set by MDA if(strpos($line, "bare newline in text body decoded")) continue; #seems to be false positive -- cgit v1.2.3 From c8d2e830e238503225cac35736b815864d334b1d Mon Sep 17 00:00:00 2001 From: Christopher Smith Date: Wed, 16 Oct 2013 21:50:25 +0100 Subject: escape '$' in mailer test strings --- _test/tests/inc/mailer.test.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to '_test/tests/inc/mailer.test.php') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index 3a89413b4..dc234232f 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -50,8 +50,8 @@ class mailer_test extends DokuWikiTest { // set a bunch of test headers $mail->setHeader('test-header','bla'); $mail->setHeader('to','A valid ASCII name '); - $mail->setHeader('from',"Thös ne\needs\x00serious cleaning$§%."); - $mail->setHeader('bad',"Thös ne\needs\x00serious cleaning$§%.",false); + $mail->setHeader('from',"Thös ne\needs\x00serious cleaning\$§%."); + $mail->setHeader('bad',"Thös ne\needs\x00serious cleaning\$§%.",false); $mail->setHeader("weird\n*+\x00foo.-_@bar?",'now clean'); // are they set? -- cgit v1.2.3 From d1612d99b95fed9b053ebdb5e4c12f30aeb69203 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 20 Oct 2013 21:05:09 +0200 Subject: escaped another $ in mailer test --- _test/tests/inc/mailer.test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to '_test/tests/inc/mailer.test.php') diff --git a/_test/tests/inc/mailer.test.php b/_test/tests/inc/mailer.test.php index dc234232f..bac0c39ba 100644 --- a/_test/tests/inc/mailer.test.php +++ b/_test/tests/inc/mailer.test.php @@ -63,7 +63,7 @@ class mailer_test extends DokuWikiTest { $this->assertArrayHasKey('From',$headers); $this->assertEquals('Ths neeedsserious cleaning.',$headers['From']); $this->assertArrayHasKey('Bad',$headers); - $this->assertEquals("Thös ne\needs\x00serious cleaning$§%.",$headers['Bad']); + $this->assertEquals("Thös ne\needs\x00serious cleaning\$§%.",$headers['Bad']); $this->assertArrayHasKey('Weird+foo.-_@bar',$headers); // unset a header again -- cgit v1.2.3