home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 April / CMCD0404.ISO / Software / Freeware / Programare / groupoffice-com-2.01 / classes / phpmailer / test / phpmailer_test.php next >
PHP Script  |  2004-03-08  |  18KB  |  559 lines

  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 = "nobody@example.com";
  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("rocks.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("rocks.png", "my-attach", "rocks.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("rocks.png", "my-attach", "rocks.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.     function test_Error() {
  501.         $this->BuildBody();
  502.         $this->Mail->Subject .= ": This should not be sent";
  503.         $this->Mail->ClearAllRecipients(); // no addresses should cause an error
  504.         $this->assert($this->Mail->IsError() == false, "Error found");
  505.         $this->assert($this->Mail->Send() == false, "Send succeeded");
  506.         $this->assert($this->Mail->IsError(), "No error found");
  507.         $this->assertEquals('You must provide at least one ' .
  508.                             'recipient email address.', $this->Mail->ErrorInfo);
  509.     }
  510. }  
  511.  
  512. /**
  513.  * Create and run test instance.
  514.  */
  515.  
  516. if(isset($HTTP_GET_VARS))
  517.     $global_vars = $HTTP_GET_VARS;
  518. else
  519.     $global_vars = $_REQUEST;
  520.  
  521. if(isset($global_vars["submitted"]))
  522. {
  523.     echo "Test results:<br>";
  524.     $suite = new TestSuite( "phpmailerTest" );
  525.     
  526.     $testRunner = new TestRunner;
  527.     $testRunner->run($suite);
  528.     echo "<hr noshade/>";
  529. }
  530.  
  531. function get($sName) {
  532.     global $global_vars;
  533.     if(isset($global_vars[$sName]))
  534.         return $global_vars[$sName];
  535.     else
  536.         return "";
  537. }
  538.  
  539. ?>
  540.  
  541. <html>
  542. <body>
  543. <h3>phpmailer Unit Test</h3>
  544. By entering a SMTP hostname it will automatically perform tests with SMTP.
  545.  
  546. <form name="phpmailer_unit" action="phpmailer_test.php" method="get">
  547. <input type="hidden" name="submitted" value="1"/>
  548. To Address: <input type="text" size="50" name="mail_to" value="<?php echo get("mail_to"); ?>"/>
  549. <br/>
  550. Cc Address: <input type="text" size="50" name="mail_cc" value="<?php echo get("mail_cc"); ?>"/>
  551. <br/>
  552. SMTP Hostname: <input type="text" size="50" name="mail_host" value="<?php echo get("mail_host"); ?>"/>
  553. <p/>
  554. <input type="submit" value="Run Test"/>
  555.  
  556. </form>
  557. </body>
  558. </html>
  559.