form submission reverts to index.php template

I did some testing locally with your code. I think the problem is your form input names clashing with names reserved by WP. Also redirecting to success/error page should happen before get_header() to avoid any headers sent errors.

So, add some prefix/suffix to your input names, like so

<input type="text" name="my-name" placeholder="Your Name" class="input" id="name" required>

And move the submitting routine up,

if(isset($_POST['my-submit'])){
    if(mail($to, $subject, $message, $headers)){
      wp_redirect( home_url( '/email-success/' ) );
      exit;
    } else {
      wp_redirect( home_url( '/email-failure/' ) );
      exit;
    }
  }

get_header(); ?>
<!-- form html -->