ugrás a tartalomhoz

PHP, AJAX és HTML email küldés

demenyzo · 2011. Jan. 12. (Sze), 20.31
Sziasztok! Gondom akadt email küldéssel, ami adatbázist használ. Több probléma is van vele:
- a php nem küldi ki az emailt
- az adatbázis ugyan bekerülnek az adatok, de ékezet problémái vannak (UTF-8 elvileg)

Az egész történet odáig jut el, hogy kitölti a felhasználó, kattint, kiírja, hogy üzenet küldése, majd mintha visszadobna egy üzenetet, de csak a helyét jeleníti meg. Nem írja a ki hibát vagy azt, hogy sikeresen elküldte volna. A háttérben "sikeresen - rossz karakter kódolással" kerülnek az adatok az adatbázisba. Email nem érkezik meg.

Ha valaki tud segíteni, azt megköszönném! Üdv

HTML része:
<div id="wrap" class="clearfix">
<div class="mail">
<div id="response"></div>
<form id="formail" action="" method ="post">
<label>Név : </label>
<input type="text" name="name" id="name" />
<label>Email cím :</label>
<input type="text" name="mail" id="mail" />
<label>Életkor : </label>
<input type="text" name="subject" id="subject" />
<label>Kérdésed van? </label>
<textarea name="text" id="text" cols="40" rows="3"></textarea>
<div class="clear"><input type="submit" value="sendmail" id="sendmail" name="sendmail" /></div>
</form>
</div>
</div>

AJAX része:
$(document).ready(function(){
$("#sendmail-husvet").click(function(){
var valid = '';
var isr = '!';
var name = $("#name").val();
var mail = $("#mail").val();
var subject = $("#subject").val();
var text = $("#text").val();
if (name.length<5) {
valid += '<br />Nem írtad be a neved'+isr;
}
if (!mail.match(/^([a-z0-9._-]+##kukac##[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
valid += '<br />E-mail cím hiányzik vagy hibás'+isr;
}
if (subject.length<1) {
valid += '<br />Nem adtad meg hány éves vagy'+isr;
}
if (text.length<3) {
valid += '<br />Nem kérdeztél'+isr;
}
if (valid!='') {
$("#response").fadeIn("slow");
$("#response").html("HIBA:"+valid);
}
else {
var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&text=' + encodeURIComponent(text);
$("#response").css("display", "block");
$("#response").html("Üzenet küldése ... ");
$("#response").fadeIn("slow");
setTimeout("send('"+datastr+"')",2000);
}
return false;
});
});
function send(datastr){
$.ajax({
type: "POST",
url: "mail-husvet.php",
data: datastr,
cache: false,
success: function(html){
$("#response").fadeIn("slow");
$("#response").html(html);
setTimeout('$("#response").fadeOut("slow")',2000);
}
});
}


PHP része:
<?php
date_default_timezone_set('Europe/Budapest');
if (isset($_POST['name']) && isset($_POST['mail'])) // ha a nev és az email valtozók be vannak töltve, beírja az adatbázisba. ha nem, kiadja a formot.
{
//mysql_connect('sqlserver','sqluser','sqlpass');
mysql_connect('localhost','username','pass');
mysql_select_db("mail") or die( "Nem lehet az adatbázishoz csatlakozni!");

$sql="INSERT INTO mail (reg_date, name, mail_address, ip_address) VALUES (now(), '" . $_POST['name'] . "', '" . $_POST['mail'] . "', '" . $_SERVER['REMOTE_ADDR'] . "')";

if (!mysql_query($sql)) {
echo "SQL: " . $sql . "<br />Hiba: " . mysql_error();
}
mysql_close();
}
else
{

$mail = $_POST['mail'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$text = $_POST['text'];

$to ="példa##kukac##gmail.com";
$subject ="$subject";
$message ="E-mail címe: \n ".$mail;
$message .="\n \n Neve: \n ".$name;
$message .="\n \n Üzenet: \n ".$text;

if(mail($to, $subject, $message)){
echo "A jelentkezést sikeresen elküldte... Hamarosan kap visszaigazolást.";
}
else{
echo "Hiba történt a jelentkezés küldés közben. Próbálja meg újra!";
}
}
?>
 
1

Hogyan?

Poetro · 2011. Jan. 12. (Sze), 22.39
Ezt pontosan hogyan gondolod? Eleve jó lenne ha a küldendő adatokat megfelelően escapelnéd, mert a JavaScript eleve nem jó ezen a téren. Valamint jó lenne szerver oldalon is ellenőrizni, hogy az email cím, név, stb valós adatok, és egyáltalán ki lettek-e töltve a mezők.

Mikor akarod elküldeni a levelet? Mert a kód akkor küldi el a levelet, ha nem lett megadva neki POST-ban a name es az mail mező. Azaz amikor te AJAX-szal elküldöd az üzenetet, akkor nem küldi el a levelet, csak elmenti adatbázisba. Nem lehet, hogy az adatbázis kapcsolatod alapértelmezetten nem UTF-8? Nem lehet hogy a tábládnak az adott mezője nem UTF-8? Nem escapeled megfelelően az adatbázisba írandó tartalmat, ez simán vezethet SQL Injection-höz.

Az miért van, hogy az elküldendő levél tárgyának a megadott életkort adod meg? Használj egy korszerű, és szabványos levélküldő függvénytárat / osztályt, mint a Swift Mailer, vagy PEAR Mail, PHP Mailer, és akkor később megkímélsz minket olyan kérdésektől, hogy miért vannak furcsa karakterek a levélben, miért nincsenek ékezetek a tárgyban, és társai.

Kérlek használd a kódszínezőt, csak 2 kattintás.

Kicsit módosított JavaScript, hogy legalább a változók kódolva legyenek (ezt a jQuery megcsinálja helyettünk):
$(document).ready(function() {
  $("#sendmail").click(function() {
      var valid = '';
      var isr = '!';
      var name = $("#name").val();
      var mail = $("#mail").val();
      var subject = $("#subject").val();
      var text = $("#text").val();
      if (name.length < 5) {
          valid += '<br />Nem írtad be a neved' + isr;
      }
      if (!mail.match(/^([a-z0-9._-]+##kukac##[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
          valid += '<br />E-mail cím hiányzik vagy hibás' + isr;
      }
      if (subject.length < 1) {
          valid += '<br />Nem adtad meg hány éves vagy' + isr;
      }
      if (text.length < 3) {
          valid += '<br />Nem kérdeztél' + isr;
      }
      if (valid != '') {
          $("#response").fadeIn("slow");
          $("#response").html("HIBA:" + valid);
      } else {
          var data = {
            'name' : name,
            'mail' : mail,
            'subject' : subject,
            'text': text
          }
          $("#response").css("display", "block");
          $("#response").html("Üzenet küldése ... ");
          $("#response").fadeIn("slow");
          setTimeout(send(data), 2000);
      }
      return false;
  });
});
function send(data) {
  return function () {
    $.ajax({
        type: "POST",
        url: "HTML 5-1.php",
        data: data,
        cache: false,
        success: function(html) {
            $("#response").fadeIn("slow");
            $("#response").html(html);
            setTimeout('$("#response").fadeOut("slow")', 2000);
        }
    });
  }
}