## Sending Email

Mail service -- e.g. Mailgun, Sendgrid, etc.

### submit.php Example (uses Mailgun)

    <?php require_once 'vendor/autoload.php';

         $loader = new \Twig\Loader\FilesystemLoader('./templates');
         $twig = new \Twig\Environment($loader, [
             'cache' => './compilation_cache',
             'debug' => true,
             'auto_reload' => true
         ]);
         $requestTime = new DateTime();
         $requestTime->setTimestamp($_SERVER['REQUEST_TIME']);
         $requestTimeHuman = $requestTime->format('Y-m-d\TH:i:s');

         $echocontent = $twig->render('form-response-template.html',
              [
              'getparams' => $_GET,
              'postparams' => $_POST,
              'httpheaders' => getallheaders(),
              'httpmethod' => $_SERVER['REQUEST_METHOD'],
              'serverinfo' => $_SERVER,
              'requesttime' => $requestTimeHuman,
              'httpreferer' => $_SERVER['HTTP_REFERER']
              ]);
         ?>

         <?php

         require 'vendor/autoload.php';
         use Mailgun\Mailgun;

         $mailto = filter_var($_POST['__mailto'], FILTER_VALIDATE_EMAIL);
         $mailkey = '';
         if (preg_match('/^csci(e|s)12\-(spring|summer|fall)-\d{4}-[a-z]+[0-9]+$/',$_POST['__mailkey'])) {
            $mailkey = $_POST['__mailkey'];
         }

         // only send if POST and if __mailto and if __mailkey exist

         if (strcmp($_SERVER['REQUEST_METHOD'],'POST') == 0 && $mailto && $mailkey ) {
           error_log("FormSubmit | MAILGUN | $mailkey | $mailto |");
           // First, instantiate the SDK with your API credentials
           $MG_API_KEY = getenv('MG_API_KEY');
           $MG_DOMAIN = getenv('MG_DOMAIN');
           $MG_ = getenv('MG_');

           $mg = Mailgun::create($MG_API_KEY); // For US servers
           $domain = $MG_DOMAIN;

           // Now, compose and send your message.
           // $mg->messages()->send($domain, $params);
           $mg->messages()->send($domain, [
             ''    => $MG_,
             'to'      => $mailto,
             'subject' => 'Form Submission',
             'html'    => $echocontent
           ]);
         }

         echo($echocontent);
         ?>

### form_response_template.html

This is a PHP "Twig" template.

    <DOCTYPE html>
         <html lang="en">
           <head><title>Form Submission</title>
             <style>
               body, * { font-family: helvetica, sans-serif; }
               body { margin: 1rem 5%; }
               h2 { margin-top: 1.5rem; }
               table, td, th, tr { border-collapse: collapse; }
               table td, table th { border-collapse: collapse; vertical-align: top; padding: 0.5rem; border: thin solid #101010; }
               table thead tr { color: #ffffff;  background-color: rgb(100,100,100); font-size: larger;}
               table tbody tr:nth-child(even) { background-color: rgb(240,240,240); }
               table tbody tr th { text-align: left; }
               footer { margin-top: 4rem; padding: 0.5rem; background-color: rgb(240,240,240); border-top: thin solid black; }
               footer p { margin-top: 0.5em; margin-bottom: 0.5em; }
             </style>
           </head>

           <body>
             <h1>Form Submission</h1>
             {% if getparams %}
             <h2>GET Parameters</h2>
             <table>
               <thead>
                 <tr><th>Name</th><th>Value</th></tr>
               </thead>
               <tbody>
               {% for key, value in getparams %}
               <tr>
                 <th>{{ key }}</th>
                 <td>
                   {% if value is iterable %}
                   {% for v in value %}
                     {{ v }}{% if not(loop.last) %},<br/>{% endif %}
                   {% endfor %}
                   {% else %}
                     {{ value }}
                   {% endif %}
                 </td>
               </tr>
               {% endfor %}
               </tbody>
             </table>
             {% endif %}

             {% if postparams %}
             <h2>POST Parameters</h2>
             <table>
               <thead>
                 <tr><th>Name</th><th>Value</th></tr>
               </thead>
               <tbody>
               {% for key, value in postparams %}
               <tr>
                 <th>{{ key }}</th>
                 <td>
                   {% if value is iterable %}
                   {% for v in value %}
                     {{ v }}{% if not(loop.last) %},<br/>{% endif %}
                   {% endfor %}
                   {% else %}
                     {{ value }}
                   {% endif %}
                 </td>
               </tr>
               {% endfor %}
               </tbody>
             </table>
             {% endif %}

             {% if serverinfo %}
             <h2>Request Information</h2>
             <table>
               <thead>
                 <tr><th>Name</th><th>Value</th></tr>
               </thead>
               <tbody>
                 <tr><th>Request Time</th><td>{{ requesttime }}</td></tr>
                 <tr><th>Remote Address</th><td>{{ serverinfo['REMOTE_ADDR'] }}</td></tr>
                 <tr><th>HTTP Referrer</th><td><a href="{{ httpreferer }}">{{ httpreferer }}</a></td></tr>
                 <tr><th>HTTP Method</th><td>{{ httpmethod }}</td></tr>
               </tbody>
             </table>
             {% endif %}

             <footer>
               <p>This form submission tool is only for use by current students in <a href="https://cscie12.dce.harvard.edu/">CSCI E-12</a> and <a href="https://cscis12.dce.harvard.edu/">CSCI S-12</a> courses.</p><p>David Heitmeyer | <a href="https://extension.harvard.edu/">Harvard Extension School</a> | <a href="https://summer.harvard.edu/">Harvard Summer School</a></footer>
           </body>
          </html>