PHP mail form with SMTP authentication

You can use this form, where SMTP authentication is required. If you have server details with an email address and password, that you have provided time of creating of email address. Before proceed these information are required like: Domain name, Server or Host name, SMTP/Outgoing server name and SMTP port. Alternatively, you can use this form if you have any valid email address password that exists on an external mail server, which accept SMTP connections.

The below are examples consists of 2 files, one that is the actual form your visitor will fill out and second one is the action file that authenticate and send the email.

STEP 1: 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_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>

STEP 2: CREATE THE SEND FORM SCRIPT:
Copy the below code and save it as "send_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 name of your mail server. (Commonly mail.yourdomain.com)
$username = "name@yourdomain.xyz";  // A valid email address you have setup on your hosting account
$from_address = "name@yourdomain.xyz";  // email addrress which you had created from your hosting account this should 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 = "25"; // This is the default port. Try port 26 if this port gives you issues, port can be differ, ask your hosting service provider

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);
$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 } } ?>

STEP 3: UPLOAD THE FILES:
To test the files you created, FTP to your domain and create a test folder (i.e. smtp-form). Upload the both files to that directory. Once you have uploaded the files, browse to http://www.yourdomain.xyz/smtp-form/contactform.htm (or whatever you named the contact form from Step 1)
As long as if, you used an email address with a valid server information, the email message should have arrived without error.
  • 1 Users Found This Useful
Was this answer helpful?

Related Articles

How to test Php SMTP email functionality?

You can test PHP SMTP functions with the following two examples. The first one is standard SMTP...

Powered by WHMCompleteSolution