ripe12
Mesaje:12
Asa cum am promis am sa pun mai jos scriptul pentru trimitere email putin mai cizelat :D. Cum am mai spus: din cauza ca scriptul face parte dintr-un ansamblu putin mai complex voi scoate liniile de cod pe care le consider legate de alte scripturi si voi pune in corpul scriptului acele lucruri care erau incluse cu (include() sau require() ). Din acest motiv exista "sansa" ca scriptul sa nu functioneze... Daca se intampla acest lucru va rog sa ma anuntati si, in masura timpului liber, voi incerca sa il repar.
NU UITATI: scriptul este gandit sa trimita mail-uri de pe un domeniu a carui server are activa functia mail()!!!, deci NU STIU daca merge de pe calculatorul vostru (evident facut srv. cu Xampp, Wamp, etc. + un client de mail ca Mercury sau altele)...
Daca puneti mai multe adrese de email la destinatar NEAPARAT sa le separati prin ; (punct si virgula!).
Din cauza ca nu stiu prea bine JavaScript m-am ajutat de DreamWeaver ca sa fac verificarile campurilor din formular, asa
ca a rezultat un cod JS destul de incarcat si cu o gramada de alte IF-uri de care nu avem nevoie, asta e...!
Rezolvand problema (dupa sfatul lui MarPlo) in care la un refresh trimitea inca o data mail-ul a trebuit sa fac inca un script pentru redirectionare in caz de refresh numit form_list.php in care obligatoriu trebuie pus:
<?php
session_start();
if (isset($_SESSION['email_enviado'])) unset ($_SESSION['email_enviado']);
//optional un link catre form_email.php
echo '<a href="form_email.php" title="Alt email">Trimitere alt email</a>';
?>
Numele scriptului este form_email.php
<?php
session_start();
ini_set('display_errors',1);
error_reporting(E_ALL);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
#email {
position: absolute;
left: 144px;
width: 295px;
height: 24px;
top: 25px;
}
-->
</style>
<title>Formular trimitere mail</title>
<script type="text/javascript">
<!--
function MM_validateForm() { //v4.0
if (document.getElementById){
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
} if (errors) alert('The following error(s) occurred:\n'+errors);
document.MM_returnValue = (errors == '');
} }
//-->
</script>
</head>
<body>
<?php
$attach = array();
function send_mail($to, $asunto, $msg, $attach) { //se creeaza functia pentru trimis email-uri
$rand_hash = md5(time());
$mime_boundary = "==Multipart_Boundary_x".$rand_hash."x";
//dirección del remitente y headers
$headers = "From: Nume Prenume<adresa_mail@siteweb.ro>" . "\n";
//dirección de respuesta, si queremos que sea distinta que la del remitente
$headers .= "Reply-To: adresa_mail@siteweb.ro" . "\n";
//ruta del mensaje desde origen a destino
$headers .= "Return-path: adresa_mail@siteweb.ro" . "\n";
if (count($attach)<1) {
$headers .= "MIME-Version: 1.0" . "\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\n";
}
else { // Aici se seteaza includerea atasamentelor (daca exista fisiere adaugate)
$headers .= "MIME-Version: 1.0\n".
"Content-Type: multipart/mixed;\n".
' boundary="'.$mime_boundary.'"';
$msg .= "Un multi-part mesaj in MIME format.\n\n".
'--'.$mime_boundary."\n".
"Content-Type:text/html; charset=\"iso-8859-1\"\n".
"Content-Transfer-Encoding: 7bit\n\n".$msg."\n\n";
for($i=0; $i<count($attach); $i++) { // Parcurge matricea cu datele fisierelor
if ($file = fopen($attach[$i][0],'rb')) { // Deschide fisierul si preia datele din el
$data = fread($file, filesize($attach[$i][0]));
fclose($file);
}
// Codeaza date preluate cu MIME base64 si le separa in parti mai mici
$data = chunk_split(base64_encode($data));
// Adauga datele fisierului in mesajul mail-ului
$msg .= '--'.$mime_boundary."\n".
'Content-Type: '.$attach[$i][2].";\n".
' name="'.$attach[$i][1]."\"\n".
"Content-Transfer-Encoding: base64\n\n".$data ."\n\n".
'--'.$mime_boundary."\n";
}
}
//trimitere email
if (mail($to, stripslashes($asunto), stripslashes($msg), $headers))
return 'Mesajul a fost trimis cu succes';
else return 'Error: mesajul nu a putut fi trimis';
}
if (!isset($_POST['cuerpo_email'])) { //Verifica daca e pentru prima oara in script
$emails='';
echo '
<form action="'.$_SERVER['PHP_SELF'].'" method="POST" enctype="multipart/form-data" name="form1" id="form1" onsubmit="MM_validateForm(\'cuerpo_email\',\'\',\'R\',\'emails\',\'\',\'RisEmail\');return document.MM_returnValue">
<div id="email">Destinatar:
<label>
<textarea name="emails" id="emails" rows="3" cols="70" wrap="soft">'.$emails.'</textarea><br /><br />
</label>
Subiect:
<label>
<input type="text" name="asunto_email" id="asunto_email" size="80" maxlength="90" /><br /><br />
</label>
Scrie mesajul:
<label>
<textarea name="cuerpo_email" id="cuerpo_email" rows="12" cols="70" wrap="hard"></textarea><br /><br />
</label>
Adaugare fisiere:
<input type="file" name="archivo1" /><br />
<input type="file" name="archivo2" /><br /><br />
<input type="submit" name="submit" value="Trimite email" />
</div>
</form>';
}
else { //A trecut deja prin formular si aduce datele pentru trimterea mailului
if (!isset($_SESSION['email_enviado'])) { //Daca testul e TRUE inseamna ca trimite emailul pentru prima oara!
$_SESSION['email_enviado']=TRUE;
if (isset($_POST['asunto_email'])) $asunto_email=$_POST['asunto_email'];
$cuerpo_email=str_replace(" "," ", $_POST['cuerpo_email']); //Transforma toate spatiile in entitati ale acestora
$mesaj = '
<html>
<head>
<style type=3D"text/css"><!-- DIV {margin:0px;} --></style>
</head>
<body>
<a href="http://www.nume_site.ro" target="_blank"> <img src="http://www.nume_site.ro/banner.png" /></a> //Unde www.nume_site.ro este site-ul tau, iar banner.png un link al unei imagini care va fi trimis in corpul mailului. Nu e obligatorie aceasta linie!
<br /><br />
<div style=3D"font-family:times new roman, new york, times, serif;font-size:12pt;color:#000000;">'.nl2br($cuerpo_email).'
</div>
<br /><br />
<a href="http://www.nume_site.ro" target="_blank" title="Site-ul meu"><h3>Numele site-ului</h3></a> //Daca mai vrei un link...
</body>
</html>';
if (is_uploaded_file($_FILES['archivo1']['tmp_name'])) { //se incarca fisierul in srv in locatia temporara
$uploadpath = $_FILES['archivo1']['tmp_name'];
$name1 = basename($_FILES['archivo1']['name']);
$attach[] = array($uploadpath, $name1, 'application/octet-stream'); //se adauga fisierul ca array
}
if (is_uploaded_file($_FILES['archivo2']['tmp_name'])) {
$uploadpath = $_FILES['archivo2']['tmp_name'];
$name2 = basename($_FILES['archivo2']['name']);
$attach[] = array($uploadpath, $name2, 'application/octet-stream');
}
$emails=explode(";",$_POST['emails']); //Se transforma array-ul in matrice cu criteriu de split dupa ;
foreach ($emails as $to) { // se parcurge matrice unde $to -> adresa de e-mail a dest.
$to=trim($to);
if (strlen($to)!="") {
// Acum se apeleaza functia, cu aceste date pe care le va trimite la serverul de mail
$go_mail = send_mail($to, $asunto_email, $mesaj, $attach);
echo $go_mail.' a '.$to.'<br />'; // Afiseaza rezultatul
}
}
$direcciones=$_POST['emails'];
$msj='Email-uri trimise la: '.$direcciones.'<br /><br />'.$mesaj;
send_mail('emailul_tau_de_beck-up@site.com', $asunto_email, $msj, $attach); //Trimite acelasi mail la o adresa specificata de tine pentru a nu fi nevoit sa-l salvezi intr-o baza de date, in plus adauga in mesaj lista de adrese de email la care a fost trimis email-ul
}
else echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=form_list.php">'; //Rezulta ca emailul a mai fost trimis o data si redirectioneaza catre pagina form_list.php
}
?>
</body>
</html>