ContactMe (MailForm)

V tejto téme sa nachádzajú snippety (rozšírenia) pre Etomite.

Moderátor: Moderators

R - stick
Moderator & CLT
Moderator & CLT
Príspevky: 215
Dátum registrácie: Pi Sep 23, 2005 10:59 am
Bydlisko: Vysoké Studnice (u Jihlavy)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa R - stick » St Mar 26, 2008 1:48 am

š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.

R - stick
Moderator & CLT
Moderator & CLT
Príspevky: 215
Dátum registrácie: Pi Sep 23, 2005 10:59 am
Bydlisko: Vysoké Studnice (u Jihlavy)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa R - stick » Po Jún 02, 2008 2:32 pm

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ě ....... :? :? :? :?

Užívateľov profilový obrázok
_rasel^
ETOMITE Admin
ETOMITE Admin
Príspevky: 1122
Dátum registrácie: Ut Sep 20, 2005 1:03 am
Bydlisko: Košice (SR)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa _rasel^ » Po Jún 02, 2008 3:03 pm

Nj, spamboti dospeli a je čas nastražiť tvrdé zbrane a zneužiť botov na niečo dobre, nech opisujú textu z kníh. :D 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 !.!.!. ::..

Užívateľov profilový obrázok
_rasel^
ETOMITE Admin
ETOMITE Admin
Príspevky: 1122
Dátum registrácie: Ut Sep 20, 2005 1:03 am
Bydlisko: Košice (SR)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa _rasel^ » Pi Jún 13, 2008 10:40 am

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 !.!.!. ::..

Užívateľov profilový obrázok
gabo
Medium Expert
Medium Expert
Príspevky: 64
Dátum registrácie: Ut Jan 23, 2007 5:45 am
Bydlisko: Košice
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa gabo » St Júl 16, 2008 1:05 pm

tak ja ho mam v takejto podobe

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>&#270;akujem za Váš e-mail!</b>' . "\n";
  $email_sent_msg .= "<p>Váš e-mail bol úspešne odoslaný! Odpoviem na&#328;ho &#269;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;
  }
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

Užívateľov profilový obrázok
_rasel^
ETOMITE Admin
ETOMITE Admin
Príspevky: 1122
Dátum registrácie: Ut Sep 20, 2005 1:03 am
Bydlisko: Košice (SR)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa _rasel^ » St Júl 16, 2008 7:37 pm

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. :eto:
..:: Etomite CMS → Rulezzz !.!.!. ::..

Užívateľov profilový obrázok
_rasel^
ETOMITE Admin
ETOMITE Admin
Príspevky: 1122
Dátum registrácie: Ut Sep 20, 2005 1:03 am
Bydlisko: Košice (SR)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa _rasel^ » St Júl 16, 2008 10:27 pm

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. ... momentálne je u mňa prvoradý update hlavnej stránky Etomite, tak si na prerobenie snippetu a odskúšanie nájdem čas neskôr.

V krátkosti by to malo vyzerať takto:
  1. stiahnete si knižnicu PHPMailer (nakonfigurujete príslušný súbor)
  2. stiahnete si Xajax
  3. PHP knižnicu a Xajax uploadnete do vašej inštalácie Etomite, tak aby sedela cesta podľa návodu,
  4. 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>'; 
Nebolo to testované. Ešte tam treba doplniť náhradu za captchu, niečo v zmysle: "Do políčka overovacieho reťazca napíšte pomocou číslis "dvetisíctristošesťdesiatpäť" (bez úvodzoviek) - ochrana proti spamu a overenie".

Ď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>
{{Chunk}} (nie snippet):

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&#8230;</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>
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.
..:: Etomite CMS → Rulezzz !.!.!. ::..

R - stick
Moderator & CLT
Moderator & CLT
Príspevky: 215
Dátum registrácie: Pi Sep 23, 2005 10:59 am
Bydlisko: Vysoké Studnice (u Jihlavy)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa R - stick » Št Mar 05, 2009 11:37 am

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?

Užívateľov profilový obrázok
_rasel^
ETOMITE Admin
ETOMITE Admin
Príspevky: 1122
Dátum registrácie: Ut Sep 20, 2005 1:03 am
Bydlisko: Košice (SR)
Kontaktovať užívateľa:

Re: ContactMe (MailForm)

Príspevok od užívateľa _rasel^ » Ne Mar 08, 2009 2:26 pm

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).
..:: Etomite CMS → Rulezzz !.!.!. ::..

Napísať odpoveď