Knowledgebase

Using PEAR Mail to Create a PHP Mail Form that Uses SMTP Authentication

Posted by Josh Tobiansky on October 25 2013 02:51 PM

Authentication is required at Hostmysite. You can use the mail server assigned to your account as long as you use an email address and password that you've setup on that server. Alternatively, you can use any valid email address and password combination that exists on an external mail server, as long as that server supports SMTP connections and you obtain the server or host name and port information for it. The below example consists of two files. The first is the actual form your customers will fill out and the second is the action file which will authenticate and send the email.

**This form can be configured to your liking**


I. Create the Form: Copy the below code into your editor of choice and save it as contactform.htm

________________________________________

<html>
<form name="contactform" method="post" action="send_form_email.php">
<table width="450px">
<tr>
<td valign="top">
<label for="first_name">First Name *</label>
</td>
<td valign="top">
<input type="text" name="first_name" maxlength="50" size="30">
</td>
</tr>
<tr>
<td valign="top"">
<label for="last_name">Last Name *</label>
</td>
<td valign="top">
<input type="text" name="last_name" maxlength="50" size="30">
</td>
</tr>
<tr>
<td valign="top"">
<label for="home_address">Home Address</label>
</td>
<td valign="top">
<textarea name="home_address" maxlength="100" cols="25 Rows="6"></textarea>
</td>
</tr>
<tr>
<td valign="top">
<label for="email">Email Address *</label>
</td>
<td valign="top">
<input type="text" name="email" maxlength="80" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="telephone">Telephone Number</label>
</td>
<td valign="top">
<input type="text" name="telephone" maxlength="30" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="comments">Comments *</label>
</td>
<td valign="top">
<textarea name="comments" maxlength="1000" cols="25" rows="6"></textarea>
</td>
</tr>
<tr>
<td colspan="2" style="text-align:center"> * - Denotes a required field
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
</html>

________________________________________

 

II. Create the Send Form Script: Copy the below code and save it as send_form_email.php (do not change the file name unless you changed it in the contactform.htm code above)
________________________________________

<?php
if(isset($_POST['email'])) {
require_once "Mail.php"; //PEAR mail is already installed in our current environment

$email_to = "name@yourdomain.xyz";  //Enter the email you want to send the form to
$email_subject = "This is a test";  // You can put whatever subject here


$host = "mail.yourdomain.xyz";  // The hostname of your mail server
// If your email is with HostMySite, use the actual hostname of your mail server, for example:
//   SmarterMail: mailXX.safesecureweb.com OR win-mailXX.hostmanagement.net
//   OpenX-change:
smtp.hostmanagement.net

// Contact Support if you aren't sure what to enter here.

$username = "name@yourdomain.xyz";  // A valid email address you have setup 
$from_address = "name@yourdomain.xyz";  // If your mail is hosted with HostMySite this has to match the email address above 
$password = "your_password";  // Password for the above email address
$reply_to = "name@yourdomain.xyz";  //Enter the email you want customers to reply to
$port = "587"; // This is the default port. Try port 50 if this port gives you issues and your mail is hosted with HostMySite

function died($error) {
// your error code can go here 
echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
echo "These errors appear below.<br /><br />"; 
echo $error."<br /><br />"; 
echo "Please go back and fix these errors.<br /><br />";
die();
}

// Validate expected data exists
if(!isset($_POST['first_name']) || !isset($_POST['last_name']) || !isset($_POST['home_address']) || !isset($_POST['email']) || !isset($_POST['telephone']) || !isset($_POST['comments'])) {
died('We are sorry, but there appears to be a problem with the form you submitted.');
}

$first_name = $_POST['first_name']; // required 
$last_name = $_POST['last_name']; // required 
$home_address = $_POST['home_address']; // not required 
$email_from = $_POST['email']; // required 
$telephone = $_POST['telephone']; // not required 
$comments = $_POST['comments']; // required 
$error_message = ""; 
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';

$string_exp = "/^[A-Za-z .'-]+$/"; 
if(!preg_match($string_exp,$first_name)) {
$error_message .= 'The First Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$last_name)) {
$error_message .= 'The Last Name you entered does not appear to be valid.<br />';

if(strlen($comments) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n"; 
$email_message .= "Home Address: ".clean_string($home_address)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telephone: ".clean_string($telephone)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";

// This section creates the email headers
$auth = array('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password, 'port' => $port);
$headers = array('From' => $from_address, 'To' => $email_to, 'Subject' => $email_subject, 'Reply-To' => $reply_to);

// This section send the email
$smtp = Mail::factory('smtp', $auth);

$mail = $smtp->send($email_to, $headers, $email_message);

if (PEAR::isError($mail)) {?>
<!-- include your own failure message html here -->
 
Unfortunately, the message could not be sent at this time. Please try again later.

<!-- Uncomment the line below to see errors with sending the message -->
<!-- <?php echo("<p>". $mail->getMessage()."</p>"); ?> -->

<?php } else { ?>

<!-- include your own success message html here -->

Thank you for contacting us. We will be in touch with you very soon.

<?php } } ?>

________________________________________


III. Upload the Files: To test the files you created, connect to your site via FTP and create a test folder (i.e. formtest). Upload the two files to that directory. Once you have uploaded the files, browse to http://www.yourdomain.xyz/formtest/contactform.htm (or whatever you named the contact form from Step 1)

As long as you used a valid email address, along with the proper host mail server and port, the email message should have arrived without error. 

If you encounter any issues, please contact our support team.


Copyright © 2016 HostMySite