Strona 1 z 1

Zwłoka w doręczaniu poczty

PostNapisane: Pn sty 12, 09 14:04
przez KarolStradowski
Witam,

Mam problem z doręczaniem wiadomości na konto pocztowe ugu.pl wysyłanych poprzez formularz kontaktowy ze strony, którą umieściłem na serwerze. Wysłanie maila za pomocą formularza powoduje doręczenie go po 2 - 4 dniach.

Czym może to być spowodowane? Czy może na to wpływać nieodpowiednia składania skryptu php?

Z góry dziękuję za pomoc przy rozwiązaniu nurtującego problemu.

PostNapisane: Pn sty 12, 09 17:34
przez monk

PostNapisane: Pn sty 12, 09 19:20
przez KarolStradowski
Założone na ugu.pl zgodnie z zaleceniem. Nie do końca jednak jest jasne: funkcja mail w końcu działa czy nie? :-)

Coś chyba można wyklikać skoro niektóre maile dochodzą?

PostNapisane: Pn sty 12, 09 21:30
przez monk
Może podasz kod?

PostNapisane: Pn sty 12, 09 22:22
przez KarolStradowski
Proszę uprzejmie:

Kawałek html'a poniżej:
<form action="contactscript.php" method="post">
<table border="0" bgcolor="#E9EDD2" cellspacing="5">
<tr><td>Imię i nazwisko</td><td><input type="text" size="30" name="name"></td></tr><tr><td>Adres e-mail</td><td><input type="text" size="30" name="email"></td></tr><tr><td valign="top">Komentarz</td><td><textarea name="comments" rows="6" cols="50"></textarea></td></tr><tr><td>&nbsp;</td><td><input type="submit" value="Wy¶lij"></td></tr></table>
</form>


I formularz opisany za pomocą PHP'a:
<?php

$my_email = "konto@karolstradowski.ugu.pl";
$continue = "http://www.karolstradowski.ugu.pl/formularz.htm";
$errors = array();
// Remove $_COOKIE elements from $_REQUEST.
if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}
// Validate email field.
if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{
$_REQUEST['email'] = trim($_REQUEST['email']);
if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Błędny adres e-mail. Proszę wprowadzić ponownie.";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Błędny adres e-mail. Proszę wprowadzić ponownie.";}else{if(substr_count($exploded_email[1],".") == 0){$errors[] = "Błędny adres e-mail. Proszę wprowadzić ponownie.";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Błędny adres e-mail. Proszę wprowadzić ponownie.";}else{foreach($exploded_domain as $value){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Błędny adres e-mail. Proszę wprowadzić ponownie."; 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[] = "Nie można wysłać pustego pola. Proszę wprowadzić dane do formularza.";}
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."Wiadomo¶ć z portalu KarolStradowski.ugu.pl";
$message = stripslashes($message);
$subject = "FormToEmail Comments";
$subject = stripslashes($subject);
$from_name = "";
if(isset($_REQUEST['name']) && !empty($_REQUEST['name'])){$from_name = stripslashes($_REQUEST['name']);}
$headers = "From: {$from_name} <{$_REQUEST['email']}>";
mail($my_email,$subject,$message,$headers);
?>

PostNapisane: Wt sty 13, 09 09:05
przez monk
Nagłówki przypadkiem nie są pokręcone?
Kod: Zaznacz cały
$headers = "From: {$from_name} <{$_REQUEST['email']}>";

Po co te klamry {}? Powinno się robić tak:
Kod: Zaznacz cały
$headers = 'From: '.$from_name.' <'.$_REQUEST['email'].'>';

PostNapisane: Wt sty 13, 09 12:31
przez KarolStradowski
Szczerze powiedziawszy posłużyłem się opensource'ową pracą, którą przystosowałem nieco na własne potrzeby (na tyle, na ile zrozumiałem składnię :-| ).

Ale dziękuję za radę.

PostNapisane: Wt sty 13, 09 12:55
przez monk
Zrób jeszcze var dumpa i sprawdź czy do komendy mail idą odpowiednie dane. Najlepiej podaj przykładowe dane tutaj. Jak zrobić dumpa? Wstaw to:
Kod: Zaznacz cały
echo('$mymail: ' . $mymail . '<br>');
echo('$subject: ' . $subject . '<br>');
echo('$message: ' . $message . '<br>');
echo('$headers: ' . $headers . '<br>');

Przed:
Kod: Zaznacz cały
mail($my_email,$subject,$message,$headers);

I powiedz nam co ci tam ten dump pokazał. (czy wszystko jest poprawnie?)

PostNapisane: Wt sty 13, 09 15:33
przez KarolStradowski
Przy zdjęciu klamerek z headera otrzymuję komunikat:
Connection closed by remote server

You tried to access the address http://www.karolstradowski.ugu.pl/contactscript.php, which is currently unavailable. Please make sure that the Web address (URL) is correctly spelled and punctuated, then try reloading the page.


Podobny komunikat wyskakuje przy poprzedzeniu wiersza
Kod: Zaznacz cały
mail($my_email,$subject,$message,$headers);

echem (zarówno z klamrami jak i bez klamerek na headerze).