Strony: [1]   Bottom Do dołu
   Drukuj   
ico Autor    
[EN] [ES] [PT] [IT] [DE] [FR] [NL] [TR] [SR] [RU]
     Topic: Formularz kontaktowy nie wysyła wiadomości  [Przeczytany 2585 razy]
0 użytkowników i 1 Gość przegląda ten wątek.
Global Moder
*****
La Toma Magic
Offline
03.02.2017 22:19:11
Topic Starter
 Poland Kobieta
Poland
  WWW
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.msg2822#msg2822  
Witam,

Zainstalowałam Advanced contact form i mam perien problem: zgłasza błąd mimo poprawnie wpisanego adresu e-mail, nie umiem znaleźć błędu w skrypcie Smutny

Code: [select]
<?php
/**********************************************************************************
* Contact.php                                                                     *
***********************************************************************************
*                                                                                 *
* Execution file for "Contact Form" modification.                                 *
*                                                                                 *
* Copyright (c) 2008 by Deprecated (at) Earthlink (dot) net. All rights reserved. *
* Redistribution prohibited except at SimpleMachines.org                          *
*                                                                                 *
**********************************************************************************/

if (!defined(&#39;SMF&#39;))
die(&#39;Hacking attempt...&#39;);

function Contact()
{
global $context$settings$options$scripturl$boarddir$sourcedir$modSettings$user_info$txt$webmaster_email;

if($user_info[&#39;is_guest&#39;] && empty($modSettings[&#39;contact_form_enable_guest_access&#39;])) redirectexit();
if(!$user_info[&#39;is_guest&#39;] && empty($modSettings[&#39;contact_form_enable_member_access&#39;])) redirectexit();

$global_error false;

if (!empty($modSettings[&#39;reg_verification&#39;]) && $context[&#39;user&#39;][&#39;is_guest&#39;])
{
require_once($sourcedir . &#39;/Subs-Editor.php&#39;);
$verificationOptions = array(
&#39;id&#39; => &#39;register&#39;,
);
if (isset($_POST[&#39;submit&#39;]))
{
$context[&#39;visual_verification&#39;] = create_control_verification($verificationOptions, true);
if (is_array($context[&#39;visual_verification&#39;]))
{
loadLanguage(&#39;Errors&#39;);
foreach ($context[&#39;visual_verification&#39;] as $error)
{
$global_error $context[&#39;contact_form_error_visual_verification&#39;] = true;
$context[&#39;visual_verification_error_dscr&#39;] = $txt[&#39;error_&#39; . $error];
}
}
}
$context[&#39;visual_verification&#39;] = create_control_verification($verificationOptions);
$context[&#39;visual_verification_id&#39;] = $verificationOptions[&#39;id&#39;];
}
else $context[&#39;visual_verification&#39;] = false;

$content = &#39;&#39;;
$sender_ip $_SERVER[&#39;REMOTE_ADDR&#39;];
$sender_rdns gethostbyaddr($sender_ip);
if ($context[&#39;user&#39;][&#39;is_guest&#39;]) $sender = $txt[&#39;contact_form_sender_is_guest&#39;];
else
{
$sender $context[&#39;user&#39;][&#39;name&#39;];
if ($context[&#39;user&#39;][&#39;name&#39;] != $context[&#39;user&#39;][&#39;username&#39;]) $sender .= &#39; (&#39; . $context[&#39;user&#39;][&#39;username&#39;] . &#39;)&#39;;
}

$message  = isset($_POST[&#39;message&#39;]) ? trim($_POST[&#39;message&#39;]) : &#39;&#39;;
if (!$message$global_error $context[&#39;contact_form_error_no_message&#39;] = true;

$sender_name = isset($_POST[&#39;name&#39;]) ? trim($_POST[&#39;name&#39;]) : &#39;&#39;;
if (!$sender_name && !empty($modSettings[&#39;contact_form_require_name&#39;])) $global_error = $context[&#39;contact_form_error_no_name&#39;] = true;
if (!$sender_name || !empty($modSettings[&#39;contact_form_sender_name_dont_use_form&#39;]))
{
$name = empty($modSettings[&#39;contact_form_default_name&#39;]) ? $txt[&#39;contact_form_default_name_default&#39;] : $modSettings[&#39;contact_form_default_name&#39;];
if ($sender_name$content .= $txt[&#39;contact_form_label_status_name&#39;] . $sender_name . &#39;
&#39;;
}
else $name $sender_name;

$sender_email = isset($_POST[&#39;email&#39;]) ? trim($_POST[&#39;email&#39;]) : &#39;&#39;;
if (!$sender_email && !empty($modSettings[&#39;contact_form_require_email&#39;])) $global_error = $context[&#39;contact_form_error_no_email&#39;] = true;
if ($sender_email && !valid_email($sender_email)) $global_error $context[&#39;contact_form_error_invalid_email&#39;] = true;
if (!$sender_email || !empty($modSettings[&#39;contact_form_sender_email_dont_use_form&#39;]))
{
$email = empty($modSettings[&#39;contact_form_default_email_sender&#39;]) ? $webmaster_email : $modSettings[&#39;contact_form_default_email_sender&#39;];
if ($sender_email$content .= $txt[&#39;contact_form_label_status_email&#39;] . $sender_email . &#39;
&#39;;
}
else $email $sender_email;
$headers = &#39;From: &#39; . $name . &#39; <&#39; . $email . &#39;>&#39;;

$sender_subject = isset($_POST[&#39;subject&#39;]) ? trim($_POST[&#39;subject&#39;]) : &#39;&#39;;
if (!$sender_subject && !empty($modSettings[&#39;contact_form_require_subject&#39;])) $global_error = $context[&#39;contact_form_error_no_subject&#39;] = true;
if (!$sender_subject || !empty($modSettings[&#39;contact_form_sender_subject_dont_use_form&#39;]))
{
$subject = empty($modSettings[&#39;contact_form_default_subject&#39;]) ? $txt[&#39;contact_form_default_subject_default&#39;] : $modSettings[&#39;contact_form_default_subject&#39;];
if ($sender_subject$content .= $txt[&#39;contact_form_label_status_subject&#39;]  . $sender_subject . &#39;
&#39;;
}
else $subject $sender_subject;
if (!empty($modSettings[&#39;contact_form_subject_prefix&#39;])) $subject = $modSettings[&#39;contact_form_subject_prefix&#39;] . &#39; &#39; . $subject;

if ($content$content .= $txt[&#39;contact_form_label_status_separator&#39;];

$content .= stripslashes($message);
$content .= $txt[&#39;contact_form_label_ip&#39;] . $sender_ip . $txt[&#39;contact_form_label_rdns&#39;] . $sender_rdns . $txt[&#39;contact_form_label_sender&#39;] . $sender;

$dest_email_addr = empty($modSettings[&#39;contact_form_dest_email_addr&#39;]) ? $webmaster_email : $modSettings[&#39;contact_form_dest_email_addr&#39;];

$context[&#39;page_title&#39;] = empty($modSettings[&#39;contact_form_display_title&#39;]) ? $txt[&#39;contact_form_title&#39;] : $modSettings[&#39;contact_form_display_title&#39;];

if (!$global_error && isset($_POST[&#39;submit&#39;]))
{
require_once($sourcedir . &#39;/Subs-Post.php&#39;);
$context[&#39;contact_form_sendmail_override_headers&#39;] = true;
if (sendmail($dest_email_addr$subject$content$headers))
{
$context[&#39;contact_form_message_sent&#39;] = true;
$context[&#39;page_title&#39;] .= &#39; - &#39; . $txt[&#39;contact_form_result_message_sent&#39;];
}
else
{
$context[&#39;contact_form_message_failed&#39;] = true;
$context[&#39;page_title&#39;] .= &#39; - &#39; . $txt[&#39;contact_form_result_send_mail_failed&#39;];
}
}
else
{
if ($global_error && isset($_POST[&#39;submit&#39;]))
$context[&#39;page_title&#39;] .= &#39; - &#39; . $txt[&#39;contact_form_result_error&#39;];
}

$context[&#39;linktree&#39;][] = array(
&#39;url&#39; => $scripturl.&#39;?action=contact&#39;,
&#39;name&#39; => $context[&#39;page_title&#39;],
);

loadTemplate(&#39;Contact&#39;);
}

function 
valid_email($email)
{
global $modSettings;

$at_ptr strrpos($email"@");
if (is_bool($at_ptr) && !$at_ptr) return false;
$domain substr($email$at_ptr+1);
$local substr($email0$at_ptr);
$local_len strlen($local);
$domain_len strlen($domain);
if ($local_len || $local_len 64 || $domain_len || $domain_len 255) return false; // local or domain part length invalid
else if ($local[0] == &#39;.&#39; || $local[$local_len-1] == &#39;.&#39;) return false; // local part cannot start or end with dot
else if (preg_match(&#39;/\\.\\./&#39;, $local)) return false; // local part cannot have two consecutive dots
else if (!preg_match(&#39;/^[A-Za-z0-9\\-\\.]+$/&#39;, $domain)) return false; // domain part has invalid character
else if (preg_match(&#39;/\\.\\./&#39;, $domain)) return false; // domain part cannot have two consecutive dots
else if (!preg_match(&#39;/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\&#39;*+?^{}|~.-])+$/&#39;, str_replace("\\\\", "", $local))) // exception for quoted
if (!preg_match(&#39;/^"(\\\\"|[^"])+"$/&#39;, str_replace("\\\\", "", $local))) return false; // local part character invalid except when local part is quoted
if (!empty($modSettings[&#39;contact_form_skip_dns_check&#39;])) return true; // mod setting to skip the DNS A/MX record check
if (function_exists(&#39;checkdnsrr&#39;))
if (!(checkdnsrr($domain, &#39;MX&#39;) || checkdnsrr($domain, &#39;A&#39;))) return false; // domain does not have a valid A or MX record
else
if (!(win_checkdnsrr($domain, &#39;MX&#39;) || win_checkdnsrr($domain, &#39;A&#39;))) return false; // domain does not have a valid A or MX record
return true;
}

function 
win_checkdnsrr($host$type)
{
if (!empty($host))
{
exec(&#39;nslookup -type=&#39; . $type . &#39; &#39; . escapeshellcmd($host), $result);
foreach ($result as $line)
if (eregi("^$hostName"$line)) return true;
}
return false;
}

?>


Czy ktoś mi może pomóc?

Z góry dziękuję i pozdrawiam - Sandra


: : Attachment : :
Attachment

Attachment kontakt.PNG   -› 13.98 KB, 462x459 - wyświetlony 288 razy

IP IP Zapisane

Pozdrawiam - Sandra
www.drlucy.pl
www.latoma.net
Administrator
*****
Imagination is more Important than Knowledge
Offline
08.05.2017 21:24:16
 United States Mężczyzna
United States
  WWW
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.msg2823#msg2823 Post #1 
Witaj Sandro

Bardzo przepraszam,  teraz to już w ogóle są szkodliwe warunki pracy przy komie, a u mnie nie przybywa czasu na luzik i ostatnio w ogóle nie mogłem się tu pojawiać... sorka


Na szybko to coś mi w podświetlaniu składni się nie podoba, konkretnie chodzi mi o funkcję sprawdzania maila:

GeSHi -› Code: [select]
function valid_email($email)
{
    global $modSettings;
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.030s | speed:1.67 KB/s



Tu są różne warunki i nie podoba mi się ta linijka, ( z funkcji sprawdzajki), linia ~148:


GeSHi -› Code: [select]
    else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local)))   // exception for quoted
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.030s | speed:4.18 KB/s



hmm wygląda jakby co najmniej brakowało średnika na końcu --> ;

Dlatego przetestuj 3 opcje:

1 - ze średnikiem na końcu --> ;

GeSHi -› Code: [select]
    else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local)));  // exception for quoted
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.035s | speed:3.62 KB/s





2 - z   return false;
 
GeSHi -› Code: [select]
    else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local))) return false; // exception for quoted
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.036s | speed:3.90 KB/s





3 - i z return true;

GeSHi -› Code: [select]
    else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $local))) return true;  // exception for quoted
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.062s | speed:2.25 KB/s





Sprawdź, po kolei czy jest ok, czy są jakieś błędy? Funkcja sprawdza również rekordy DNS, więc mail powinien być prawdziwy, ponadto wpisałbym inny niż mail admina.


Na stronie smf.org, tam gdzie ten mod to kliknąłem "parse" i nie podoba mi się w template tego moda wartość value="" w inpucie maila, ponieważ  nie powinno tu być żadnych spacji, (w cudzysłowach value), a tym czasem widzę jedną na końcu..


To jest cały ten input do wpisywania maila + opis itd:

PHP Code: [select]
//--------------------------------------------------------------------------------------------------
// Email address
//--------------------------------------------------------------------------------------------------
echo'
<div style="padding-bottom: 6px;">
<label for="email"><span class="normaltext">'
,
$txt['contact_form_label_email'],
'<span class="smalltext"',
empty($modSettings['contact_form_require_email']) ? '> ' $txt['contact_form_field_optional_email'] : ' style="color: red;"> ' $txt['contact_form_field_required'],
'</span></span><br />
<input '
;
if (isset($context['contact_form_message_sent'])) echo 'readonly="readonly" style="background-color: #F0F0F0;" ';
if (isset($_POST['email'])) echo 'value="'trim($_POST['email']), '" ';
echo 'type="text" size="24" name="email" id="email"';
if (isset($context['contact_form_error_no_email']) && isset($_POST['submit']))
{
echo ' style="border-style: solid; border-color: red;" />
</label> <span class="smalltext" style="color: red;">'
$txt['contact_form_error_no_email'], '</span>';
}
else if (isset($context['contact_form_error_invalid_email']) && isset($_POST['submit']))
{
echo ' style="border-style: solid; border-color: red;" />
</label> <span class="smalltext" style="color: red;">'
$txt['contact_form_error_invalid_email'], '</span>';
}
else echo ' />
</label>'
;
echo '
</div>'
;

//--------------------------------------------------------------------------------------------------
// Subject line
//--------------------------------------------------------------------------------------------------



To w linii około ~60 zaczyna się sam input, czyli ten kawałek kodu:

GeSHi -› Code: [select]
                <input ';
    if (isset($context['
contact_form_message_sent'])) echo 'readonly="readonly" style="background-color: #F0F0F0;" ';
    if (isset($_POST['
email'])) echo 'value="', trim($_POST['email']), '" ';
    echo '
type="text" size="24" name="email" id="email"';
    if (isset($context['
contact_form_error_no_email']) && isset($_POST['submit']))
    {
        echo '
style="border-style: solid; border-color: red;" />
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.037s | speed:10.66 KB/s



Jak widać w value= po ' ,trim($_POST['email']), ' -> właśnie tu jest spacja i dopiero cudzysłów " to wytnij ją, ale daj spację linijkę poniżej zaraz po echo i a'postofie, tam gdzie zaczyna się type="text"

Czyli zapisałbym ten kawałek tak:

GeSHi -› Code: [select]
                <input ';
    if (isset($context['
contact_form_message_sent'])) echo 'readonly="readonly" style="background-color: #F0F0F0;" ';
    if (isset($_POST['
email'])) echo 'value="', trim($_POST['email']), '"'; // wycięta spacja na końcu przed zamykającym cudzysłowem
    echo '
type="text" size="24" name="email" id="email"'; // dodana spacja na początku, zaraz po echo '
    if (isset($context['contact_form_error_no_email']) && isset($_POST['submit']))
    {
        echo ' style="border-style: solid; border-color: red;" />
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.038s | speed:12.90 KB/s





Po za tym podejrzałbym kod, - jestem ciekaw jak wygląda ten input w przeglądarce w poglądzie źródła?

Sandro, sorry, na szybko tylko to przychodzi mi do głowy..

W tym inpucie jest tak, że po przetworzeniu wpisanego emaila i tak zostaje tam spacja, przed zamykającym value cudzysłowem "

I chyba od tego zacznij, (a dopiero grzebnij w silniku tego moda), czyli zacznij w ./Themes/default/Contact.template.php

Dopiero później! dłubnij w silniku czyli w ./Sources/Contact.php


Jest okrutnie gorąco, martwię się o kompy, a roboty i wydarzeń nie ubywa.., dlatego weź proszę na to poprawkę.
Oczywiście w miarę możliwości postaram się tu zaglądać., częściej niż ostatnio, okay?


Mam nadzieję, że to bzdet i to co tu powypisywałem, pomoże

Pozdrawiam
roco



Attention! Testing modifications - Steam Profile

IP IP Zapisane
Global Moder
*****
La Toma Magic
Offline
03.02.2017 22:19:11
Topic Starter
 Poland Kobieta
Poland
  WWW
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.msg2824#msg2824 Post #2 
Cześć Roco

Upały faktycznie pioruńskie, ale lepsze (chyba) to niż plucha

Co do formularza... już trochę błędów wyeliminowałam, ten brak średnika też zauważyłam i wpisałam tam return false;...

Pomału zaczęłam eliminować potencjalnie zła kawałki kodu (na razie analizuję tylko contact.php) i zostało mi, że źle działa jeszcze to:
Code: [select]
if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\", "", $local))) return false;


i to:
Code: [select]
if (!(checkdnsrr($domain, 'MX') || checkdnsrr($domain, 'A'))) return false;
else
if (!(win_checkdnsrr($domain, 'MX') || win_checkdnsrr($domain, 'A'))) return false;


Po zakomentowaniu tych linii niby jest ok, ale przepuszcza wiadomość z takim adresem e-mail: a@a
Nie bardzo profesjonalnie to jest Smutny

Poprawki w pliku contact.template.php nie mają wpływu na działanie formularza (przynajmniej ja ich nie widzę)

Pozdrawiam - Sandra


Last Edit: 12.07.2010 14:53:07 by: Sandra IP IP Zapisane

Pozdrawiam - Sandra
www.drlucy.pl
www.latoma.net
Global Moder
*****
La Toma Magic
Offline
03.02.2017 22:19:11
Topic Starter
 Poland Kobieta
Poland
  WWW
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.msg2827#msg2827 Post #3 
Póki co zastąpiłam całą treść funkcji takim kodem:

Code: [select]
if ( !preg_match("#^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$#", $email) ) return false;
return true;


Teraz sprawdza adres e-mail jak należy i nie przepuszcza postaci a@a jak poprzednio. Czyli w zasadzie problem jest rozwiązany, ale....

Chciałabym jednak, uruchomić tę funkcję, skoro autor się napracował, zeby wzbogacić formularz o dodatkowe sprawdzanie, to warto skorzystać (kolejne zabezpieczenie przed spamem )... generalnie podoba mi się ten formularz, więc będę wdzięczna za pomoc.

Sandra


IP IP Zapisane

Pozdrawiam - Sandra
www.drlucy.pl
www.latoma.net
Administrator
*****
Imagination is more Important than Knowledge
Offline
08.05.2017 21:24:16
 United States Mężczyzna
United States
  WWW
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.msg2882#msg2882 Post #4 
Sandro

Podany przez Ciebie kod, jest jak najbardziej w porządku.

To klasyczna sprawdzajka, można by rzec uniwersalna..
Gościu od moda, już go dalej nie rozwija.. A są jeszcze i inne mody do eMaili na smf.org
To co zastosował autor w swoim modzie do wysyłania poczty, to po za normalnymi mechanizmami, "odsiewczyczymi", zastosował autentyczną sprawdzajkę samych adresów eMail w 2 bazach adresowych. To już poważniejszy "dings", jednak sorry nie chcę Cię martwić, ale nie na wszystkich hostingach w PL, można użyć zastosowanych w modzie narzędzi, po prostu nie wszędzie zadziała, nawet w hmm w "większej większości", rzekłbym..

Oczywiście można wyciąć w kodzie a i tak dostaniesz całkiem do rzeczy normalny mechanizm formularza.

Moim zdaniem, powinnaś "odptaszkować" sprawdzanie rekordów DNS czy jak tam jest.. w PA, i w formularzu można wyciąć/wyłączyć to:

GeSHi -› Code: [select]
    if (function_exists('checkdnsrr'))
        if (!(checkdnsrr($domain, 'MX') || checkdnsrr($domain, 'A'))) return false;                 // domain does not have a valid A or MX record
    else
        if (!(win_checkdnsrr($domain, 'MX') || win_checkdnsrr($domain, 'A'))) return false;         // domain does not have a valid A or MX record
 
// Created by GeSHi 1.0.8.10 | code: -› [code=PHP] | load:0.040s | speed:7.53 KB/s



Możesz po jednej lini // --> wyłączona linia lub:
/* więcej
włączonych
linii */

Tylko, najlepiej to robić za pomocą edytora z podświetlaną składnią, a nawet zdecydowanie należy!

Są formularze i do 1.1.11 i do 2.0 RC3, przetestuj inne

Pozdrawiam
roco



Attention! Testing modifications - Steam Profile

IP IP Zapisane
Global Moder
*****
La Toma Magic
Offline
03.02.2017 22:19:11
Topic Starter
 Poland Kobieta
Poland
  WWW
Link:  http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.msg2887#msg2887 Post #5 
Quote: [select]
Są formularze i do 1.1.11 i do 2.0 RC3, przetestuj inne


Nie jestem za ulepszaniem dobrego

Tak jak pisałam wcześniej, formularz mi się podoba, spełnia swoje zadanie - nie będę testować czegoś innego, przynajmniej na razie - dopóki nie ujawniły się inne błędy

Bardzo dziękuję za pomoc 5 - Sandra


IP IP Zapisane

Pozdrawiam - Sandra
www.drlucy.pl
www.latoma.net
Strony: [1]   TOP^Do góry
   Drukuj   
On-Line: 6 Gości, 0 Użytkowników
 
Skocz do:  

Podobne Tematy
  Temat Zaczęty przez Odpowiedzi Wyświetleń Ostatnia wiadomość
normal_post RSS Podczas wysyłania wiadomości, pojawiły się następujące błędy: cieplutki 5 1703 Ostatnia wiadomość 05.08.2009 03:20:34
Autor roco
normal_post RSS Wiadomości do urzytkowników forum tomeh 3 1430 Ostatnia wiadomość 11.08.2009 13:51:35
Autor roco
normal_post RSS Formularz Kontaktowy - pomoc franzmauler 10 8319 Ostatnia wiadomość 09.12.2009 13:27:21
Autor roco
* Share this topic...
In a forum
[BBCode]
[url=http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.0]Formularz kontaktowy nie wysyła wiadomości[/url]
In a site/blog
[xHTML]
<a href="http://poligon.ricoroco.com/fora/smf/index.php?topic=1561.0" target="_blank">Formularz kontaktowy nie wysyła wiadomości</a>
Geo Visitors Map