<?php
/*
 * A web form that both generates and uses PHPMailer code.
 * revised, updated and corrected 27/02/2013
 * by matt.sturdy@gmail.com
 */
require '../PHPMailerAutoload.php';

$CFG['smtp_debug'] = 2//0 == off, 1 for client output, 2 for client and server
$CFG['smtp_debugoutput'] = 'html';
$CFG['smtp_server'] = 'localhost';
$CFG['smtp_port'] = '25';
$CFG['smtp_authenticate'] = false;
$CFG['smtp_username'] = 'name@example.com';
$CFG['smtp_password'] = 'yourpassword';
$CFG['smtp_secure'] = 'None';

$from_name = (isset($_POST['From_Name'])) ? $_POST['From_Name'] : '';
$from_email = (isset($_POST['From_Email'])) ? $_POST['From_Email'] : '';
$to_name = (isset($_POST['To_Name'])) ? $_POST['To_Name'] : '';
$to_email = (isset($_POST['To_Email'])) ? $_POST['To_Email'] : '';
$cc_email = (isset($_POST['cc_Email'])) ? $_POST['cc_Email'] : '';
$bcc_email = (isset($_POST['bcc_Email'])) ? $_POST['bcc_Email'] : '';
$subject = (isset($_POST['Subject'])) ? $_POST['Subject'] : '';
$message = (isset($_POST['Message'])) ? $_POST['Message'] : '';
$test_type = (isset($_POST['test_type'])) ? $_POST['test_type'] : 'smtp';
$smtp_debug = (isset($_POST['smtp_debug'])) ? $_POST['smtp_debug'] : $CFG['smtp_debug'];
$smtp_server = (isset($_POST['smtp_server'])) ? $_POST['smtp_server'] : $CFG['smtp_server'];
$smtp_port = (isset($_POST['smtp_port'])) ? $_POST['smtp_port'] : $CFG['smtp_port'];
$smtp_secure strtolower((isset($_POST['smtp_secure'])) ? $_POST['smtp_secure'] : $CFG['smtp_secure']);
$smtp_authenticate = (isset($_POST['smtp_authenticate'])) ?
    
$_POST['smtp_authenticate'] : $CFG['smtp_authenticate'];
$authenticate_password = (isset($_POST['authenticate_password'])) ?
    
$_POST['authenticate_password'] : $CFG['smtp_password'];
$authenticate_username = (isset($_POST['authenticate_username'])) ?
    
$_POST['authenticate_username'] : $CFG['smtp_username'];

// storing all status output from the script to be shown to the user later
$results_messages = array();

// $example_code represents the "final code" that we're using, and will
// be shown to the user at the end.
$example_code "\nrequire_once '../PHPMailerAutoload.php';";
$example_code .= "\n\n\$results_messages = array();";

$mail = new PHPMailer(true);  //PHPMailer instance with exceptions enabled
$mail->CharSet 'utf-8';
ini_set('default_charset''UTF-8');
$mail->Debugoutput $CFG['smtp_debugoutput'];
$example_code .= "\n\n\$mail = new PHPMailer(true);";
$example_code .= "\n\$mail->CharSet = 'utf-8';";
$example_code .= "\nini_set('default_charset', 'UTF-8');";

class 
phpmailerAppException extends phpmailerException
{
}

$example_code .= "\n\nclass phpmailerAppException extends phpmailerException {}";
$example_code .= "\n\ntry {";

// Convert a string to its JavaScript representation.
function JSString($s) {
  static 
$from = array("\\""/""\n""\t""\r""\b""\f"'"');
  static 
$to = array('\\\\''\\/''\\n''\\t''\\r''\\b''\\f''\\"');
  return 
is_null($s)? 'null''"' str_replace($from$to"$s") . '"';
}

try {
    if (isset(
$_POST["submit"]) && $_POST['submit'] == "Submit") {
        
$to $to_email;
        if (!
PHPMailer::validateAddress($to)) {
            throw new 
phpmailerAppException("Email address " $to " is invalid -- aborting!");
        }

        
$example_code .= "\n\$to = '" addslashes($to_email) . "';";
        
$example_code .= "\nif(!PHPMailer::validateAddress(\$to)) {";
        
$example_code .= "\n  throw new phpmailerAppException(\"Email address \" . " .
            
"\$to . \" is invalid -- aborting!\");";
        
$example_code .= "\n}";

        switch (
$test_type) {
            case 
'smtp':
                
$mail->isSMTP(); // telling the class to use SMTP
                
$mail->SMTPDebug = (integer)$smtp_debug;
                
$mail->Host $smtp_server// SMTP server
                
$mail->Port = (integer)$smtp_port// set the SMTP port
                
if ($smtp_secure) {
                    
$mail->SMTPSecure strtolower($smtp_secure);
                }
                
$mail->SMTPAuth array_key_exists('smtp_authenticate'$_POST); // enable SMTP authentication?
                
if (array_key_exists('smtp_authenticate'$_POST)) {
                    
$mail->Username $authenticate_username// SMTP account username
                    
$mail->Password $authenticate_password// SMTP account password
                
}

                
$example_code .= "\n\$mail->isSMTP();";
                
$example_code .= "\n\$mail->SMTPDebug  = " . (integer) $smtp_debug ";";
                
$example_code .= "\n\$mail->Host       = \"" addslashes($smtp_server) . "\";";
                
$example_code .= "\n\$mail->Port       = \"" addslashes($smtp_port) . "\";";
                
$example_code .= "\n\$mail->SMTPSecure = \"" addslashes(strtolower($smtp_secure)) . "\";";
                
$example_code .= "\n\$mail->SMTPAuth   = " . (array_key_exists(
                    
'smtp_authenticate',
                    
$_POST
                
) ? 'true' 'false') . ";";
                if (
array_key_exists('smtp_authenticate'$_POST)) {
                    
$example_code .= "\n\$mail->Username   = \"" addslashes($authenticate_username) . "\";";
                    
$example_code .= "\n\$mail->Password   = \"" addslashes($authenticate_password) . "\";";
                }
                break;
            case 
'mail':
                
$mail->isMail(); // telling the class to use PHP's mail()
                
$example_code .= "\n\$mail->isMail();";
                break;
            case 
'sendmail':
                
$mail->isSendmail(); // telling the class to use Sendmail
                
$example_code .= "\n\$mail->isSendmail();";
                break;
            case 
'qmail':
                
$mail->isQmail(); // telling the class to use Qmail
                
$example_code .= "\n\$mail->isQmail();";
                break;
            default:
                throw new 
phpmailerAppException('Invalid test_type provided');
        }

        try {
            if (
$_POST['From_Name'] != '') {
                
$mail->addReplyTo($from_email$from_name);
                
$mail->setFrom($from_email$from_name);

                
$example_code .= "\n\$mail->addReplyTo(\"" .
                    
addslashes($from_email) . "\", \"" addslashes($from_name) . "\");";
                
$example_code .= "\n\$mail->setFrom(\"" .
                    
addslashes($from_email) . "\", \"" addslashes($from_name) . "\");";
            } else {
                
$mail->addReplyTo($from_email);
                
$mail->setFrom($from_email$from_email);

                
$example_code .= "\n\$mail->addReplyTo(\"" addslashes($from_email) . "\");";
                
$example_code .= "\n\$mail->setFrom(\"" .
                    
addslashes($from_email) . "\", \"" addslashes($from_email) . "\");";
            }

            if (
$_POST['To_Name'] != '') {
                
$mail->addAddress($to$to_name);
                
$example_code .= "\n\$mail->addAddress(\"$to\", \"" addslashes($to_name) . "\");";
            } else {
                
$mail->addAddress($to);
                
$example_code .= "\n\$mail->addAddress(\"$to\");";
            }

            if (
$_POST['bcc_Email'] != '') {
                
$indiBCC explode(" "$bcc_email);
                foreach (
$indiBCC as $key => $value) {
                    
$mail->addBCC($value);
                    
$example_code .= "\n\$mail->addBCC(\"" addslashes($value) . "\");";
                }
            }

            if (
$_POST['cc_Email'] != '') {
                
$indiCC explode(" "$cc_Email);
                foreach (
$indiCC as $key => $value) {
                    
$mail->addCC($value);
                    
$example_code .= "\n\$mail->addCC(\"" addslashes($value) . "\");";
                }
            }
        } catch (
phpmailerException $e) { //Catch all kinds of bad addressing
            
throw new phpmailerAppException($e->getMessage());
        }
        
$mail->Subject $subject ' (PHPMailer test using ' strtoupper($test_type) . ')';
        
$example_code .= "\n\$mail->Subject  = \"" addslashes($subject) .
            
' (PHPMailer test using ' addslashes(strtoupper($test_type)) . ')";';

        if (
$_POST['Message'] == '') {
            
$body file_get_contents('contents.html');
        } else {
            
$body $message;
        }

        
$example_code .= "\n\$body = <<<'EOT'\n$body\nEOT;";

        
$mail->WordWrap 78// set word wrap to the RFC2822 limit
        
$mail->msgHTML($bodydirname(__FILE__), true); //Create message bodies and embed images

        
$example_code .= "\n\$mail->WordWrap = 78;";
        
$example_code .= "\n\$mail->msgHTML(\$body, dirname(__FILE__), true); //Create message bodies and embed images";

        
$mail->addAttachment('images/phpmailer_mini.png''phpmailer_mini.png'); // optional name
        
$mail->addAttachment('images/phpmailer.png''phpmailer.png'); // optional name
        
$example_code .= "\n\$mail->addAttachment('images/phpmailer_mini.png'," .
            
"'phpmailer_mini.png');  // optional name";
        
$example_code .= "\n\$mail->addAttachment('images/phpmailer.png', 'phpmailer.png');  // optional name";

        
$example_code .= "\n\ntry {";
        
$example_code .= "\n  \$mail->send();";
        
$example_code .= "\n  \$results_messages[] = \"Message has been sent using " .
            
addslashes(strtoupper($test_type)) . "\";";
        
$example_code .= "\n}";
        
$example_code .= "\ncatch (phpmailerException \$e) {";
        
$example_code .= "\n  throw new phpmailerAppException('Unable to send to: ' . \$to. ': '.\$e->getMessage());";
        
$example_code .= "\n}";

        try {
            
$mail->send();
            
$results_messages[] = "Message has been sent using " strtoupper($test_type);
        } catch (
phpmailerException $e) {
            throw new 
phpmailerAppException("Unable to send to: " $to ': ' $e->getMessage());
        }
    }
} catch (
phpmailerAppException $e) {
    
$results_messages[] = $e->errorMessage();
}
$example_code .= "\n}";
$example_code .= "\ncatch (phpmailerAppException \$e) {";
$example_code .= "\n  \$results_messages[] = \$e->errorMessage();";
$example_code .= "\n}";
$example_code .= "\n\nif (count(\$results_messages) > 0) {";
$example_code .= "\n  echo \"<h2>Run results</h2>\\n\";";
$example_code .= "\n  echo \"<ul>\\n\";";
$example_code .= "\nforeach (\$results_messages as \$result) {";
$example_code .= "\n  echo \"<li>\$result</li>\\n\";";
$example_code .= "\n}";
$example_code .= "\necho \"</ul>\\n\";";
$example_code .= "\n}";
?><!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>PHPMailer Test Page</title>
    <script type="text/javascript" src="scripts/shCore.js"></script>
    <script type="text/javascript" src="scripts/shBrushPhp.js"></script>
    <link type="text/css" rel="stylesheet" href="styles/shCore.css">
    <link type="text/css" rel="stylesheet" href="styles/shThemeDefault.css">
    <style>
        body {
            font-family: Arial, Helvetica, sans-serif;
            font-size: 1em;
            padding: 1em;
        }

        table {
            margin: 0 auto;
            border-spacing: 0;
            border-collapse: collapse;
        }

        table.column {
            border-collapse: collapse;
            background-color: #FFFFFF;
            padding: 0.5em;
            width: 35em;
        }

        td {
            font-size: 1em;
            padding: 0.1em 0.25em;
            -moz-border-radius: 1em;
            -webkit-border-radius: 1em;
            border-radius: 1em;
        }

        td.colleft {
            text-align: right;
            width: 35%;
        }

        td.colrite {
            text-align: left;
            width: 65%;
        }

        fieldset {
            padding: 1em 1em 1em 1em;
            margin: 0 2em;
            border-radius: 1.5em;
            -webkit-border-radius: 1em;
            -moz-border-radius: 1em;
        }

        fieldset.inner {
            width: 40%;
        }

        fieldset:hover, tr:hover {
            background-color: #fafafa;
        }

        legend {
            font-weight: bold;
            font-size: 1.1em;
        }

        div.column-left {
            float: left;
            width: 45em;
            height: 31em;
        }

        div.column-right {
            display: inline;
            width: 45em;
            max-height: 31em;
        }

        input.radio {
            float: left;
        }

        div.radio {
            padding: 0.2em;
        }
    </style>
    <script>
        SyntaxHighlighter.config.clipboardSwf = 'scripts/clipboard.swf';
        SyntaxHighlighter.all();

        function startAgain() {
            var post_params = {
                "From_Name": <?php echo JSString($from_name); ?>,
                "From_Email": <?php echo JSString($from_email); ?>,
                "To_Name": <?php echo JSString($to_name); ?>,
                "To_Email": <?php echo JSString($to_email); ?>,
                "cc_Email": <?php echo JSString($cc_email); ?>,
                "bcc_Email": <?php echo JSString($bcc_email); ?>,
                "Subject": <?php echo JSString($subject); ?>,
                "Message": <?php echo JSString($message); ?>,
                "test_type": <?php echo JSString($test_type); ?>,
                "smtp_debug": <?php echo JSString($smtp_debug); ?>,
                "smtp_server": <?php echo JSString($smtp_server); ?>,
                "smtp_port": <?php echo JSString($smtp_port); ?>,
                "smtp_secure": <?php echo JSString($smtp_secure); ?>,
                "smtp_authenticate": <?php echo JSString($smtp_authenticate); ?>,
                "authenticate_username": <?php echo JSString($authenticate_username); ?>,
                "authenticate_password": <?php echo JSString($authenticate_password); ?>
            };

            var resetForm = document.createElement("form");
            resetForm.setAttribute("method", "POST");
            resetForm.setAttribute("path", "index.php");

            for (var k in post_params) {
                var h = document.createElement("input");
                h.setAttribute("type", "hidden");
                h.setAttribute("name", k);
                h.setAttribute("value", post_params[k]);
                resetForm.appendChild(h);
            }

            document.body.appendChild(resetForm);
            resetForm.submit();
        }

        function showHideDiv(test, element_id) {
            var ops = {"smtp-options-table": "smtp"};

            if (test == ops[element_id]) {
                document.getElementById(element_id).style.display = "block";
            } else {
                document.getElementById(element_id).style.display = "none";
            }
        }
    </script>
</head>
<body>
<?php
if (version_compare(PHP_VERSION'5.0.0''<')) {
    echo 
'Current PHP version: ' phpversion() . "<br>";
    echo exit(
"ERROR: Wrong PHP version. Must be PHP 5 or above.");
}

if (
count($results_messages) > 0) {
    echo 
'<h2>Run results</h2>';
    echo 
'<ul>';
    foreach (
$results_messages as $result) {
        echo 
"<li>$result</li>";
    }
    echo 
'</ul>';
}

if (isset(
$_POST["submit"]) && $_POST["submit"] == "Submit") {
    echo 
"<button type=\"submit\" onclick=\"startAgain();\">Start Over</button><br>\n";
    echo 
"<br><span>Script:</span>\n";
    echo 
"<pre class=\"brush: php;\">\n";
    echo 
htmlentities($example_code);
    echo 
"\n</pre>\n";
    echo 
"\n<hr style=\"margin: 3em;\">\n";
}
?>
<form method="POST" enctype="multipart/form-data">
    <div>
        <div class="column-left">
            <fieldset>
                <legend>Mail Details</legend>
                <table border="1" class="column">
                    <tr>
                        <td class="colleft">
                            <label for="From_Name"><strong>From</strong> Name</label>
                        </td>
                        <td class="colrite">
                            <input type="text" id="From_Name" name="From_Name" value="<?php echo htmlentities($from_name); ?>"
                                   style="width:95%;" autofocus placeholder="Your Name">
                        </td>
                    </tr>
                    <tr>
                        <td class="colleft">
                            <label for="From_Email"><strong>From</strong> Email Address</label>
                        </td>
                        <td class="colrite">
                            <input type="text" id="From_Email" name="From_Email" value="<?php echo htmlentities($from_email); ?>"
                                   style="width:95%;" required placeholder="Your.Email@example.com">
                        </td>
                    </tr>
                    <tr>
                        <td class="colleft">
                            <label for="To_Name"><strong>To</strong> Name</label>
                        </td>
                        <td class="colrite">
                            <input type="text" id="To_Name" name="To_Name" value="<?php echo htmlentities($to_name); ?>"
                                   style="width:95%;" placeholder="Recipient's Name">
                        </td>
                    </tr>
                    <tr>
                        <td class="colleft">
                            <label for="To_Email"><strong>To</strong> Email Address</label>
                        </td>
                        <td class="colrite">
                            <input type="text" id="To_Email" name="To_Email" value="<?php echo htmlentities($to_email); ?>"
                                   style="width:95%;" required placeholder="Recipients.Email@example.com">
                        </td>
                    </tr>
                    <tr>
                        <td class="colleft">
                            <label for="cc_Email"><strong>CC Recipients</strong><br>
                                <small>(separate with commas)</small>
                            </label>
                        </td>
                        <td class="colrite">
                            <input type="text" id="cc_Email" name="cc_Email" value="<?php echo htmlentities($cc_email); ?>"
                                   style="width:95%;" placeholder="cc1@example.com, cc2@example.com">
                        </td>
                    </tr>
                    <tr>
                        <td class="colleft">
                            <label for="bcc_Email"><strong>BCC Recipients</strong><br>
                                <small>(separate with commas)</small>
                            </label>
                        </td>
                        <td class="colrite">
                            <input type="text" id="bcc_Email" name="bcc_Email" value="<?php echo htmlentities($bcc_email); ?>"
                                   style="width:95%;" placeholder="bcc1@example.com, bcc2@example.com">
                        </td>
                    </tr>
                    <tr>
                        <td class="colleft">
                            <label for="Subject"><strong>Subject</strong></label>
                        </td>
                        <td class="colrite">
                            <input type="text" name="Subject" id="Subject" value="<?php echo htmlentities($subject); ?>"
                                   style="width:95%;" placeholder="Email Subject">
                        </td>
                    </tr>
                    <tr>
                        <td class="colleft">
                            <label for="Message"><strong>Message</strong><br>
                                <small>If blank, will use content.html</small>
                            </label>
                        </td>
                        <td class="colrite">
                            <textarea name="Message" id="Message" style="width:95%;height:5em;"
                                      placeholder="Body of your email"><?php echo htmlentities($message); ?></textarea>
                        </td>
                    </tr>
                </table>
                <div style="margin:1em 0;">Test will include two attachments.</div>
            </fieldset>
        </div>
        <div class="column-right">
            <fieldset class="inner"> <!-- SELECT TYPE OF MAIL -->
                <legend>Mail Test Specs</legend>
                <table border="1" class="column">
                    <tr>
                        <td class="colleft">Test Type</td>
                        <td class="colrite">
                            <div class="radio">
                                <label for="radio-mail">Mail()</label>
                                <input class="radio" type="radio" name="test_type" value="mail" id="radio-mail"
                                       onclick="showHideDiv(this.value, 'smtp-options-table');"
                                       <?php echo ($test_type == 'mail') ? 'checked' ''?>
                                       required>
                            </div>
                            <div class="radio">
                                <label for="radio-sendmail">Sendmail</label>
                                <input class="radio" type="radio" name="test_type" value="sendmail" id="radio-sendmail"
                                       onclick="showHideDiv(this.value, 'smtp-options-table');"
                                       <?php echo ($test_type == 'sendmail') ? 'checked' ''?>
                                       required>
                            </div>
                            <div class="radio">
                                <label for="radio-qmail">Qmail</label>
                                <input class="radio" type="radio" name="test_type" value="qmail" id="radio-qmail"
                                       onclick="showHideDiv(this.value, 'smtp-options-table');"
                                       <?php echo ($test_type == 'qmail') ? 'checked' ''?>
                                       required>
                            </div>
                            <div class="radio">
                                <label for="radio-smtp">SMTP</label>
                                <input class="radio" type="radio" name="test_type" value="smtp" id="radio-smtp"
                                       onclick="showHideDiv(this.value, 'smtp-options-table');"
                                       <?php echo ($test_type == 'smtp') ? 'checked' ''?>
                                       required>
                            </div>
                        </td>
                    </tr>
                </table>
                <div id="smtp-options-table" style="margin:1em 0 0 0;
<?php if ($test_type != 'smtp') {
    echo 
"display: none;";
?>">
                    <span style="margin:1.25em 0; display:block;"><strong>SMTP Specific Options:</strong></span>
                    <table border="1" class="column">
                        <tr>
                            <td class="colleft"><label for="smtp_debug">SMTP Debug ?</label></td>
                            <td class="colrite">
                                <select size="1" id="smtp_debug" name="smtp_debug">
                                    <option <?php echo ($smtp_debug == '0') ? 'selected' ''?> value="0">
                                        0 - Disabled
                                    </option>
                                    <option <?php echo ($smtp_debug == '1') ? 'selected' ''?> value="1">
                                        1 - Client messages
                                    </option>
                                    <option <?php echo ($smtp_debug == '2') ? 'selected' ''?> value="2">
                                        2 - Client and server messages
                                    </option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td class="colleft"><label for="smtp_server">SMTP Server</label></td>
                            <td class="colrite">
                                <input type="text" id="smtp_server" name="smtp_server"
                                       value="<?php echo htmlentities($smtp_server); ?>" style="width:95%;"
                                       placeholder="smtp.server.com">
                            </td>
                        </tr>
                        <tr>
                            <td class="colleft" style="width: 5em;"><label for="smtp_port">SMTP Port</label></td>
                            <td class="colrite">
                                <input type="text" name="smtp_port" id="smtp_port" size="3"
                                       value="<?php echo htmlentities($smtp_port); ?>" placeholder="Port">
                            </td>
                        </tr>
                        <tr>
                            <td class="colleft"><label for="smtp_secure">SMTP Security</label></td>
                            <td>
                                <select size="1" name="smtp_secure" id="smtp_secure">
                                    <option <?php echo ($smtp_secure == 'none') ? 'selected' '' ?>>None</option>
                                    <option <?php echo ($smtp_secure == 'tls') ? 'selected' '' ?>>TLS</option>
                                    <option <?php echo ($smtp_secure == 'ssl') ? 'selected' '' ?>>SSL</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td class="colleft"><label for="smtp-authenticate">SMTP Authenticate?</label></td>
                            <td class="colrite">
                                <input type="checkbox" id="smtp-authenticate"
                                       name="smtp_authenticate"
<?php if ($smtp_authenticate != '') {
    echo 
"checked";
?>
                                       value="true">
                            </td>
                        </tr>
                        <tr>
                            <td class="colleft"><label for="authenticate_username">Authenticate Username</label></td>
                            <td class="colrite">
                                <input type="text" id="authenticate_username" name="authenticate_username"
                                       value="<?php echo htmlentities($authenticate_username); ?>" style="width:95%;"
                                       placeholder="SMTP Server Username">
                            </td>
                        </tr>
                        <tr>
                            <td class="colleft"><label for="authenticate_password">Authenticate Password</label></td>
                            <td class="colrite">
                                <input type="password" name="authenticate_password" id="authenticate_password"
                                       value="<?php echo htmlentities($authenticate_password); ?>" style="width:95%;"
                                       placeholder="SMTP Server Password">
                            </td>
                        </tr>
                    </table>
                </div>
            </fieldset>
        </div>
        <br style="clear:both;">

        <div style="margin-left:2em; margin-bottom:5em; float:left;">
            <div style="margin-bottom: 1em; ">
                <input type="submit" value="Submit" name="submit">
            </div>
            <?php echo 'Current PHP version: ' phpversion(); ?>
        </div>
    </div>
</form>
</body>
</html>