Buongiorno,
sono nuovo alla programmazione in PHP quindi non so se il problema sia già stato discusso, ma non riesco a risolverlo con quanto ho trovato online.
Sto progettando un sito in cui intendo inserire un contact-form che invia i dati e gli allegati tramite PHPMailer.
Il problema si presenta quando tento di inviare uno o più file la cui dimensione totale è superiore a 1.5 mb, PHPMailer mi restituisce il messaggio
"Impossibile istanziare la funzione mail".
Se la dimensione dei file (anche più di uno) è inferiore la mail viene inviata senza problemi...
Sapete darmi qualche dritta? Grazie
P.S.:
il problema è sicuramente riferibile a PHPMailer in quanto lo stesso form gestito in ASP funziona perfettamente;
il sito è caricato su Aruba che gestische allegati PHP di dimensioni molto superiori (ripeto, in ASP nessun problema)
<?php
require 'PHPMailer/PHPMailerAutoload.php';
// email del mittente
$fromEmail = $_POST['email'];
$fromName = 'Modulo di contatto';
// email del destinatario
$sendToEmail = 'xxx@yyy.it';
$sendToName = 'xxxx';
// oggetto del messaggio
$subject = 'Nuovo messaggio dal modulo di contatto';
// nomi dei campi del modulo e loro traduzioni
// nome variabile nella matrice => Testo da visualizzare nell'email
$fields = array('name' => 'Nome', 'surname' => 'Cognome', 'phone' => 'Telefono', 'email' => 'Email', 'message' => 'Messaggio');
// messaggio che verrà visualizzato in caso di successo
$okMessage = 'Il modulo di contatto è stato inviato con successo. Grazie!';
// messaggio che verrà visualizzato in caso di errore
$errorMessage = "Si è verificato un errore durante l'invio del modulo. Per favore riprova più tardi!";
try {
if(count($_POST) == 0) throw new \Exception('Il modulo è vuoto!');
// inizializza la classe PHPMailer
$mail = new PHPMailer;
// imposta l'email
$mail->setLanguage('it');
$mail->setFrom($fromEmail, $fromName);
$mail->addAddress($sendToEmail, $sendToName);
$mail->addReplyTo($from);
$mail->Subject = $subject;
$mail->isHTML(true);
// imposta il testo del messaggio
$emailTextHtml = "<h1>Hai un nuovo messaggio dal tuo modulo di contatto</h1>";
$emailTextHtml .= "<table>";
foreach ($_POST as $key => $value) {
// se il campo esiste nella matrice $fields, lo include nel messaggio e-mail
if (isset($fields[$key])) {
$emailTextHtml .= "<tr><th style='text-align:left'>$fields[$key]: </th><td>$value</td></tr>";
}
}
$emailTextHtml .= "</table>";
$emailTextHtml .= "<p>Buona giornata!</p>";
$mail->msgHTML($emailTextHtml);
// allega i file all'email
$count = count($_FILES['attachment']['name']);
for ($i = 0; $i < $count; $i ++) {
if (!empty($_FILES["attachment"]["name"][$i])) {
$tempFileName = $_FILES["attachment"]["tmp_name"][$i];
$fileName = $_FILES["attachment"]["name"][$i];
$mail->AddAttachment($tempFileName, $fileName);
}
}
// invia l'email e intercetta l'eventuale errore
if(!$mail->send()) {
throw new \Exception("Non ho potuto inviare l'email: " . $mail->ErrorInfo);
}
// SUCCESSO: imposta il messaggio
$okmessage = $count;
$responseArray = array('type' => 'success', 'message' => $okMessage);
} catch (\Exception $e) {
// ERRORE: imposta messaggio
// $responseArray = array('type' => 'danger', 'message' => $errorMessage);
$responseArray = array('type' => 'danger', 'message' => $e->getMessage());
}
// se richiesto dalla richiesta AJAX, restituisce la risposta JSON
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);
header('Content-Type: application/json');
echo $encoded;
} else {
echo $responseArray['message'];
}