ContactMe (MailForm)
Moderátor: Moderators
-
- Moderator & CLT
- Príspevky: 215
- Dátum registrácie: Pi Sep 23, 2005 10:59 am
- Bydlisko: Vysoké Studnice (u Jihlavy)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
špatná zpráva .......
dnes mi nějaký šmejd prolomil captcha kód s obráceným řetězcem a vesele mi posílá přes formulář spamy. Takže to bude chtít vymyslet něco jiného ....
Jinak zatím mě to chodí první den - a vypadá to, že používá stejnou IP - to ale uvidím v příštích dnech. Jestli ano, tak mu ji přes htaccess bloknu.
dnes mi nějaký šmejd prolomil captcha kód s obráceným řetězcem a vesele mi posílá přes formulář spamy. Takže to bude chtít vymyslet něco jiného ....
Jinak zatím mě to chodí první den - a vypadá to, že používá stejnou IP - to ale uvidím v příštích dnech. Jestli ano, tak mu ji přes htaccess bloknu.
-
- Moderator & CLT
- Príspevky: 215
- Dátum registrácie: Pi Sep 23, 2005 10:59 am
- Bydlisko: Vysoké Studnice (u Jihlavy)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
Takže opět hlásím problémy s tímto snippetem - spamboti mi nějak prolomili ochranu CAPTCHA kódem a obešli i to, že je kód nutno zadávat pozpátku. Blokování IP zabralo jen na čas, sice posílají hromadu zpráv z jedné IP, ale mění ji. Ještě je zkusím ochcat použitím diakritiky v ověřovacím řetězci, ale v současnosti to vidím asi na použití jiného CAPTCHA generátoru, nebo jiného kontaktního formuláře ........
Dnes jsem mazal asi 150 spamů a byl jsem pěkně .......
Dnes jsem mazal asi 150 spamů a byl jsem pěkně .......
- _rasel^
- ETOMITE Admin
- Príspevky: 1122
- Dátum registrácie: Ut Sep 20, 2005 1:03 am
- Bydlisko: Košice (SR)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
Nj, spamboti dospeli a je čas nastražiť tvrdé zbrane a zneužiť botov na niečo dobre, nech opisujú textu z kníh. Teraz pracujem na overovanie pomocou reCaptchy: http://recaptcha.net/ Pokúsim sa v dohľadnej dobe (v priebehu týždňa) splodiť niečo funkčné a potom to sem postnem...
..:: Etomite CMS → Rulezzz !.!.!. ::..
- _rasel^
- ETOMITE Admin
- Príspevky: 1122
- Dátum registrácie: Ut Sep 20, 2005 1:03 am
- Bydlisko: Košice (SR)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
Funkčné riešenie sa mi ešte nepodarilo dať dokopy. Stále mám ten istý problém, že mi maily odosiela aj v prípade zlého zadania captcha... asi to nebude najšťastnejšie riešenie.
..:: Etomite CMS → Rulezzz !.!.!. ::..
- gabo
- Medium Expert
- Príspevky: 64
- Dátum registrácie: Ut Jan 23, 2007 5:45 am
- Bydlisko: Košice
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
tak ja ho mam v takejto podobe
a priznam sa ze obcas to ide odoslat a obcas nejde, proste vypise chybu , typu error aleb necha polia vypisane a mail neodosle, tak pls ak sa da kuk alebo si to sami skuste na http://www.kchajd.sk v lavom menu admin kontakt
Kód: Vybrať všetko
/*Adresa prijimatela*/
$address_to = 'daxell (at) azet (dot) sk'; //upravene, ochrana proti spam botom (_rasel^)
/*Predpona predmetu*/
$subject_prepend = 'KCHAJD - ';
/*Text pred*/
$your_name = '';
$your_email = '';
$your_subject = '';
$your_email_content = 'Obsah e-mailu:';
/*Text zobrazeny v poliach, ktore po kliknuti zmyznu*/
$initial_name_string = 'Vaše meno';
$initial_email_string = 'Váš e-mail';
$initial_subject_string = 'Predmet emailu';
/*Text tlacidiel*/
$button_send = 'ODOSLAŤ';
$button_reset = 'Vymazat';
$info_send = '<p></p>';
$email_error = '<p class="error"><b>Zadajte prosím správny mail a správne opíšte text z obrázka!</b></p>';
$email_charset = 'utf-8';
/*Rozmery poli*/
$name_width = '20';
$email_width = '20';
$subject_width = '20';
$text_cols = '19';
$text_rows = '5';
/*Sprava po odoslani e-mailu*/
$email_sent_msg = '<b>Ďakujem za Váš e-mail!</b>' . "\n";
$email_sent_msg .= "<p>Váš e-mail bol úspešne odoslaný! Odpoviem naňho čo najskôr ako bude možné.</p>" . "\n";
/* ------------------------------------------------------*/
/* Don't mess with this unless you know what ur doing!!! */
/* This is the actual code... */
/* ------------------------------------------------------*/
$mail_form = '';
$mail_form .= '<form action="" method="post" id="contact_me">' . " \n ";
$mail_form .= '<input type="text" name="name" id="name"';
if (isset($_POST['name'])) {
$mail_form .= " value=\"" . $_POST['name'] . "\"";
} else {
$mail_form .= ' value="' . $initial_name_string . '"';
}
if (!isset($_POST['name'])) {
$mail_form .= " onclick=\"document.forms[0].name.value=''\" ";
}
$mail_form .= 'size="' . $name_width . '" />' . " \n";
$mail_form .= '<label for="name">' . $your_name . '</label><br />' . " \n ";
$mail_form .= '<input type="text" name="email" id="email" ';
if (isset($_POST['email'])) {
$mail_form .= "value=\"" . $_POST['email'] . "\" ";
} else {
$mail_form .= 'value="' . $initial_email_string . '" ';
}
if (!isset($_POST['email'])) {
$mail_form .= "onclick=\"document.forms[0].email.value=''\" ";
}
$mail_form .= 'size="' . $email_width . '" />' . "\n";
$mail_form .= '<label for="email">' . $your_email . '</label><br />' . " \n";
$mail_form .= '<input type="text" name="subject" id="subject" ';
if (isset($_POST['subject'])) {
$mail_form .= "value=\"" . $_POST['subject'] . "\" ";
} else {
$mail_form .= 'value="' . $initial_subject_string . '" ';
}
if (!isset($_POST['subject'])) {
$mail_form .= "onclick=\"document.forms[0].subject.value=''\" ";
}
$mail_form .= 'size="' . $subject_width . '" /' . "\n";
$mail_form .= '<label for="subject"> ' . $your_subject . '</label><br />' . "\n";
$mail_form .= $etomite->getCaptchaCode() . "<br />\n";
$mail_form .= "<input type=\"text\" id=\"captcha\" name=\"captcha\" value=\"\" /> <p>Obrázok opíšte odzadu!!!</p><br />";
$mail_form .= '<label for="content_text">' . $your_email_content . '</label><br/>' . "\n";
$mail_form .= '<textarea name="content_text" id="content_text" rows="' . $text_rows . '" cols="' . $text_cols . '">';
if (isset($_POST['content_text'])) {
$mail_form .= $_POST['content_text'];
}
$mail_form .= '</textarea><br />' . "\n";
$mail_form .= '<input type="hidden" name="send_email" value="sent" />' . "\n";
$mail_form .= '<input class="button" type="submit" value="' . $button_send . '" /> <input class="button" type="reset" value="' . $button_reset . '" />' . "\n";
$mail_form .= '</form>' . "\n";
$mail_form .= $info_send;
if (isset($_POST['send_email']) && $_POST['send_email'] == 'sent') {
/* check e-mail variable, output errors, then send the e-mail + thank you message */
/* take a given email address and split it into the
username and domain. */
list($userName, $mailDomain) = split("@", $_POST['email']);
if (checkdnsrr($mailDomain, "MX") && $etomite->validCaptchaCode(strrev($_POST['captcha']))) {
// this is a valid email domain! -> send the mail and say thanks!
$name = $_POST['name'];
$email = $_POST['email'];
$subject = "$subject_prepend" . $_POST['subject'];
$content_text = $_POST['content_text'];
$content_texts = "<!--\nName: " . $name . "\nE-mail: " . $email . "\nSubject: " . $_POST['subject'] . "\nIP: " . $_SERVER['REMOTE_ADDR'] . "\nDate: " . date('m.d.Y H:m:s') . "\n-->\n\nContent:\n--------\n\n " . $content_text . "\n\n--\nFrom Etomite Mail Form";
$message = base64_encode($content_texts);
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/txt; charset=\"" . $email_charset . "\"\n";
$headers .= "Content-Transfer-Encoding: base64\n";
$headers .= "From: " . $name . " <" . $email . ">\n";
$headers .= "Reply-To: " . $name . " <" . $email . ">\n";
$subject = "=?utf-8?B?" . base64_encode($subject) . "?=";
mail($address_to, $subject, $message, $headers);
$output = '';
$output .= $email_sent_msg;
return $output;
} else {
/* return an error and add the form */
$output = '';
$output .= $email_error;
$output .= $mail_form;
return $output;
}
} else {
/* return an html e-mail form */
$output = '';
$output .= $mail_form;
return $output;
}
- _rasel^
- ETOMITE Admin
- Príspevky: 1122
- Dátum registrácie: Ut Sep 20, 2005 1:03 am
- Bydlisko: Košice (SR)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
V niektorých prípadoch ma na starosti nedoručenie mailu práve provider stránky, ktorý sa tak chráni proti spam botom - nahodí limit odoslaných mailov z formulárov z jednej IP v priebehu hodiny. Neviem ako je to v tvojom prípade.
Ďalšia možnosť (tá pravdepodobnejšia) môže byť spôsobená tým, že sa formulár na posielanie mailov nachádza priamo v template. Nie je to najvhodnejšie riešenie z toho dôvodu, že stránka na ktorej je umiestnený tento snippet nemsie byť ukladaná do cache (inak sa mail neodošle), lebo jej obsah je dynamický.
Mám chuť vybodnúť sa na captchu a reCaptchu a napíšem Ajax snippet do ktorého sa nebude overovací kód z obrázka, ale z textu. V poslednej dobe sa ukazuje že toto riešenie je proti botom efektívnejšie (hlavne ak sú to výpočtové vzťahy), pretože textový výsledok sa nedá atachovať na iné weby, kde ho paradoxne dekóduje užívateľ a nie samotný bot (img odkaz na tvoju captchu sa hodí na web kde sa vďaka opísaniu kódu z obrázka a zadaniu mailu dostane naivný užívateľ k pornu - najjednoduchší spôsob dekódovania captchy, reCaptcha má napríklad toto poriešené vďaka súkromnému a privátnemu kľúču).
... očakávajte nový snippet contact-me.
Ďalšia možnosť (tá pravdepodobnejšia) môže byť spôsobená tým, že sa formulár na posielanie mailov nachádza priamo v template. Nie je to najvhodnejšie riešenie z toho dôvodu, že stránka na ktorej je umiestnený tento snippet nemsie byť ukladaná do cache (inak sa mail neodošle), lebo jej obsah je dynamický.
Mám chuť vybodnúť sa na captchu a reCaptchu a napíšem Ajax snippet do ktorého sa nebude overovací kód z obrázka, ale z textu. V poslednej dobe sa ukazuje že toto riešenie je proti botom efektívnejšie (hlavne ak sú to výpočtové vzťahy), pretože textový výsledok sa nedá atachovať na iné weby, kde ho paradoxne dekóduje užívateľ a nie samotný bot (img odkaz na tvoju captchu sa hodí na web kde sa vďaka opísaniu kódu z obrázka a zadaniu mailu dostane naivný užívateľ k pornu - najjednoduchší spôsob dekódovania captchy, reCaptcha má napríklad toto poriešené vďaka súkromnému a privátnemu kľúču).
... očakávajte nový snippet contact-me.
..:: Etomite CMS → Rulezzz !.!.!. ::..
- _rasel^
- ETOMITE Admin
- Príspevky: 1122
- Dátum registrácie: Ut Sep 20, 2005 1:03 am
- Bydlisko: Košice (SR)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
Našiel som peknú triedu na odosielanie mailov pomocou PHP a Ajax scriptu, ktorý sa stará o funkčnosť. Už nie je potrebné, aby sa snippet nachádzal na stránke, ktorá nesmie byť ukladaná do cache.
V krátkosti by to malo vyzerať takto:
Ďalší menej premakaný, príklad snippetu môžete nájsť na webe An AJAX contact form. V balíčku sa nachádza príklad fungovania. Stačí vytvoriť chunk z HTML fragmentu, ktorý sa nachádza v príklade použitia v index.php a ostatné súbory okrem index.php uploadnete do vašej inštalácie Etomite. Nezabudnite nakonfigurovať scripty, ktoré sa nachádzajú v adresári scripts (mail, predmet a pod.)
Do hlavičky templatu (prípadne vložiť do chunku):
{{Chunk}} (nie snippet):
2 gabo: vyskúšaj to a keby si mal s tým nejaký problém, tak napíš postup ako si nato išiel a pozriem sa nato.
- Návod ako nato: A (safe) contact form using Xajax and PHPmailer
- Postará sa o funkcionalitu: Xajax
- Výborná trieda na odosielanie mailov v PHP (vrátane šifrovania a stmp): PHPMailer
- Demo
V krátkosti by to malo vyzerať takto:
- stiahnete si knižnicu PHPMailer (nakonfigurujete príslušný súbor)
- stiahnete si Xajax
- PHP knižnicu a Xajax uploadnete do vašej inštalácie Etomite, tak aby sedela cesta podľa návodu,
- vytvoríte snippet s obsahom:
Kód: Vybrať všetko
require_once('phpmailer/class.phpmailer.php'); require_once('xajax/xajax.inc.php'); $form = '<form id="cform"> <div> <label for="name">Name</label> <input name="name" type="text" id="naam" value="" size="25" /> </div> <div> <label for="email">E-mail</label> <input name="email" type="text" id="email" value="" size="25" /> </div> <div> <label for="msg">Message</label> <textarea name="msg" id="msg" cols="45" rows="5"></textarea> </div> <div style="border-top:1px solid #CCCCCC;padding-top:5px;"> <label for="subbtn" style="text-align:right;"> --> </label> <input type="button" id="subbtn" value="Submit" onclick="xajax_myFunction(xajax.getFormValues('cform'));" /> </div> </form>'; function myFunction($get) { global $form, $error; $error = ''; $objResponse = new xajaxResponse(); $show_form = true; if (!empty($get['email']) && !empty($get['msg']) && !empty($get['name'])) { if (preg_match("/^[\w-]+(\.[\w-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4})$/i", trim($get['email']))) { $email = preg_replace("/\r\n/", "", $get['email']); $from = preg_replace("/\r\n/", "", $get['name']); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = "smtp.yourserver.com"; $mail->SMTPAuth = true; $mail->Username = "postmaster@yourserver.com"; $mail->Password = "password"; $mail->From = "postmaster@yourserver.com"; $mail->FromName = "Webmaster"; $mail->AddAddress("admin@yourserver.com"); $mail->AddReplyTo($email, $from); $mail->Subject = "contact form using Xajax and phpmailer"; $mail->Body = $get['msg']; if ($mail->Send()) { $error = "The form is submitted and the mail is send."; $show_form = false; } else { $error = "There was a problem while sending the mail, please try again"; } } else { $error = "The entered e-mail address is not valid."; } } else { $error = "At least one of the fields is empty..."; } $data = (!$show_form) ? '<p class="contactMsg">'.$error.'</p>' : '<p class="contactMsg">'.$error.'</p>'.$form; $objResponse->addAssign('contact_result', 'innerHTML', $data); return $objResponse; } $xajax->printJavascript('xajax/'); $xajax = new xajax(); $xajax->registerFunction('myFunction'); $xajax->processRequests(); return '<div id="contact_result">'.$form.'</div>';
Ďalší menej premakaný, príklad snippetu môžete nájsť na webe An AJAX contact form. V balíčku sa nachádza príklad fungovania. Stačí vytvoriť chunk z HTML fragmentu, ktorý sa nachádza v príklade použitia v index.php a ostatné súbory okrem index.php uploadnete do vašej inštalácie Etomite. Nezabudnite nakonfigurovať scripty, ktoré sa nachádzajú v adresári scripts (mail, predmet a pod.)
Do hlavičky templatu (prípadne vložiť do chunku):
Kód: Vybrať všetko
<script type="text/javascript" src="js/functionAddEvent.js"></script>
<script type="text/javascript" src="js/contact.js"></script>
<script type="text/javascript" src="js/xmlHttp.js"></script>
<style type='text/css' media='screen,projection'>
<!--
body { margin:20px auto;width:600px;padding:20px;border:1px solid #ccc;background:#fff;font-family:georgia,times,serif; }
fieldset { border:0;margin:0;padding:0; }
label { display:block; }
input.text,textarea { width:300px;font:12px/12px 'courier new',courier,monospace;color:#333;padding:3px;margin:1px 0;border:1px solid #ccc; }
input.submit { padding:2px 5px;font:bold 12px/12px verdana,arial,sans-serif; }
-->
</style>
Kód: Vybrať všetko
<h2>AJAX Contact Form</h2>
<p id="loadBar" style="display:none;">
<strong>Sending Email via slick AJAX. Hold on just a sec…</strong>
<img src="img/loading.gif" alt="Loading..." title="Sending Email" />
</p>
<p id="emailSuccess" style="display:none;">
<strong style="color:green;">Success! Your Email has been sent.</strong>
</p>
<div id="contactFormArea">
<form action="scripts/contact.php" method="post" id="cForm">
<fieldset>
<label for="posName">Name:</label>
<input class="text" type="text" size="25" name="posName" id="posName" />
<label for="posEmail">Email:</label>
<input class="text" type="text" size="25" name="posEmail" id="posEmail" />
<label for="posRegard">Regarding:</label>
<input class="text" type="text" size="25" name="posRegard" id="posRegard" />
<label for="posText">Message:</label>
<textarea cols="50" rows="5" name="posText" id="posText"></textarea>
<label for="selfCC">
<input type="checkbox" name="selfCC" id="selfCC" value="send" /> Send CC to self
</label>
<label>
<input class="submit" type="submit" name="sendContactEmail" id="sendContactEmail" value=" Send Email " />
</label>
</fieldset>
</form>
</div>
..:: Etomite CMS → Rulezzz !.!.!. ::..
-
- Moderator & CLT
- Príspevky: 215
- Dátum registrácie: Pi Sep 23, 2005 10:59 am
- Bydlisko: Vysoké Studnice (u Jihlavy)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
Podle mě je v současnosti ContactMe mrtvou záležitostí - protož mi boti obešli Captchu v obou případech - jak s otočeným tak s neotočeným potvrzovacím kódem. Ten jakoby nebyl - nezastavilo je nic, ani když jsem si pohrál s proměnnými pro odesílání. V současné době testuji snippet Kmail (je na stránkách Etomite), ten ale bohužel není XHTML validní. Zkoušel jsem i nížeuvedený Ajax Contact form. Zde je nutné z chunků vyházet linky na CSS a nadefinovat si vlastní třídy (jinak to rozhodí layou stránek) a upravit cesty k adresáři - a to i v javaskriptech. Contact form chodí a je i validní - ale dělá problémy z odesíláním - pošle totiž zprávu doslova na všechno, co má v sobě zavináč - konkrétně u mě na serveru tu zprávu rozešle do všech systémových mailů hostingu (příklad: thor@anoweb.cz ..... ) Kde to upravit jsem ve skriptu nenašel.
Při pátrání po novém kontaktním formuláři jsem ale narazil na zajímavou 3D captchu (generuje se reliéf textu) - víc je na http://doublethink.cleverweb.cz/22-textova-3d-captcha - ovšem integrovat to do stávajícího snippetu je pro mne úkol nad mé síly. Dokázal by si s tím někdo poradit?
Při pátrání po novém kontaktním formuláři jsem ale narazil na zajímavou 3D captchu (generuje se reliéf textu) - víc je na http://doublethink.cleverweb.cz/22-textova-3d-captcha - ovšem integrovat to do stávajícího snippetu je pro mne úkol nad mé síly. Dokázal by si s tím někdo poradit?
- _rasel^
- ETOMITE Admin
- Príspevky: 1122
- Dátum registrácie: Ut Sep 20, 2005 1:03 am
- Bydlisko: Košice (SR)
- Kontaktovať používateľa:
Re: ContactMe (MailForm)
Za zmienku stojí aj riešenie podľa článku: Nedovoľme spambotom odosielať formuláre, ktoré je elegantnejšie ako captcha.
Inak v tom článku, bol odkaz na podobné riešenie http://doublethink.cleverweb.cz/22-textova-3d-captcha má výhodu v tom, že captcha obrázok je menší (použiteľnejší) a netreba ho dodatočne upravovať (maximálne invertovať farby).
Inak v tom článku, bol odkaz na podobné riešenie http://doublethink.cleverweb.cz/22-textova-3d-captcha má výhodu v tom, že captcha obrázok je menší (použiteľnejší) a netreba ho dodatočne upravovať (maximálne invertovať farby).
..:: Etomite CMS → Rulezzz !.!.!. ::..