else {
echo "Invalid file: *".$_FILES["file"]["type"]."* *".$_FILES["file"]["size"]."*";
}
Così puoi renderti conto di cosa arriva al tuo if.
else {
echo "Invalid file: *".$_FILES["file"]["type"]."* *".$_FILES["file"]["size"]."*";
}
Così puoi renderti conto di cosa arriva al tuo if.
"Le uniche cose che sbagli sono quelle che non provi a fare."
Atipica
Qui non sta funzionando niente. L'istruzione che mi dici non dà nessun messggio differente da quelli precedenti, e niente viene caricato sul server. Questo script funziona benissimo senza file, ma quando vado ad allegare un file non sa proprio distinguere il bianco dal nero. Ma con tutto questo proliferare di tutorial, non esiste un modo semplice per far caricare un file ed inviare un link nella mail che ricevo? Io non lo trovo. E poi mi sono imbattuto in form che caricano il file in un secondo, non è detto che debbano impiegare molto.
Ultima modifica di stardom; 25-02-2014 a 22:28
No: il tempo in cui un form carica un file è strettamente funzione della dimensione in kb del file e della velocità della tua connessione ad internet. NON esistono form in grado ci caricare più velocemente, semplicemente perchè la velocità non dipende da come è fatta la form.
Detto questo, qualcosa verrà scritto!
Anzi, ti dirò: ho appena provato ed ha funzionato tutto:
Upload: cod1.jpeg
Type: image/jpeg
Size: 11.478515625 Kb
Stored in: /tmp/php0vnxOY
Stored in: attachments/cod1.jpeg
La Vs. email è stata inviata. Riceverete ns. riscontro a breve.
Quindi cos'è che non funziona?
"Le uniche cose che sbagli sono quelle che non provi a fare."
Atipica
Sai cos'è che non funziona? Ci mette un sacco di tempo per caricare una jpg di 20k; e poi, nella mail che ricevo, il link del download è interrotto, nel senso che se per esempio ho un file che si chiama nome_cognome.jpg (o doc, o pdf, etc) il link si interrompe nell'undescore "nome_". E poi c0'è il fatto che non carica niente sulla cartella.
In altre parole, si ha un messaggio di "email inviata", ed un link nella mail, ma nella cartella non c'è niente.
Poi vorrei che la dicitura "il cliente ha allegato un file" compaia nella mail solo se effettivamente è stato inviato un file. Se no, la dicitura dovrebbe non apparire.![]()
Beh, sul fatto che il link sia sbagliato, per forza, devi usare il path definitivo in cui sposti il file come url che inserisci nella mail, altrimenti non funzionerà mai:
"http://ww.tuosito.it/attachments/" . $_FILES["attachment"]["name"]
Ma scusami, il file cod1.jpeg che ti ho caricato io c'è nella cartella attachments?
Quanto al fatto di mettere il messaggio dell'allegato solo se l'allegato c'è, ti basterà un if:
if (trim($_FILES["file"]["name"])!=""):
Allora metti il messaggio.
"Le uniche cose che sbagli sono quelle che non provi a fare."
Atipica
Shores, Il tuo file cod1.jpeg stava sulla cartella, e pur essendo il link corretto, non so perchè nessuno dei miei file va nella cartella.
Ho anche inserito il tuo codicillo per l'allegato non presente, ma non funziona. A questo punto io risposto il mio codice, in modo che possiate analizzarlo nel dettaglio...
Codice PHP:/* ------------------ ATTACHMENTS SETTINGS ------------------------- */
$allowedExts = array("jpeg", "jpg", "doc", "pdf", "zip", "rar");
$allowedTypes = array("image/jpg", "image/jpeg", "image/pjpeg", "application/doc", "application/docx", "application/pdf", "application/zip", "application/rar");
$temp = explode(".", $_FILES["attachment"]["name"]);
$extension = end($temp);
if (in_array($_FILES["attachment"]["type"], $allowedTypes)
&& ($_FILES["attachment"]["size"] < 20000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["attachment"]["error"] > 0) {
echo "Error: " . $_FILES["attachment"]["error"] . "<br>";
}
else {
echo "Upload: " . $_FILES["attachment"]["name"] . "<br>";
echo "Type: " . $_FILES["attachment"]["type"] . "<br>";
echo "Size: " . ($_FILES["attachment"]["size"] / 1024) . " Kb<br>";
echo "Stored in: " . $_FILES["attachment"]["tmp_name"] . "<br />";
}
if (file_exists("attachments/" . $_FILES["attachment"]["name"])) {
echo $_FILES["attachment"]["name"] . " already exists. <br />";
}
else {
move_uploaded_file($_FILES["attachment"]["tmp_name"], "attachments/" . $_FILES["attachment"]["name"]);
echo "Stored in: " . "attachments/" . $_FILES["attachment"]["name"] ."<br />";
}
}
if (trim($_FILES["file"]["name"])!="non è stato allegato nessun file");
/* ------------------ SMTP EMAIL SETTINGS ------------------------- */
require_once("class.phpmailer.php");
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = "lalegatoria.it"; // SMTP server
// $mail->SMTPDebug = 2; // 0 for production use, 1 errors and messages, 2 messages only
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPPort = 25; // set the SMTP port for the GMAIL server
$mail->Username = "smtp@lalegatoria.it"; // SMTP account username
$mail->Password = "Leogin02!"; // SMTP account password
$mail->CharSet = 'UTF-8'; // so it interprets foreign characters
$mail->From = $mail->Username;
$mail->AddAddress("commerciale@lalegatoria.it", "Paola & Alberto");
$mail->AddAttachment($attachments); // attachment
$mail->Subject = "RICHIESTA PREVENTIVO DAL NS. SITO WEB";
$mail->Body .= "Abbiamo appena ricevuto una richiesta di preventivo da: ".$_POST['name']."\n";
$mail->Body .= "Nome dell'azienda: ".$_POST['companyname']."\n\n";
$mail->Body .= "Contattare al numero: ".$_POST['phone']."\n";
$mail->Body .= "preferibilmente: ".$_POST['besttime']."\n";
$mail->Body .= "oppure all'indirizzo email: ".$_POST['email']."\n\n";
$mail->Body .= "Il messaggio ha per oggetto: ".$subject."\n";
$mail->Body .= "Testo del messaggio: ".$_POST['message']."\n\n";
$linkAlFile = $_FILES["attachment"]["name"];
$mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da: http://www.lalegatoria.it/contact/attachments/".$linkAlFile."\n\n";
// $mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da: ".$_POST['file']."\n\n";
$mail->Body .= "Non dimentichiamoci che la richiesta ha carattere di urgenza!";
$redirect_url = "http://www.lalegatoria.it";
$mail->WordWrap = 150;
if(!$mail->Send()) {
echo 'Non è stato possibile inviare il Vs. messaggio.';
echo 'Mailer error: ' . $mail->ErrorInfo;
exit;
}
else {
echo 'La Vs. email è stata inviata. Riceverete ns. riscontro a breve.';
}
header("Location: $redirect_url");
Mi sa che qui veramente ci perdiamo in un bicchiere d'acqua, al punto di non sapere dove mettere un if quando ti viene detto esplicitamente dove metterlo...
Codice PHP:<?php
//caricamento librerie
require_once("class.phpmailer.php");
//impostazioni
$attachmentpresent = FALSE;
$destinName = "Paola & Alberto";
$destinAddress = "commerciale@lalegatoria.it";
$smtpHost="lalegatoria.it";
$smtpUsername="smtp@lalegatoria.it";
$smtpPassword="Leogin02!";
$allowedExts = array("jpeg", "doc", "pdf", "zip", "rar");
$allowedSubjects = array("","legatoria","restauro","grafica","stampa","amministrazione","altro");
$allowedMimes = array("image/jpeg","image/jpg","image/pjpeg","application/doc","application/docx","application/pdf","application/zip","application/rar");
//ricezione dati dalla maschera
$email = $_POST['email'];
$name = $_POST['name'];
$companyname = $_POST['companyname'];
$phone = $_POST['phone'];
$besttime = $_POST['besttime'];
$message= $_POST['message'];
//verifica scelta oggetto
$subject="";
if ($subjectindex == 0 || !isset($_POST['subject']) || !inarray($_POST['subject'],$allowedSubjects)):
die ("Non hai scelto l'oggetto del tuo messaggio. Torna indietro e correggi l'errore.");
else:
$subject = $allowedSubjects[$_POST['subject']];
endif;
//verifica dati della maschera
//ho commentato queste linee perchè non includi nessun file esterno che definisca queste funzioni che chiami
//strlencheck($name,0,60,"Hai indicato un nome troppo lungo, o non hai indicato un nome proprio. Torna indietro e correggi l'errore.");
//strlencheck($companyname,0,60,"Hai indicato un nome aziendale troppo lungo, o non hai indicato un nome proprio. Torna indietro e correggi l'errore.");
//checkphone($phone,0,"Hai indicato un numero di telefono improprio. Torna indietro e correggi l'errore.");
if (!array_key_exists("attachment",$_FILES)):
//nessun allegato caricato
else:
if ($_FILES["attachment"]["error"] > 0):
//errore di upload, quindi non devo occuparmi del file uploadato
echo "Errore di upload: " . $_FILES["attachment"]["error"] . "<br>";
else:
if (file_exists("attachments/" . $_FILES["attachment"]["name"])):
//il file esiste già
echo "Errore di upload, il file ".$_FILES["attachment"]["name"]." esiste già.";
else:
$temp = explode(".", $_FILES["attachment"]["name"]);
$extension = end($temp);
if (!inarray($_FILES["attachment"]["type"],$allowedmimes)
|| (!$_FILES["attachment"]["size"] < 20000)
|| !in_array($extension, $allowedExts)):
echo "Errore: il file allegato non è di un tipo permesso o è troppo grande.<br>";
else:
echo "Nome file originario: " . $_FILES["attachment"]["name"] . "<br>";
echo "Mime type del file: " . $_FILES["attachment"]["type"] . "<br>";
echo "Dimensione del file: " . ($_FILES["attachment"]["size"] / 1024) . " Kb<br>";
echo "File temporaneo: " . $_FILES["attachment"]["tmp_name"];
if (move_uploaded_file($_FILES["attachment"]["tmp_name"],"attachments/" . $_FILES["attachment"]["name"])):
echo "File salvato in: " . "attachments/" . $_FILES["attachment"]["name"];
$attachmentpresent = true;
else:
echo "Errore spostando il file in: " . "attachments/" . $_FILES["attachment"]["name"];
endif;
endif;
endif;
endif;
endif;
$mail = new PHPMailer();
//parametri server smtp
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = $smtpHost; // SMTP server
$mail->SMTPDebug = 1; // 0 for production use, 1 errors and messages, 2 messages only
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPPort = 25; // set the SMTP port for the GMAIL server
$mail->Username = $smtpUsername; // SMTP account username
$mail->Password = $smtpPassword; // SMTP account password
//parametri messaggio email
$mail->WordWrap = 150;
$mail->CharSet = 'UTF-8'; // so it interprets foreign characters
$mail->From = $smtpUsername;
$mail->ReplyTo = $email;
$mail->AddAddress($destinAddress, $destinName);
//se presente un allegato provo anche ad allegarlo alla email
if ($attachmentpresent):
$mail->AddAttachment("attachments/" . $_FILES["attachment"]["name"]); // attachment
endif;
//oggetto e corpo email
$mail->Subject = "RICHIESTA PREVENTIVO DAL NS. SITO WEB";
$mail->Body .= "Abbiamo appena ricevuto una richiesta di preventivo da: ".$name."\n";
$mail->Body .= "Nome dell'azienda: ".$companyname."\n\n";
$mail->Body .= "Contattare al numero: ".$phone."\n";
$mail->Body .= "preferibilmente: ".$besttime."\n";
$mail->Body .= "oppure all'indirizzo email: ".$email."\n\n";
$mail->Body .= "Il messaggio ha per oggetto: ".$subject."\n";
$mail->Body .= "Testo del messaggio: ".$message."\n\n";
//in ogni caso nella mail metto il link al file sul server
if ($attachmentpresent):
$mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da: http://www.lalegatoria.it/attachments/".$_FILES["attachment"]["name"]."\n\n";
endif;
$mail->Body .= "Non dimentichiamoci che la richiesta ha carattere di urgenza!";
//invio email
if(!$mail->Send()):
//fallito
echo 'Non è stato possibile inviare il Vs. messaggio.';
echo 'Mailer error: ' . $mail->ErrorInfo;
else:
//riuscito
echo 'La Vs. email è stata inviata. Riceverete ns. riscontro a breve.';
//decommenta questa linea per eliminare il file una volta speditolo correttamente come allegato
//unlink("attachments/" . $_FILES["attachment"]["name"]);
endif;
?>
"Le uniche cose che sbagli sono quelle che non provi a fare."
Atipica
mi sa che il bicchiere d'acqua va giù solo a te...a me continua a dare errore o a non fare nulla. Ho modificato correttamente il file come da tue indicazioni, ma:
1) che io metta o meno l'oggetto della mail, mi dice sempre "non hai scelto l'oggetto"
2) se dunque sostituisco il tuo codicecon il mioCodice PHP:$subject ="";
if ($subjectindex == 0 || !isset($_POST['subject']) || !inarray($_POST['subject'],$allowedSubjects)): die ("Non hai scelto l'oggetto del tuo messaggio. Torna indietro e correggi l'errore.");
else: $subject = $allowedSubjects[$_POST['subject']];
endif;
a) la mail viene inviata, però con dicitura "errore di caricamento" se non allego il file, oppureCodice PHP:$subject = array();
$subject[1] = legatoria;
$subject[2] = restauro;
$subject[3] = grafica;
$subject[4] = stampa;
$subject[5] = amministrazione;
$subject[6] = altro;
$subjectindex = $_REQUEST['subject'];
if ($subjectindex == 0 || !isset($_POST['subject'])) die ("Non hai scelto l'oggetto del tuo messaggio. Torna indietro e correggi l'errore.");
else $subject = $allowedSubjects[$_POST['subject']];
b) non viene inviata e non mi dà nessun errore se allego il file
3) con entrambi i codici di riferimento dell'oggetto email, nessun file viene caricato sul server e quindi nella mail non ricevo nessun messaggio di allegato (che preferirei comunque avere, "non è stato allegato nessun file", piuttosto che nessun messaggio: ovvero l'istruzione if (trim($_FILES["file"]["name"])!="non è stato allegato nessun file"); che mi avevi indicato)
Ho corretto due piccoli refusi:
Ma a questo punto, sei sicuro che il tuo server abbia attivi gli upload di file, e/o non abbia un limite troppo basso di kb permessi?Codice PHP:<?php
//caricamento librerie
require_once("class.phpmailer.php");
//impostazioni
$attachmentpresent = FALSE;
$destinName = "Paola & Alberto";
$destinAddress = "commerciale@lalegatoria.it";
$smtpHost="lalegatoria.it";
$smtpUsername="smtp@lalegatoria.it";
$smtpPassword="Leogin02!";
$allowedExts = array("jpeg", "doc", "pdf", "zip", "rar");
$allowedSubjects = array("","legatoria","restauro","grafica","stampa","amministrazione","altro");
$allowedMimes = array("image/jpeg","image/jpg","image/pjpeg","application/doc","application/docx","application/pdf","application/zip","application/rar");
//ricezione dati dalla maschera
$email = $_POST['email'];
$name = $_POST['name'];
$companyname = $_POST['companyname'];
$phone = $_POST['phone'];
$besttime = $_POST['besttime'];
$message= $_POST['message'];
//verifica scelta oggetto
$subject="";
if (!isset($_POST['subject']) || !inarray($_POST['subject'],$allowedSubjects)):
die ("Non hai scelto l'oggetto del tuo messaggio. Torna indietro e correggi l'errore.");
else:
$subject = $allowedSubjects[$_POST['subject']];
endif;
//verifica dati della maschera
//ho commentato queste linee perchè non includi nessun file esterno che definisca queste funzioni che chiami
//strlencheck($name,0,60,"Hai indicato un nome troppo lungo, o non hai indicato un nome proprio. Torna indietro e correggi l'errore.");
//strlencheck($companyname,0,60,"Hai indicato un nome aziendale troppo lungo, o non hai indicato un nome proprio. Torna indietro e correggi l'errore.");
//checkphone($phone,0,"Hai indicato un numero di telefono improprio. Torna indietro e correggi l'errore.");
if (!array_key_exists("attachment",$_FILES) || trim($_FILES["attachment"]["name"])==""):
//nessun allegato caricato
else:
if ($_FILES["attachment"]["error"] > 0):
//errore di upload, quindi non devo occuparmi del file uploadato
echo "Errore di upload: " . $_FILES["attachment"]["error"] . "<br>";
else:
if (file_exists("attachments/" . $_FILES["attachment"]["name"])):
//il file esiste già
echo "Errore di upload, il file ".$_FILES["attachment"]["name"]." esiste già.";
else:
$temp = explode(".", $_FILES["attachment"]["name"]);
$extension = end($temp);
if (!inarray($_FILES["attachment"]["type"],$allowedmimes)
|| (!$_FILES["attachment"]["size"] < 20000)
|| !in_array($extension, $allowedExts)):
echo "Errore: il file allegato non è di un tipo permesso o è troppo grande.<br>";
else:
echo "Nome file originario: " . $_FILES["attachment"]["name"] . "<br>";
echo "Mime type del file: " . $_FILES["attachment"]["type"] . "<br>";
echo "Dimensione del file: " . ($_FILES["attachment"]["size"] / 1024) . " Kb<br>";
echo "File temporaneo: " . $_FILES["attachment"]["tmp_name"];
if (move_uploaded_file($_FILES["attachment"]["tmp_name"],"attachments/" . $_FILES["attachment"]["name"])):
echo "File salvato in: " . "attachments/" . $_FILES["attachment"]["name"];
$attachmentpresent = true;
else:
echo "Errore spostando il file in: " . "attachments/" . $_FILES["attachment"]["name"];
endif;
endif;
endif;
endif;
endif;
$mail = new PHPMailer();
//parametri server smtp
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = $smtpHost; // SMTP server
$mail->SMTPDebug = 1; // 0 for production use, 1 errors and messages, 2 messages only
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPPort = 25; // set the SMTP port for the GMAIL server
$mail->Username = $smtpUsername; // SMTP account username
$mail->Password = $smtpPassword; // SMTP account password
//parametri messaggio email
$mail->WordWrap = 150;
$mail->CharSet = 'UTF-8'; // so it interprets foreign characters
$mail->From = $smtpUsername;
$mail->ReplyTo = $email;
$mail->AddAddress($destinAddress, $destinName);
//se presente un allegato provo anche ad allegarlo alla email
if ($attachmentpresent):
$mail->AddAttachment("attachments/" . $_FILES["attachment"]["name"]); // attachment
endif;
//oggetto e corpo email
$mail->Subject = "RICHIESTA PREVENTIVO DAL NS. SITO WEB";
$mail->Body .= "Abbiamo appena ricevuto una richiesta di preventivo da: ".$name."\n";
$mail->Body .= "Nome dell'azienda: ".$companyname."\n\n";
$mail->Body .= "Contattare al numero: ".$phone."\n";
$mail->Body .= "preferibilmente: ".$besttime."\n";
$mail->Body .= "oppure all'indirizzo email: ".$email."\n\n";
$mail->Body .= "Il messaggio ha per oggetto: ".$subject."\n";
$mail->Body .= "Testo del messaggio: ".$message."\n\n";
//in ogni caso nella mail metto il link al file sul server
if ($attachmentpresent):
$mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da: http://www.lalegatoria.it/attachments/".$_FILES["attachment"]["name"]."\n\n";
else:
$mail->Body .= "Il cliente non ha inviato un allegato.\n\n";
endif;
$mail->Body .= "Non dimentichiamoci che la richiesta ha carattere di urgenza!";
//invio email
if(!$mail->Send()):
//fallito
echo 'Non è stato possibile inviare il Vs. messaggio.';
echo 'Mailer error: ' . $mail->ErrorInfo;
else:
//riuscito
echo 'La Vs. email è stata inviata. Riceverete ns. riscontro a breve.';
//decommenta questa linea per eliminare il file una volta speditolo correttamente come allegato
//unlink("attachments/" . $_FILES["attachment"]["name"]);
endif;
?>
"Le uniche cose che sbagli sono quelle che non provi a fare."
Atipica
Nel ringraziarti per la pazienza, ti confermo che l'upload dei file è attivo sul mio server per max 2M.
La mail viene inviata solo se utilizzo il mio codice per il $subject array mentre con il tuo non funziona (non so perchè), ma sempre senza file allegato. Se provo ad allegare un file mi va in una pagina blank e la mail non è inviata. Persistono dunque i punti a) e b) come indicavo.