Pomoc oko php skripte za email

Nikolla983

Obećava
Poruka
87
Cao ljudi,

kao sto i sam naslov teme kaze potrebna mi je pomoc oko jedne php mail skripte. Posto se ne razumem mnogo (citaj skoro nista) u php, molio bih nekog od vas da pokusa da malo prepravi kod u cilju dobijanja zeljenog rezultata. Posto sam video da dosta ljudi trazi neku mail skriptu mislim da ce ovo dobro doci mnogima koji zele da je iskoriste. Ako pak niste raspolozeni da date svoje znanje dzabe, spreman sam da platim ovu prepravku.

Problem je sledeci: kada se klikne na dugme POSALJI u mail formi, komanda ECHO (koliko sam shvatio) daje blank stranicu na kojoj pise PORUKA NIJE/JE POSLATA, u zavisnosti od izvrsene akcije. Da li neko moze da prepravi to tako da se posle pritiskanja dugmeta POSALJI predje na stranicu npr. poslat.htm (ako je mail poslat) ili nijeposlat.htm ako mail nije poslat. Ako neko moze ovo da uradi dzabe rado cu ostaviti i kod za mail formu tako da svi mogu ovo da iskoriste, ako ne, onda neka mi posalje poruku na pp da se dogovorimo. Unapred hvala.


Kod:

<?php
$send = $_POST["send"];
$name = $_POST["name"];
$email = $_POST["email2"];
$subject = $_POST["subject"];
$message= $_POST["message"];

if(!empty($name) && !empty($email) && !empty($subject) && !empty($message))
{
$content = "-------------------------------E-mail Message-------------------------------\n";
$content .= "Vaše ime: $name\n";
$content .= "Vaša E-mail adresa: $email\n";
$content .= "Naslov poruke: $subject\n";
$content .= "Tekst poruke: \n$message\n";

mail($send, $subject, $content, "From: $email");

echo "E-mail je poslan. Hvala vam na brizi. <br>";
}

else
{
echo "Niste poslali e-mail! Niste popunili sva polja. Molimo Vas popunite sva polja i ponovo pošaljite e-mail.";
}
?>
 
PHP:
<?php
$send = $_POST["send"];
$name = $_POST["name"];
$email = $_POST["email2"];
$subject = $_POST["subject"];
$message= $_POST["message"];

if(!empty($name) && !empty($email) && !empty($subject) && !empty($message))
{
$content = "-------------------------------E-mail Message-------------------------------\n";
$content .= "Vaše ime: $name\n";
$content .= "Vaša E-mail adresa: $email\n";
$content .= "Naslov poruke: $subject\n";
$content .= "Tekst poruke: \n$message\n";

mail($send, $subject, $content, "From: $email");

header("Location: putanja_do_stranice/poslat.htm");
}

else
{
header("Location: putanja_do_stranice/nijeposlat.htm");}
?>
 
Puno ti hvala taksistaZR!

Evo i za druge koji zele da iskoriste ovu mail formu i kod za istu:

<form name="contact" method="post" action="mail.php">
<p align="center"><strong>Primalac:</strong><br>
<select name="send">
<option selected value="user@domen.fff">Obuka</option>
</select>
</p>
<p align="center"><strong>Vaše ime:</strong><br>
<input name="name" type="text" value="" size="30" maxlength="40" class="text">

</p>
<p align="center"><strong>Vaša E-mail adresa:</strong><br>
<input name="email2" type="text" value="" size="30" maxlength="40" class="text">
</p>
<p align="center"><strong>Naslov poruke</strong>:<br>
<input name="subject" type="text" value="" size="30" maxlength="40" class="text">
</p>

<p align="center"><strong>Tekst poruke:</strong><br>
<textarea name="message" cols="50" rows="10" class="text"></textarea>
</p>
<p>
<center>
<input class="button" name="submit" type="submit" value="Pošalji">
</center>
</p>
</form>
 
<?php

function send_mail($MailTo = "", $SenderName = "Sender", $SenderMail = "no@reply.error", $Subject = "", $Mailcontent = "no.file", $Attachment = "no.file", $Servername = "PHPMAILSERVER", $nohtml = "[ This message should be viewed in HTML. This is a degraded version! ]"){
if(strtoupper(substr(PHP_OS,0,3)=='WIN')){
$eol="\r\n";
$sol="\n";
}elseif(strtoupper(substr(PHP_OS,0,3)=='MAC')){
$eol="\r";
}else{
$eol="\n";
}
if(!isset($sol)){
$sol = $eol;
}
$Momentn = mktime().".".md5(rand(1000,9999));
$f_name = $Attachment;
$handle = fopen($f_name, 'rb');
$f_contents = @fread($handle, filesize($f_name));
$f_contents = @base64_encode($f_contents);
if($handle){
$sendfile = true;
if(ini_get('mime_magic.debug')){
$Bestype = @mime_content_type($Attachment);
}else{
$Bestype = 'application/octet-stream';
}
if(!$Bestype){
$Bestype = 'application/octet-stream';
}
$file_realname = explode("/", $Attachment);
$file_realname = $file_realname[count($file_realname)-1];
$file_realname = explode("\\", $file_realname);
$file_realname = $file_realname[count($file_realname)-1];
}
@fclose($handle);
$Mailcontentstri = explode($sol, $Mailcontent);
$Mailcontentstrip = strip_tags($Mailcontentstri[0]);

if(@file_exists($Mailcontentstrip)){
ob_start();
if(require($Mailcontent)){
$body = ob_get_contents();
}
ob_end_clean();
}else{
if(count($Mailcontentstri) < 2){
$body = "Error loading file!";
$error = true;
}else{
$body = $Mailcontent;
}
}

$Textmsg = eregi_replace("<br(.{0,2})>", $eol, $body);
$Textmsg = eregi_replace("</p>", $eol, $Textmsg);
$Textmsg = strip_tags($Textmsg);
$Textmsg = $nohtml.$eol.$eol.$Textmsg;
$headers .= 'To: '.$MailTo.' <'.$MailTo.'>'.$eol;
$headers .= 'From: '.$SenderName.' <'.$SenderMail.'>'.$eol;
$headers .= "Message-ID: <".$Momentn."@".$Servername.">".$eol;
$headers .= 'Date: '.date("r").$eol;
$headers .= 'Sender-IP: '.$_SERVER["REMOTE_ADDR"].$eol;
$headers .= 'X-Mailser: iPublications Adv.PHP Mailer 1.6'.$eol;
$headers .= 'MIME-Version: 1.0'.$eol;
$bndp = md5(time()).rand(1000,9999);
$headers .= "Content-Type: multipart/mixed; $eol boundary=\"".$bndp."\"".$eol.$eol;
$msg = "This is a multi-part message in MIME format.".$eol.$eol;
$msg .= "--".$bndp.$eol;
$bnd = md5(time()).rand(1000,9999);
$msg .= "Content-Type: multipart/alternative; $eol boundary=\"".$bnd."\"".$eol.$eol;
$msg .= "--".$bnd.$eol;
$msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$msg .= $Textmsg.$eol;
$msg .= "--".$bnd.$eol;
$msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8-bit".$eol.$eol;
$msg .= $body.$eol;
$msg .= "--".$bnd."--".$eol.$eol;
if(isset($sendfile)){
$msg .= "--".$bndp.$eol;
$msg .= "Content-Type: $Bestype; name=\"".$file_realname."\"".$eol;
$msg .= "Content-Transfer-Encoding: base64".$eol;
$msg .= "Content-Disposition: attachment;".$eol;
$msg .= " filename=\"".$file_realname."\"".$eol.$eol;
$f_contents = chunk_split($f_contents);
$msg .= $f_contents.$eol;
}
$msg .= "--".$bndp."--";
if(!isset($error)){
if(@mail($MailTo, $Subject, $msg, $headers)){
return true;
}else{
return false;
}
}else{
return false;
}
}

?>
MOZE I OVAKO ZAR NE
 
Gill Bates:
Ne valja! *ebes mail formu bez provere ispravnosti e-maila!
Cemu taj sarkazam u postu?

Ovo sto je @Nikolla983 postavio je bazican primer e-mail skripte.
Naravno da nema proveru ispravnosti e-maila.
PHP:
function email_ok($email)
{
    if(!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+.[a-z]{2,6}$",$email))
    {
        return false;
    }
    return true;
}
if (email_ok($email) == false) {
die() 'Email <b>'.$_POST['email'].'</b> je neispravno napisan.' ;
}
Ovo je jedan od mnogo nacina na koji to moze da se odradi.
Pre toga valjalo bi odraditi proveru u js da se podaci ne salju na server bez potrebe, a php provera da stoji za slucaj ako korisnik pokusa da 'zaobidje' proveru tj. iskljuci js u browseru.
U toj skripti nisu poslati headeri da mail ne zavrsi u spamu, takodje nije podrzano slanje attachment-a niti html maila i mnogo drugih stvari, ali ponavljam, ovo je bazican primer slanja e-maila preko PHP-a i dobro je da jedna takva skripta stoji na forumu.
 
U mom primeru prolazi : 2karaktera(ne svi karakteri) @ 2karaktera(ne svi karakteri) . 2slova

Mogu da se koriste neke funkcije kao sto je checkdnsrr() ili getmxrr() da se proveri da li postoji server i user i onda bi se videlo da co ne postoji, ali ne volim to da koristim zato sto nije na svim serverima moguce proveriti postojanje usera pa bi dosao u situaciju da neki email koji je stvarno ispravan pokaze kao neispravan.
Ovako svaki ispravan email ce proci validaciju, a 100% zastite u ispravnost nemas, moras da se zrtvujes na jednu stranu.
 
U tom primeru deo @[a-z0-9.-]+.[a-z]{2,6}$ dopusta @sajt.yu, ali i @sajt.uy.

Takodje mislim da bi ti proslo @sajt.nesto.nesto1.nesto2.nesto3.yu To je zbog @[a-z0-9.-]+ odnosno zbog "+" - jedan ili vise puta. Valjda treba {1,2} umesto + da bi postigli @poddomen.sajt.{tld} Dalje, za tld zbog .org.yu ili co.uk treba jos dopunjavati...
 
Nije bas ni tamo kako treba ^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$

Ja sam razmisljam da odradim drugacije

$a = explode("@", $email);
list($mailbox,$mailserver) = $a;
$delovi_domena = explode(".",$mailserver);

pa dalje ispitujes niz $delovi_domena zavisno da li si ima dva, tri ili cetiri clana
 
Moze da se doda to sto si napisao, resice problem sa @sajt.nesto.nesto1.nesto2.nesto3.yu , ali opet ce prolaziti @sajt.yu i @sajt.uy .

Mozes da zadas domene koji smeju da se nadju na tom mestu, ali nikada neces pokupiti sve moguce domene i opet postoji sansa da ispravan e-mail ne prodje zbog toga sto nije u tvojoj listi ...

Sve u svemu mislim da potpuna validacija nije moguca, vazno je samo da se sto bolje ogranici unos da se ne prihvata bilo sta, a pritom da se omoguci siguran unos svih ispravnih podataka.

Ako je na serveru instaliran php5.2 postoji funkcija filter_var() koja vrsi validaciju.
 
trebala bi mi jedna "mala" modifikacija form to mail skripte pa ako nije problem postovao bih ovde kod(code) da ne otvaram novu temu, a cini mi se da ce do resenja neki ljudi odavde vrlo brzo doci.

--- izmena ---

"problem" je u sledecem. kada mi stigne mail sa porukom nasa slova se ne vide vec umesto njih budu neki znakovi. predpostavljam da je potrebno negde ubaciti utf-8 ali stvarno nemam pojma gde.

ovo je deo skripte, deo je iz php-a da ne zamraram sada sa onom formom iz htm-a

PHP:
 <?php


$my_email = "email@email.com";

$continue = "/";

$errors = array();

// Remove $_COOKIE elements from $_REQUEST.

if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}

// Check all fields for an email header.

function recursive_array_check_header($element_value)
{

global $set;

if(!is_array($element_value)){if(preg_match("/(%0A|%0D|\n+|\r+)(content-type:|to:|cc:|bcc:)/i",$element_value)){$set = 1;}}
else
{

foreach($element_value as $value){if($set){break;} recursive_array_check_header($value);}

}

}

recursive_array_check_header($_REQUEST);

if($set){$errors[] = "You cannot send an email header";}

unset($set);

// Validate name field.

if(isset($_REQUEST['name']) && !empty($_REQUEST['name']))
{

if(preg_match("/[^a-z' -]/i",stripslashes($_REQUEST['name']))){$errors[] = "You have entered an invalid character in the name field";}

}

// Validate email field.

if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{

if(preg_match("/(%0A|%0D|\n+|\r+|:)/i",$_REQUEST['email'])){$errors[] = "Email address may not contain a new line or a colon";}

$_REQUEST['email'] = trim($_REQUEST['email']);

if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Email address is invalid";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Email address is invalid";}else{if(substr_count($exploded_email[1],".") == 0 || substr_count($exploded_email[1],".") > 3){$errors[] = "Email address is invalid";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Email address is invalid";}else{foreach($exploded_domain as $key => $value){if($key == 0){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}elseif(strlen($value) > 6 || !preg_match('/^[a-z0-9]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}}}}}

}

// Remove leading whitespace from all values.

function recursive_array_check(&$element_value)
{

if(!is_array($element_value)){$element_value = ltrim($element_value);}
else
{

foreach($element_value as $key => $value){$element_value[$key] = recursive_array_check($value);}

}

return $element_value;

}

recursive_array_check($_REQUEST);

// 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[] = "You cannot send a blank form";}

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."Thank you";

$message = stripslashes($message);

$subject = "FormToEmail Comments";

$headers = "From: " . $_REQUEST['email'];

mail($my_email,$subject,$message,$headers);

?>
 

Back
Top