Onderstaand script heb ik op mijn site staan, maar werkt niet. Ik krijg de melding:
onbekende gebruiker.
In de dir staat een html file, en een bedankt file.
Hij is gechmod naar 777 ( de dir en de files)
Mijn server ondersteunt PHP. bij$refferers heb ik ook mijn servernaam al ingevuld, zonder resultaat
De url waar het script staat:
http://www.volierevogels.nl/formulier/mailformulier.php
<?
/*****************************************************************************
* *
* C O N F I G U R A T I O N *
* *
*****************************************************************************/
// email adres waar naar toe moet worden gezonden //////////////////////////////
// als leeg, dan wordt veld from gebruikt ('send_to' veld)
$send_to = "Webmaster www.volierevogels.nl <[email protected]>";
// set $send_cc adres als je een copy wilt ontvangen of mail naar ander adressen
// als voorbeeld: $send_cc = array('[email protected]', '[email protected]');
// of laat het leeg
$send_cc = array();
// Onderwerp. als leeg, gebruikt veld from ('subject' veld)
$subject = "Koopje";
// Toestaan Referres. laat leeg of maak lijst met domeinnamen
$referrers = array('');
// Bijlage
$attachment_enabled = 1;
////// Database - maak CSV file met data van verzonden formulieren /////////////
$database_enabled = 0;
$database_file = 'email.csv';
// Verzamel velden voor in database
// $database_velden = '*' - betekend alle velden, als in formulier
// $database_velden = array('from', 'subject') - alleen 'from', 'subject' velden
////// Redirect naar bedankt formulier na verzending
$redirect_url = 'http://www.volierevogels.nl/bedankt.html';;
////// Auto-Responder
////// Verstuur een automatisch antwoord
////// %veld naam% in response tekst.
$autoresponder_enabled = 1;
$autoresponder_from = $send_to;
$autoresponder_subject = "%subject% (autoresponse)";
$autoresponder_message = <<<MSG
Hallo %name_from%,
Bedankt voor uw bericht. We nemen uw aanvraag zo gauw mogelijk in behandeling.
--
MSG;
/*************** Verander hieronder niets ! ***********************/
function do_formmail(){
global $autoresponder_enabled, $database_enabled;
$form = get_form_data();
$errors = check_form($form);
if ($errors) {
display_errors($errors);
return;
}
send_mail($form);
if ($autoresponder_enabled)
auto_respond($form);
if ($database_enabled)
save_form($form);
redirect();
}
function redirect(){
global $redirect_url;
header("Location: $redirect_url");
exit();
}
function save_form($vars){
global $database_file, $database_fields;
$f = fopen($database_file, 'a');
if (!$f){
die("Kan het db file niet openen om op te slaan");
}
foreach ($vars as $k=>$v) {
$vars[$k] = str_replace(array("|", "\r","\n"), array('_',' ',' '), $v);
}
if (is_array($database_fields)) {
$vars_orig = $vars;
$vars = array();
foreach ($database_fields as $k)
$vars[$k] = $vars_orig[$k];
}
$str = join('|', $vars);
fwrite($f, $str."\n");
fclose($f);
}
function auto_respond($vars){
global $autoresponder_from, $autoresponder_message, $autoresponder_subject;
$msg = $autoresponder_message;
preg_match_all('/%(.+?)%/', $msg, $out);
$s_vars = $out[1];
foreach ($s_vars as $k)
$msg = str_replace("%$k%", $vars[$k], $msg);
$subj = $autoresponder_subject;
preg_match_all('/%(.+?)%/', $subj, $out);
$s_vars = $out[1];
foreach ($s_vars as $k)
$subj = str_replace("%$k%", $vars[$k], $subj);
//
$_send_to = "$vars[name_from] <".$vars[email_from].">";
$_send_from = $autoresponder_from;
mail($_send_to, $subj, $msg, "From: $_send_from");
}
function _build_fields($vars){
$skip_fields = array(
'name_from',
'email_from',
'email_to',
'name_to',
'subject');
$is_ordered = 0;
foreach ($vars as $k=>$v)
if (in_array($k, $skip_fields)) unset($vars[$k]);
$new_vars = array();
foreach ($vars as $k=>$v){
$k = preg_replace('/_(req|num|reqnum)$/', '', $k);
if (preg_match('/^\d+[ \:_-]/', $k)) $is_ordered++;
$k = preg_replace('/^\d+[ \:_-]/', '', $k);
$new_vars[$k] = $v;
}
$vars = $new_vars;
$max_length = 10; // maximale lengte van key veld
foreach ($vars as $k=>$v) {
$klen = strlen($k);
if (($klen > $max_length) && ($klen < 40))
$max_length = $klen;
}
if ($is_ordered)
ksort($vars);
$out = "";
foreach ($vars as $k=>$v){
$k = str_replace('_', ' ', $k);
$k = ucfirst($k);
$len_diff = $max_length - strlen($k);
if ($len_diff > 0)
$fill = str_repeat('.', $len_diff);
else
$fill = '';
$out .= $k."$fill...: $v\n";
}
return $out;
}
function send_mail($vars){
global $send_to, $send_cc;
global $subject;
global $attachment_enabled;
global $REMOTE_ADDR;
global $HTTP_POST_FILES;
$files = array(); //files (veld namen) voor bijlage in email
if (count($HTTP_POST_FILES) && $attachment_enabled){
$files = array_keys($HTTP_POST_FILES);
}
// bouw email
$date_time = date('Y-m-d H:i:s');
$mime_delimiter = md5(time());
$fields = _build_fields($vars);
$mail = <<<EOF
Dit is een samenvatting boodschap
--$mime_delimiter
Content-type: text/plain
Content-Transfer-Encoding: 8bit
Het Mailformulier submitted:
$fields
--------------------
REMOTE IP : $REMOTE_ADDR
DATE/TIME : $date_time
EOF;
if (count($files)){
foreach ($files as $file){
$file_name = $HTTP_POST_FILES[$file]['name'];
$file_type = $HTTP_POST_FILES[$file]['type'];
$file_tmp_name = $HTTP_POST_FILES[$file]['tmp_name'];
$file_cnt = "";
$f=@fopen($file_tmp_name, "rb");
if (!$f)
continue;
while($f && !feof($f))
$file_cnt .= fread($f, 4096);
fclose($f);
if (!strlen($file_type)) $file_type="applicaton/octet-stream";
if ($file_type == 'application/x-msdownload')
$file_type = "applicaton/octet-stream";
$mail .= "\n--$mime_delimiter\n";
$mail .= "Content-type: $file_type\n";
$mail .= "Content-Disposition: attachment; filename=\"$file_name\"\n";
$mail .= "Content-Transfer-Encoding: base64\n\n";
$mail .= chunk_split(base64_encode($file_cnt));
}
}
$mail .= "\n--$mime_delimiter--";
//zenden naar
$_send_to = $send_to ? $send_to : "$vars[name_to] <".$vars[email_to].">";
$_send_from = "$vars[name_from] <".$vars[email_from].">";
$_subject = $subject ? $subject : $vars['subject'];
mail($_send_to, $_subject, $mail,
"Mime-Version: 1.0\r\nFrom: $_send_from\r\nContent-Type: multipart/mixed;\n boundary=\"$mime_delimiter\"\r\nContent-Disposition: inline");
foreach ($send_cc as $v){
mail($v, $_subject, $mail,
"Mime-Version: 1.0\r\nFrom: $_send_from\r\nContent-Type: multipart/mixed;\n boundary=\"$mime_delimiter\"\r\nContent-Disposition: inline");
}
}
function get_form_data(){
global $REQUEST_METHOD;
global $HTTP_POST_VARS;
global $HTTP_GET_VARS;
$vars = ($REQUEST_METHOD == 'GET') ? $HTTP_GET_VARS : $HTTP_POST_VARS;
//verwijder ruimte tussen alle velden
foreach ($vars as $k=>$v) $vars[$k] = trim($v);
return $vars;
}
function check_form($vars){
global $referrers;
global $send_to;
global $subject;
global $HTTP_REFERER;
$errors = array();
if (!strlen($vars['email_from'])){
$errors[] = "<b>Van Email adres</b> leeg";
} else if (!check_email($vars['email_from'])){
$errors[] = "<b>Van Email adres</b> onjuist";
}
if (!strlen($send_to) && !strlen($vars['email_to'])){
$errors[] = "<b>Naar Email</b> adres leeg (waarschijnlijk configuratie fout)";
} else if (!strlen($send_to) && !check_email($vars['email_to'])){
$errors[] = "<b>Naar Email adres</b> onjuist";
}
if (!strlen($vars['subject']) && !strlen($subject)){
$errors[] = "<b>Onderwerp</b> leeg (waarschijnlijk configuratie fout)";
}
foreach ($vars as $k=>$v){
if (preg_match('/^(.+?)_req$/i', $k, $m) && !strlen($v)){
$field_name = ucfirst($m[1]);
$errors[] = "Verplicht veld <b>$field_name</b> leeg";
}
if (preg_match('/^(.+?)_num$/i', $k, $m) && strlen($v) && !is_numeric($v)){
$field_name = ucfirst($m[1]);
$errors[] = "Veld <b>$field_name</b> moet getal of cijfers bevatten of laat leeg";
}
if (preg_match('/^(.+?)_reqnum$/i', $k, $m) && !is_numeric($v)){
$field_name = ucfirst($m[1]);
$errors[] = "Veld <b>$field_name</b> moet getal of cijvers bevatten of laat leeg";
}
}
//controleer gebruiker
if (is_array($referrers) && count($referrers)){
$ref = parse_url($HTTP_REFERER);
$host = $ref['host'];
$host_found = 0;
foreach ($referrers as $r){
if (strstr($host, $r))
$host_found++;
}
if (!$host_found){
$errors[] = "Onbekende gebruiker: <b>$host</b>";
}
}
return $errors;
}
function display_errors($errors){
$errors = '<li>' . join('<li>', $errors);
print <<<EOF
<head>
<title>Mailformulier fout melding</title>
</head>
<body bgcolor=white>
<h3 align=center><font color=red>Een fout is opgetreden</font></h3>
<hr width=80%>
<table align=center><tr><td>
$errors
</td></tr></table>
<p align=center>
<a href="javascript: history.back(-1)">Ga terug</a> en verander de fout melding
</p>
<hr width=80%>
</body>
</html>
EOF;
}
function check_email($email) {
if (!preg_match('/^[0-9a-zA-Z\.\-\_]+\@[0-9a-zA-Z\.\-]+$/', $email))
return false;
if ( preg_match('/^[^0-9a-zA-Z]|[^0-9a-zA-Z]$/', $email))
return false;
if (!preg_match('/([0-9a-zA-Z_]{1})\@./',$email) )
return false;
if (!preg_match('/.\@([0-9a-zA-Z_]{1})/',$email) )
return false;
if ( preg_match('/.\.\-.|.\-\..|.\.\..|.\-\-./',$email) )
return false;
if ( preg_match('/.\.\_.|.\-\_.|.\_\..|.\_\-.|.\_\_./',$email) )
return false;
if (!preg_match('/\.([a-zA-Z]{2,5})$/',$email) )
return false;
return true;
}
do_formmail();
?>
1.505 views