Headshot Posted April 6, 2011 Share Posted April 6, 2011 Hi all, I am a total beginner at pretty much everything to do with Web development, but sadly especially beginner at PHP. I'm keen to learn though (even it if takes me a while to understand!). I am trying to add a simple form to a webpage that allows a visitor to fill in their name, then their email address plus a couple of other fields and click on a "submit" button. This will then send a basic email with the users information to a set email address. I've downloaded and installed "Formmail.php" into my website, I've created some inputs in the HTML, the HTML loads fine, I can see the form fields, but for the love of all things holy when I click "submit" I cannot get it to send email out. I am totally ignorant at how PHP (or any other scripting language) works, and especially ignorant at how Formmail.php works. I cannot figure out where it is asking for any SMTP server to use to send email (is it even using one?), or how it is is sending email? I realise the error I'm getting is something to do with authentication, but can't see how to get it to authenticate properly? I have an SMTP server I can use (if needed), with authentication credentials ready - but as said above, ignorance of how this is supposed to work is playing a big part with my failures here. The specific error I get when clicking on the "submit" button is this: Warning: mail() [function.mail]: SMTP server response: 530 SMTP authentication is required. in D:\Websites\synergytraining.co.uk\formmail.php on line 224 There was an unknown error while sending email. « go back So I guess it cannot authenticate with the email address I want to send to? I'm unsure as to how to do this though. I have tried changing some of the User Config setting below to no avail - I'd really appreciate some kind soul to help me please. Current Formmail.php code I have installed is below. Kind regards in advance. <?php /** * PHP version 5 */ # Copyright (c) 2002 Eli Sand # PHP FormMail v2.0 20030305 # Initialize variables $auth = NULL; $deny = NULL; $must = NULL; $post = NULL; $http = NULL; $form = NULL; $list = NULL; # Fix for magic quotes when enabled if (get_magic_quotes_gpc()) { foreach ($_POST as $key => $value) { $_POST["$key"] = stripslashes($value); } } # Detect any Windows operating system if (strstr(php_uname(), 'Windows')) { $IS_WINDOWS = TRUE; } # USER CONFIGURABLE SETTINGS # Authorized email address masks that can be used as the recipient $auth = "*@127.0.0.1, *@localhost, *@".str_replace('www.','',$_SERVER['SERVER_NAME']); # Email address masks that will be rejected if in the email field # $deny = "nobody@*, anonymous@*, postmaster@*"; # DO NOT EDIT ANYTHING PAST THIS POINT # Functions # Trim leading and trailing white space from array values function array_trim(&$value, $key) { $value = trim($value); } # Show an error message to the user function error_msg($error, $required = FALSE) { global $post; if (!empty($post['missing_fields_redirect']) && $required) { header('Location: ' . $post['missing_fields_redirect']); } elseif (!empty($post['error_redirect'])) { header('Location: ' . $post['error_redirect']); } else { echo "<html>\r\n"; echo "\t<head>\r\n"; echo "\t\t<title>Form Error</title>\r\n"; echo "\t\t<style type=\"text/css\">* {font-family: \"Verdana\", \"Arial\", \"Helvetica\", monospace;}</style>\r\n"; echo "\t</head>\r\n"; echo "\t<body>\r\n"; echo "\t\t<p>${error}</p>\r\n\t\t<p><small>« <a href=\"javascript: history.back();\">go back</a></small></p>\r\n"; echo "\t</body>\r\n"; echo "</html>\r\n"; } exit(); } # Basic pattern matching on an entire array function pattern_grep($input, $array) { foreach ($array as $value) { $value = addcslashes($value, '^.[]$()|{}\\'); $value = str_replace('*', '.*', $value); $value = str_replace('?', '.?', $value); $value = str_replace('+', '.+', $value); if (eregi('^' . $value . '$', $input)) { return TRUE; } } return FALSE; } # Main # Check to make sure the info was posted if ($_SERVER['REQUEST_METHOD'] == 'POST') { $post = array( 'recipient' => $_POST['recipient'], 'email' => $_POST['email'], 'subject' => $_POST['subject'], 'realname' => $_POST['realname'], 'required' => $_POST['required'], 'env_report' => $_POST['env_report'], 'sort' => $_POST['sort'], 'redirect' => $_POST['redirect'], 'error_redirect' => $_POST['error_redirect'], 'missing_fields_redirect' => $_POST['missing_fields_redirect'] ); $http = array( 'REMOTE_USER' => $_SERVER['REMOTE_USER'], 'REMOTE_ADDR' => $_SERVER['REMOTE_ADDR'], 'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT'] ); if (isset($must['required'])) { $post['required'] = $must['required'] . ',' . $_POST['required']; } if (isset($must['env_report'])) { $post['env_report'] = $must['env_report'] . ',' . $_POST['env_report']; } if (isset($must['redirect'])) { $post['redirect'] = $must['redirect']; } if (isset($must['error_redirect'])) { $post['error_redirect'] = $must['error_redirect']; } if (isset($must['missing_fields_redirect'])) { $post['missing_fields_redirect'] = $must['missing_fields_redirect']; } if (($auth = explode(',', $auth))) { array_walk($auth, 'array_trim'); } if (($deny = explode(',', $deny))) { array_walk($deny, 'array_trim'); } if ($_POST['security_code'] != $_SESSION['security_code']) { error_msg("Invalid security code."); } else { unset($_POST['security_code']); unset($_SESSION['security_code']); } # Check for missing required fields if ((!empty($post['required'])) && ($list = explode(',', $post['required']))) { $list[] = 'recipient'; $list[] = 'email'; array_walk($list, 'array_trim'); foreach ($list as $value) { if (!empty($value) && empty($_POST["$value"])) { error_msg("You have left a required field blank.", TRUE); } } } # Check the email addresses submitted if (pattern_grep($post['email'], $deny)) { error_msg("You have specified a banned email address."); } if (!eregi('^([a-zA-Z0-9\.\_\-]+)\@((([a-zA-Z0-9\-]+)\.)+([a-zA-Z]+))$', $post['email'])) { error_msg("You have specified an invalid email address."); } # Check if the recipients email address is authorized if ((!empty($post['recipient'])) && ($list = explode(',', $post['recipient']))) { array_walk($list, 'array_trim'); foreach ($list as $value) { if (!eregi('^([a-zA-Z0-9\.\_\-]+)\@((([a-zA-Z0-9\-]+)\.)+([a-zA-Z]+))$', $value)) { error_msg("The recipients email address is invalid."); } if (!pattern_grep($value, $auth)) { error_msg("The recipients email address is unauthorized."); } } } else { error_msg("There was an unknown error while checking the recipients email address."); } # Sort the fields if ((!empty($post['sort'])) && ($list = explode(',', $post['sort']))) { array_walk($list, 'array_trim'); foreach ($list as $value) { $form["$value"] = $_POST["$value"]; } } else { $form = $_POST; } # Create the message $subject = empty($post['subject']) ? "Web Reply" : $post['subject']; foreach ($form as $key => $value) { if (!array_key_exists($key, $post)) { $message .= "${key}: ${value}\r\n\r\n"; } } $message .= "Submitted by: <" . $post['email'] . "> on " . date('l, F jS, Y @ g:i:s a (O)') . "\r\n"; if (!empty($post['env_report'])) { if (($list = explode(',', $post['env_report']))) { $message .= "Sender Details:\r\n"; array_walk($list, 'array_trim'); foreach ($list as $value) { if (array_key_exists($value, $http)) { $message .= "\t${value}: " . $http["$value"] . "\r\n"; } } } } # Send out the email if (mail($post['recipient'], $subject, $message, "From: " . $post['email'] . "\r\nReply-To: " . $post['email'] . "\r\nX-Mailer: PHP FormMail")) { if (!empty($post['redirect'])) { header('Location: ' . $post['redirect']); } else { echo "<html>\r\n"; echo "\t<head>\r\n"; echo "\t\t<title>Thank you</title>\r\n"; echo "\t\t<style type=\"text/css\">* {font-family: \"Verdana\", \"Arial\", \"Helvetica\", monospace;}</style>\r\n"; echo "\t</head>\r\n"; echo "\t<body>\r\n"; echo "\t\t<p>Thank you for filling out the form.</p>\r\n\t\t<p><small>« <a href=\"javascript: history.back();\">go back</a></small></p>\r\n"; echo "\t</body>\r\n"; echo "</html>\r\n"; } } else error_msg("There was an unknown error while sending email."); } else error_msg("Invalid request method used."); Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/ Share on other sites More sharing options...
spiderwell Posted April 6, 2011 Share Posted April 6, 2011 it is likely you need to set ini_set("sendmail_from", $from); try asking also in the 3rd party scripts section, you might get a better response. Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197631 Share on other sites More sharing options...
Headshot Posted April 6, 2011 Author Share Posted April 6, 2011 Thank you Spiderwell, I will have a look at that and also re-post over in the 3rd party scripts section. Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197632 Share on other sites More sharing options...
Headshot Posted April 6, 2011 Author Share Posted April 6, 2011 it is likely you need to set ini_set("sendmail_from", $from); try asking also in the 3rd party scripts section, you might get a better response. Could anyone offer any help / advice on how to implement the above into "formmail.php"? Bear in mind that I know nothing! Many thanks, Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197635 Share on other sites More sharing options...
chaseman Posted April 6, 2011 Share Posted April 6, 2011 That form is a bit complex for a beginner, I don't know if you really want to learn PHP if you rather want to get the job done by compiling a website. If you belong to the former I recommend looking for a tutorial explaining how to build a quite simple contact form. I've built my first form with the book HeadFirst PHP & MySQL, that book is a good start and will teach you how to build a simple contact form. Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197640 Share on other sites More sharing options...
Headshot Posted April 6, 2011 Author Share Posted April 6, 2011 Thanks Chaseman, it's a bit of both really, I'm eager to learn, but in the pre-learning stage I just need to get the bit I'm stuck with finished, then I can get on and learn at my own pace. Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197645 Share on other sites More sharing options...
spiderwell Posted April 6, 2011 Share Posted April 6, 2011 put this line just before the mail() line ini_set("sendmail_from", "sending@from.com"); and see if that makes any change? look into php.ini check values for: SMTP = sendmail_from = Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197651 Share on other sites More sharing options...
Headshot Posted April 6, 2011 Author Share Posted April 6, 2011 Thanks Spiderwell, I added this in (obviously changing the "sending@from.com" bit to an actual email address): # Send out the email ini_set("sendmail_from", "sending@from.com"); if (mail($post['recipient'], $subject, $message, "From: " . $post['email'] . "\r\nReply-To: " . $post['email'] . "\r\nX-Mailer: PHP FormMail")) { but it made no difference sadly. RE: php.ini - I cannot find this file anywhere, wondering if that may be a big part of the issue? Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197673 Share on other sites More sharing options...
spiderwell Posted April 6, 2011 Share Posted April 6, 2011 have you tried to send mail with hard coded values first?, something like this: mail("myownemailaddress@blah.com", "my subject", "my body", "from@me.text.com") try it in its own page, thus keeping the non sending issue seperate from all the other code. Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197678 Share on other sites More sharing options...
Headshot Posted April 6, 2011 Author Share Posted April 6, 2011 I'll try that now - question aside - how does this form actually send email? I.e is it using a SMTP server somewhere? or is it all built into the code? Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197679 Share on other sites More sharing options...
spiderwell Posted April 6, 2011 Share Posted April 6, 2011 find more about mail() here http://php.net/manual/en/function.mail.php Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197682 Share on other sites More sharing options...
Pikachu2000 Posted April 6, 2011 Share Posted April 6, 2011 SMTP server response: 530 SMTP authentication is required. PHP's mail() function doesn't support SMTP authentication. You'll need to look into using a class such as PEAR::mail or PHPMailer if you need to authenticate to send mail. Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197702 Share on other sites More sharing options...
PFMaBiSmAd Posted April 6, 2011 Share Posted April 6, 2011 Also, by putting arbitrarily entered (from the form) email addresses into both the To: and From: fields, you are likely triggering your mail server's relaying restrictions and it wants your script to authenticate against a valid mail box hosted on the mail server before accepting the email. When either (or both) the To: or the From: field is a valid email address @your_domain and hosted on the sending mail server, you are satisfying the most commonly used relaying restrictions. When the To: address is your mail box on the sending mail server, the mail server will accept an email from php running on your_domain and/or when the From: address is your mail box on the sending mail server, the mail server will accept an email from php running on your_domain. Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197711 Share on other sites More sharing options...
Headshot Posted April 6, 2011 Author Share Posted April 6, 2011 OK, I've found an error in the log of my SMTP server showing that authentication isn't being given when the form attempts to send email. I've added in c:\php\php.ini authentication as given by "some" website: [mail function] ; For Win32 only. SMTP = localhost smtp_port = 25 username = user password = pass but it is still failing. Can anyone help with how / where to setup correct authentication, or is it impossible to do with [mail function]? as Pikachu2000 said below? If it is impossible, can anyone help me re-configure the form to use something that does support authenticaiton? Quote Link to comment https://forums.phpfreaks.com/topic/232848-total-beginner-plea-for-help-formmailphp/#findComment-1197806 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.