Jump to content

Adding SMTP Auth. to PHP form to email..completely lost.


jmiller145

Recommended Posts

Hey. I'm having some troubles with a php script I got a while ago for form to email on a website i'm currently working on. The client has recently switched to a different hosting server and they require SMTP authentication for the new cloudsites....I have about 5 different pretty detailed forms that i need to have the SMTP authentications placed into, but i have no idea what i'm doing. below is my current coding. i'm just not sure how to place the SMTP into the coding correctly. i've seen that i need to download swift or pear and i have no clue where to start. any help or direction would be greatly appreciated...thanks.

 

the current PHP script for my form to email:

 

<?php
$my_email = "studio@roharikproductions.com";
/*
Enter the continue link to offer the user after the form is sent.  If you do not change this, your visitor will be given a continue link to your homepage.
If you do change it, remove the "/" symbol below and replace with the name of the page to link to, eg: "mypage.htm" or "http://www.elsewhere.com/page.htm"
*/
$continue = "index.html";
/*
Step 3:
Save this file (FormToEmail.php) and upload it together with your webpage containing the form to your webspace.  IMPORTANT - The file name is case sensitive!  You must save it exactly as it is named above!  Do not put this script in your cgi-bin directory (folder) it may not work from there.
THAT'S IT, FINISHED!
You do not need to make any changes below this line.
*/
$errors = array();
// Remove $_COOKIE elements from $_REQUEST.
if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}
// Check all fields for an email header.
function recursive_array_check_header($element_value)
{
global $set;
if(!is_array($element_value)){if(preg_match("/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i",$element_value)){$set = 1;}}
else
{
foreach($element_value as $value){if($set){break;} recursive_array_check_header($value);}
}
}
recursive_array_check_header($_REQUEST);
if($set){$errors[] = "You cannot send an email header";}
unset($set);
// Validate email field.
if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{
if (empty($_POST['email2']) || $_POST['email2'] != $_POST['email']){$errors[] = "Email addresses do not match.";}

if(preg_match("/(%0A|%0D|\n+|\r+|:)/i",$_REQUEST['email'])){$errors[] = "Email address may not contain a new line or a colon";}
$_REQUEST['email'] = trim($_REQUEST['email']);
if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Email address is invalid";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Email address is invalid";}else{if(substr_count($exploded_email[1],".") == 0){$errors[] = "Email address is invalid";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Email address is invalid";}else{foreach($exploded_domain as $value){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}}}}}
}
// Check referrer is from same site.
if(!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))){$errors[] = "You must enable referrer logging to use the form";}
// Check for a blank form.
function recursive_array_check_blank($element_value)
{
global $set;
if(!is_array($element_value)){if(!empty($element_value)){$set = 1;}}
else
{
foreach($element_value as $value){if($set){break;} recursive_array_check_blank($value);}
}
}
recursive_array_check_blank($_REQUEST);
if(!$set){$errors[] = "You cannot send a blank form";}
unset($set);
// Display any errors and exit if errors exist.
if(count($errors)){foreach($errors as $value){print "$value<br>";} exit;}
if(!defined("PHP_EOL")){define("PHP_EOL", strtoupper(substr(PHP_OS,0,3) == "WIN") ? "\r\n" : "\n");}
// Build message.
function build_message($request_input){if(!isset($message_output)){$message_output ="";}if(!is_array($request_input)){$message_output = $request_input;}else{foreach($request_input as $key => $value){if(!empty($value)){if(!is_numeric($key)){$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;}else{$message_output .= build_message($value).", ";}}}}return rtrim($message_output,", ");}
$message = build_message($_REQUEST);
$message = $message . PHP_EOL.PHP_EOL."-- ".PHP_EOL."";
$message = stripslashes($message);
$subject = "Business Headshot Booking Form";
$headers = "From: " . $_REQUEST['email'];
mail($my_email,$subject,$message,$headers);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body,td,th {
color: #7F7F7F;
font-family: inheirit;
}
a:link {
color: #7F7F7F;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #7F7F7F;
}
a:hover {
text-decoration: underline;
color: #7F7F7F;
}
a:active {
text-decoration: none;
color: #7F7F7F;
}
body p {
font-size: 16px;
}
body p {
font-size: 24px;
}
body p {
text-align: center;
}
</style>
</head>
<body bgcolor="#e2e2e2" text="#7F7F7F" link="#7F7F7F" vlink="#7F7F7F" alink="#7F7F7F">
<div>
<center>
<b>Thank you <?php print stripslashes($_REQUEST['name']); ?></b>
<br>Your message has been sent
<p><a href="http://columbusbusinessheadshots.com/">Click here to continue</a></p>
</center>
</div>
</body>
</html>

 

 

i tried to add this into the code in hopes of a quick fix but that made the form not work at all:

 

$host = "host@host.com";
$username = "email@host.com";
$password = "emailpassword";

$smtp = Mail::factory('smtp',
  array ('host' => $host,
 'auth' => true,
 'username' => $username,
 'password' => $password));

 

i'm not sure if i add that just anywhere into the php script or if it needs to be in a certain area? also not sure what exactly i'll need to install or download onto the server as well.

 

thanks.

Link to comment
Share on other sites

You would replace your existing mail statement with the code needed to use one of the smtp mailer classes.

 

You would need to include the file containing the class definition, create an instance of that class, then setup the parameters it needs for smtp authentication and supply it with the to/from/subject/message data from your existing code.

 

I would recommend starting with one of the smtp authentication examples from the documentation for the class you choose and get that working first before you try to integrate it into your existing script.

Link to comment
Share on other sites

Alright..So I've gotten the smtp php process to work and successfully send an email. the problem though is that i can't seem to figure out how to get the information from the form on the html page to format into the email message.

 

the original form send a subject that was the same on everything and then included around 10 different fields from the form on the html page. any ideas?

 

here's the current php coding that sends a blank email:

 

<?php

include('Mail.php');
   $mail = Mail::factory("mail");

 $host = "host.com";
$username = "user@host.com";
$password = "password";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
 'auth' => true,
 'username' => $username,
 'password' => $password));

$to = "emailto@email.com";
$headers = array ('From' => $from,
 'To' => $to,
 'Subject' => $subject);
$smtp = Mail::factory('smtp',
 array ('host' => $host,
   'auth' => true,
   'username' => $username,
   'password' => $password));
$mail = $smtp->send($to, $headers, $body);


if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }


/*
Step 3:
Save this file (FormToEmail.php) and upload it together with your webpage containing the form to your webspace.  IMPORTANT - The file name is case sensitive!  You must save it exactly as it is named above!  Do not put this script in your cgi-bin directory (folder) it may not work from there.
THAT'S IT, FINISHED!
You do not need to make any changes below this line.
*/
$errors = array();
// Remove $_COOKIE elements from $_REQUEST.
if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}
// Check all fields for an email header.
function recursive_array_check_header($element_value)
{
global $set;
if(!is_array($element_value)){if(preg_match("/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i",$element_value)){$set = 1;}}
else
{
foreach($element_value as $value){if($set){break;} recursive_array_check_header($value);}
}
}
recursive_array_check_header($_REQUEST);
if($set){$errors[] = "You cannot send an email header";}
unset($set);
// Validate email field.
if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{
if (empty($_POST['email2']) || $_POST['email2'] != $_POST['email']){$errors[] = "Email addresses do not match.";}

if(preg_match("/(%0A|%0D|\n+|\r+|:)/i",$_REQUEST['email'])){$errors[] = "Email address may not contain a new line or a colon";}
$_REQUEST['email'] = trim($_REQUEST['email']);
if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Email address is invalid";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Email address is invalid";}else{if(substr_count($exploded_email[1],".") == 0){$errors[] = "Email address is invalid";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Email address is invalid";}else{foreach($exploded_domain as $value){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}}}}}
}
// Check referrer is from same site.
if(!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))){$errors[] = "You must enable referrer logging to use the form";}
// Check for a blank form.
function recursive_array_check_blank($element_value)
{
global $set;
if(!is_array($element_value)){if(!empty($element_value)){$set = 1;}}
else
{
foreach($element_value as $value){if($set){break;} recursive_array_check_blank($value);}
}
}
recursive_array_check_blank($_REQUEST);
if(!$set){$errors[] = "You cannot send a blank form";}
unset($set);
// Display any errors and exit if errors exist.
if(count($errors)){foreach($errors as $value){print "$value<br>";} exit;}
if(!defined("PHP_EOL")){define("PHP_EOL", strtoupper(substr(PHP_OS,0,3) == "WIN") ? "\r\n" : "\n");}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body,td,th {
color: #7F7F7F;
font-family: inheirit;
}
a:link {
color: #7F7F7F;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #7F7F7F;
}
a:hover {
text-decoration: underline;
color: #7F7F7F;
}
a:active {
text-decoration: none;
color: #7F7F7F;
}
body p {
font-size: 16px;
}
body p {
font-size: 24px;
}
body p {
text-align: center;
}
</style>
</head>
<body bgcolor="#e2e2e2" text="#7F7F7F" link="#7F7F7F" vlink="#7F7F7F" alink="#7F7F7F">
<div>
<center>
<b>Thank you <?php print stripslashes($_REQUEST['name']); ?></b>
<br>Your message has been sent
<p><a href="http://columbusbusinessheadshots.com/">Click here to continue</a></p>
</center>
</div>
</body>
</html>

 

thanks in advance.

Link to comment
Share on other sites

You have the variable $body ($mail = $smtp->send($to, $headers, $body); ) but you haven't defined it, something like this depending on the fields in the form...

 

$body=
'Name: '.$_POST['name'].'<br />
Email:    '.$_POST['email'].'<br />
Phone:    '.$_POST['phone'].'<br />
Message:<br /><br />
'.nl2br($_POST['message']).'
';

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.