[ Index ] |
|
Code source de CMS made simple 1.0.5 |
1 <?php 2 /******************* 3 Unit Test 4 Type: phpmailer class 5 ********************/ 6 7 $INCLUDE_DIR = "../"; 8 9 require ("phpunit.php"); 10 require($INCLUDE_DIR . "class.phpmailer.php"); 11 error_reporting(E_ALL); 12 13 /** 14 * Performs authentication tests 15 */ 16 class phpmailerTest extends TestCase 17 { 18 /** 19 * Holds the default phpmailer instance. 20 * @private 21 * @type object 22 */ 23 var $Mail = false; 24 25 /** 26 * Holds the SMTP mail host. 27 * @public 28 * @type string 29 */ 30 var $Host = ""; 31 32 /** 33 * Holds the change log. 34 * @private 35 * @type string array 36 */ 37 var $ChangeLog = array(); 38 39 /** 40 * Holds the note log. 41 * @private 42 * @type string array 43 */ 44 var $NoteLog = array(); 45 46 /** 47 * Class constuctor. 48 */ 49 function phpmailerTest($name) { 50 /* must define this constructor */ 51 $this->TestCase( $name ); 52 } 53 54 /** 55 * Run before each test is started. 56 */ 57 function setUp() { 58 global $global_vars; 59 global $INCLUDE_DIR; 60 61 $this->Mail = new PHPMailer(); 62 63 $this->Mail->Priority = 3; 64 $this->Mail->Encoding = "8bit"; 65 $this->Mail->CharSet = "iso-8859-1"; 66 $this->Mail->From = "unit_test@phpmailer.sf.net"; 67 $this->Mail->FromName = "Unit Tester"; 68 $this->Mail->Sender = ""; 69 $this->Mail->Subject = "Unit Test"; 70 $this->Mail->Body = ""; 71 $this->Mail->AltBody = ""; 72 $this->Mail->WordWrap = 0; 73 $this->Mail->Host = $global_vars["mail_host"]; 74 $this->Mail->Port = 25; 75 $this->Mail->Helo = "localhost.localdomain"; 76 $this->Mail->SMTPAuth = false; 77 $this->Mail->Username = ""; 78 $this->Mail->Password = ""; 79 $this->Mail->PluginDir = $INCLUDE_DIR; 80 $this->Mail->AddReplyTo("no_reply@phpmailer.sf.net", "Reply Guy"); 81 $this->Mail->Sender = "unit_test@phpmailer.sf.net"; 82 83 if(strlen($this->Mail->Host) > 0) 84 $this->Mail->Mailer = "smtp"; 85 else 86 { 87 $this->Mail->Mailer = "mail"; 88 $this->Sender = "unit_test@phpmailer.sf.net"; 89 } 90 91 global $global_vars; 92 $this->SetAddress($global_vars["mail_to"], "Test User"); 93 if(strlen($global_vars["mail_cc"]) > 0) 94 $this->SetAddress($global_vars["mail_cc"], "Carbon User", "cc"); 95 } 96 97 /** 98 * Run after each test is completed. 99 */ 100 function tearDown() { 101 // Clean global variables 102 $this->Mail = NULL; 103 $this->ChangeLog = array(); 104 $this->NoteLog = array(); 105 } 106 107 108 /** 109 * Build the body of the message in the appropriate format. 110 * @private 111 * @returns void 112 */ 113 function BuildBody() { 114 $this->CheckChanges(); 115 116 // Determine line endings for message 117 if($this->Mail->ContentType == "text/html" || strlen($this->Mail->AltBody) > 0) 118 { 119 $eol = "<br/>"; 120 $bullet = "<li>"; 121 $bullet_start = "<ul>"; 122 $bullet_end = "</ul>"; 123 } 124 else 125 { 126 $eol = "\n"; 127 $bullet = " - "; 128 $bullet_start = ""; 129 $bullet_end = ""; 130 } 131 132 $ReportBody = ""; 133 134 $ReportBody .= "---------------------" . $eol; 135 $ReportBody .= "Unit Test Information" . $eol; 136 $ReportBody .= "---------------------" . $eol; 137 $ReportBody .= "phpmailer version: " . $this->Mail->Version . $eol; 138 $ReportBody .= "Content Type: " . $this->Mail->ContentType . $eol; 139 140 if(strlen($this->Mail->Host) > 0) 141 $ReportBody .= "Host: " . $this->Mail->Host . $eol; 142 143 // If attachments then create an attachment list 144 if(count($this->Mail->attachment) > 0) 145 { 146 $ReportBody .= "Attachments:" . $eol; 147 $ReportBody .= $bullet_start; 148 for($i = 0; $i < count($this->Mail->attachment); $i++) 149 { 150 $ReportBody .= $bullet . "Name: " . $this->Mail->attachment[$i][1] . ", "; 151 $ReportBody .= "Encoding: " . $this->Mail->attachment[$i][3] . ", "; 152 $ReportBody .= "Type: " . $this->Mail->attachment[$i][4] . $eol; 153 } 154 $ReportBody .= $bullet_end . $eol; 155 } 156 157 // If there are changes then list them 158 if(count($this->ChangeLog) > 0) 159 { 160 $ReportBody .= "Changes" . $eol; 161 $ReportBody .= "-------" . $eol; 162 163 $ReportBody .= $bullet_start; 164 for($i = 0; $i < count($this->ChangeLog); $i++) 165 { 166 $ReportBody .= $bullet . $this->ChangeLog[$i][0] . " was changed to [" . 167 $this->ChangeLog[$i][1] . "]" . $eol; 168 } 169 $ReportBody .= $bullet_end . $eol . $eol; 170 } 171 172 // If there are notes then list them 173 if(count($this->NoteLog) > 0) 174 { 175 $ReportBody .= "Notes" . $eol; 176 $ReportBody .= "-----" . $eol; 177 178 $ReportBody .= $bullet_start; 179 for($i = 0; $i < count($this->NoteLog); $i++) 180 { 181 $ReportBody .= $bullet . $this->NoteLog[$i] . $eol; 182 } 183 $ReportBody .= $bullet_end; 184 } 185 186 // Re-attach the original body 187 $this->Mail->Body .= $eol . $eol . $ReportBody; 188 } 189 190 /** 191 * Check which default settings have been changed for the report. 192 * @private 193 * @returns void 194 */ 195 function CheckChanges() { 196 if($this->Mail->Priority != 3) 197 $this->AddChange("Priority", $this->Mail->Priority); 198 if($this->Mail->Encoding != "8bit") 199 $this->AddChange("Encoding", $this->Mail->Encoding); 200 if($this->Mail->CharSet != "iso-8859-1") 201 $this->AddChange("CharSet", $this->Mail->CharSet); 202 if($this->Mail->Sender != "") 203 $this->AddChange("Sender", $this->Mail->Sender); 204 if($this->Mail->WordWrap != 0) 205 $this->AddChange("WordWrap", $this->Mail->WordWrap); 206 if($this->Mail->Mailer != "mail") 207 $this->AddChange("Mailer", $this->Mail->Mailer); 208 if($this->Mail->Port != 25) 209 $this->AddChange("Port", $this->Mail->Port); 210 if($this->Mail->Helo != "localhost.localdomain") 211 $this->AddChange("Helo", $this->Mail->Helo); 212 if($this->Mail->SMTPAuth) 213 $this->AddChange("SMTPAuth", "true"); 214 } 215 216 /** 217 * Adds a change entry. 218 * @private 219 * @returns void 220 */ 221 function AddChange($sName, $sNewValue) { 222 $cur = count($this->ChangeLog); 223 $this->ChangeLog[$cur][0] = $sName; 224 $this->ChangeLog[$cur][1] = $sNewValue; 225 } 226 227 /** 228 * Adds a simple note to the message. 229 * @public 230 * @returns void 231 */ 232 function AddNote($sValue) { 233 $this->NoteLog[] = $sValue; 234 } 235 236 /** 237 * Adds all of the addresses 238 * @public 239 * @returns void 240 */ 241 function SetAddress($sAddress, $sName = "", $sType = "to") { 242 switch($sType) 243 { 244 case "to": 245 $this->Mail->AddAddress($sAddress, $sName); 246 break; 247 case "cc": 248 $this->Mail->AddCC($sAddress, $sName); 249 break; 250 case "bcc": 251 $this->Mail->AddBCC($sAddress, $sName); 252 break; 253 } 254 } 255 256 ///////////////////////////////////////////////// 257 // UNIT TESTS 258 ///////////////////////////////////////////////// 259 260 /** 261 * Try a plain message. 262 */ 263 function test_WordWrap() { 264 265 $this->Mail->WordWrap = 40; 266 $my_body = "Here is the main body of this message. It should " . 267 "be quite a few lines. It should be wrapped at the " . 268 "40 characters. Make sure that it is."; 269 $nBodyLen = strlen($my_body); 270 $my_body .= "\n\nThis is the above body length: " . $nBodyLen; 271 272 $this->Mail->Body = $my_body; 273 $this->Mail->Subject .= ": Wordwrap"; 274 275 $this->BuildBody(); 276 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 277 } 278 279 /** 280 * Try a plain message. 281 */ 282 function test_Low_Priority() { 283 284 $this->Mail->Priority = 5; 285 $this->Mail->Body = "Here is the main body. There should be " . 286 "a reply to address in this message."; 287 $this->Mail->Subject .= ": Low Priority"; 288 $this->Mail->AddReplyTo("nobody@nobody.com", "Nobody (Unit Test)"); 289 290 $this->BuildBody(); 291 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 292 } 293 294 /** 295 * Simple plain file attachment test. 296 */ 297 function test_Multiple_Plain_FileAttachment() { 298 299 $this->Mail->Body = "Here is the text body"; 300 $this->Mail->Subject .= ": Plain + Multiple FileAttachments"; 301 302 if(!$this->Mail->AddAttachment("test.png")) 303 { 304 $this->assert(false, $this->Mail->ErrorInfo); 305 return; 306 } 307 308 if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) 309 { 310 $this->assert(false, $this->Mail->ErrorInfo); 311 return; 312 } 313 314 $this->BuildBody(); 315 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 316 } 317 318 /** 319 * Simple plain string attachment test. 320 */ 321 function test_Plain_StringAttachment() { 322 323 $this->Mail->Body = "Here is the text body"; 324 $this->Mail->Subject .= ": Plain + StringAttachment"; 325 326 $sAttachment = "These characters are the content of the " . 327 "string attachment.\nThis might be taken from a ". 328 "database or some other such thing. "; 329 330 $this->Mail->AddStringAttachment($sAttachment, "string_attach.txt"); 331 332 $this->BuildBody(); 333 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 334 } 335 336 /** 337 * Plain quoted-printable message. 338 */ 339 function test_Quoted_Printable() { 340 341 $this->Mail->Body = "Here is the main body"; 342 $this->Mail->Subject .= ": Plain + Quoted-printable"; 343 $this->Mail->Encoding = "quoted-printable"; 344 345 $this->BuildBody(); 346 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 347 } 348 349 /** 350 * Try a plain message. 351 */ 352 function test_Html() { 353 354 $this->Mail->IsHTML(true); 355 $this->Mail->Subject .= ": HTML only"; 356 357 $this->Mail->Body = "This is a <b>test message</b> written in HTML. </br>" . 358 "Go to <a href=\"http://phpmailer.sourceforge.net/\">" . 359 "http://phpmailer.sourceforge.net/</a> for new versions of " . 360 "phpmailer. <p/> Thank you!"; 361 362 $this->BuildBody(); 363 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 364 } 365 366 /** 367 * Simple HTML and attachment test 368 */ 369 function test_HTML_Attachment() { 370 371 $this->Mail->Body = "This is the <b>HTML</b> part of the email."; 372 $this->Mail->Subject .= ": HTML + Attachment"; 373 $this->Mail->IsHTML(true); 374 375 if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) 376 { 377 $this->assert(false, $this->Mail->ErrorInfo); 378 return; 379 } 380 381 $this->BuildBody(); 382 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 383 } 384 385 /** 386 * An embedded attachment test. 387 */ 388 function test_Embedded_Image() { 389 390 $this->Mail->Body = "Embedded Image: <img alt=\"phpmailer\" src=\"cid:my-attach\">" . 391 "Here is an image!</a>"; 392 $this->Mail->Subject .= ": Embedded Image"; 393 $this->Mail->IsHTML(true); 394 395 if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png", 396 "base64", "image/png")) 397 { 398 $this->assert(false, $this->Mail->ErrorInfo); 399 return; 400 } 401 402 $this->BuildBody(); 403 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 404 } 405 406 /** 407 * An embedded attachment test. 408 */ 409 function test_Multi_Embedded_Image() { 410 411 $this->Mail->Body = "Embedded Image: <img alt=\"phpmailer\" src=\"cid:my-attach\">" . 412 "Here is an image!</a>"; 413 $this->Mail->Subject .= ": Embedded Image + Attachment"; 414 $this->Mail->IsHTML(true); 415 416 if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png", 417 "base64", "image/png")) 418 { 419 $this->assert(false, $this->Mail->ErrorInfo); 420 return; 421 } 422 423 if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt")) 424 { 425 $this->assert(false, $this->Mail->ErrorInfo); 426 return; 427 } 428 429 $this->BuildBody(); 430 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 431 } 432 433 /** 434 * Simple multipart/alternative test. 435 */ 436 function test_AltBody() { 437 438 $this->Mail->Body = "This is the <b>HTML</b> part of the email."; 439 $this->Mail->AltBody = "Here is the text body of this message. " . 440 "It should be quite a few lines. It should be wrapped at the " . 441 "40 characters. Make sure that it is."; 442 $this->Mail->WordWrap = 40; 443 $this->AddNote("This is a mulipart alternative email"); 444 $this->Mail->Subject .= ": AltBody + Word Wrap"; 445 446 $this->BuildBody(); 447 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 448 } 449 450 /** 451 * Simple HTML and attachment test 452 */ 453 function test_AltBody_Attachment() { 454 455 $this->Mail->Body = "This is the <b>HTML</b> part of the email."; 456 $this->Mail->AltBody = "This is the text part of the email."; 457 $this->Mail->Subject .= ": AltBody + Attachment"; 458 $this->Mail->IsHTML(true); 459 460 if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt")) 461 { 462 $this->assert(false, $this->Mail->ErrorInfo); 463 return; 464 } 465 466 $this->BuildBody(); 467 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 468 469 $fp = fopen("message.txt", "w"); 470 fwrite($fp, $this->Mail->CreateHeader() . $this->Mail->CreateBody()); 471 fclose($fp); 472 } 473 474 function test_MultipleSend() { 475 $this->Mail->Body = "Sending two messages without keepalive"; 476 $this->BuildBody(); 477 $subject = $this->Mail->Subject; 478 479 $this->Mail->Subject = $subject . ": SMTP 1"; 480 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 481 482 $this->Mail->Subject = $subject . ": SMTP 2"; 483 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 484 } 485 486 function test_SmtpKeepAlive() { 487 $this->Mail->Body = "This was done using the SMTP keep-alive."; 488 $this->BuildBody(); 489 $subject = $this->Mail->Subject; 490 491 $this->Mail->SMTPKeepAlive = true; 492 $this->Mail->Subject = $subject . ": SMTP keep-alive 1"; 493 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 494 495 $this->Mail->Subject = $subject . ": SMTP keep-alive 2"; 496 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 497 $this->Mail->SmtpClose(); 498 } 499 500 /** 501 * Tests this denial of service attack: 502 * http://www.cybsec.com/vuln/PHPMailer-DOS.pdf 503 */ 504 function test_DenialOfServiceAttack() { 505 $this->Mail->Body = "This should no longer cause a denial of service."; 506 $this->BuildBody(); 507 508 $this->Mail->Subject = str_repeat("A", 998); 509 $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo); 510 } 511 512 function test_Error() { 513 $this->Mail->Subject .= ": This should be sent"; 514 $this->BuildBody(); 515 $this->Mail->ClearAllRecipients(); // no addresses should cause an error 516 $this->assert($this->Mail->IsError() == false, "Error found"); 517 $this->assert($this->Mail->Send() == false, "Send succeeded"); 518 $this->assert($this->Mail->IsError(), "No error found"); 519 $this->assertEquals('You must provide at least one ' . 520 'recipient email address.', $this->Mail->ErrorInfo); 521 $this->Mail->AddAddress(get("mail_to")); 522 $this->assert($this->Mail->Send(), "Send failed"); 523 } 524 } 525 526 /** 527 * Create and run test instance. 528 */ 529 530 if(isset($HTTP_GET_VARS)) 531 $global_vars = $HTTP_GET_VARS; 532 else 533 $global_vars = $_REQUEST; 534 535 if(isset($global_vars["submitted"])) 536 { 537 echo "Test results:<br>"; 538 $suite = new TestSuite( "phpmailerTest" ); 539 540 $testRunner = new TestRunner; 541 $testRunner->run($suite); 542 echo "<hr noshade/>"; 543 } 544 545 function get($sName) { 546 global $global_vars; 547 if(isset($global_vars[$sName])) 548 return $global_vars[$sName]; 549 else 550 return ""; 551 } 552 553 ?> 554 555 <html> 556 <body> 557 <h3>phpmailer Unit Test</h3> 558 By entering a SMTP hostname it will automatically perform tests with SMTP. 559 560 <form name="phpmailer_unit" action="phpmailer_test.php" method="get"> 561 <input type="hidden" name="submitted" value="1"/> 562 To Address: <input type="text" size="50" name="mail_to" value="<?php echo get("mail_to"); ?>"/> 563 <br/> 564 Cc Address: <input type="text" size="50" name="mail_cc" value="<?php echo get("mail_cc"); ?>"/> 565 <br/> 566 SMTP Hostname: <input type="text" size="50" name="mail_host" value="<?php echo get("mail_host"); ?>"/> 567 <p/> 568 <input type="submit" value="Run Test"/> 569 570 </form> 571 </body> 572 </html>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Tue Apr 3 18:50:37 2007 | par Balluche grâce à PHPXref 0.7 |