Originalmente inviato da
alemoppo
Per quale motivo non vuoi aprirne uno nuovo?
Perchè così posso referenziare direttamente qui, ed infatti:
Originalmente inviato da
alemoppo
Non capisco, come mai dici che serve la funzione cURL?
perché qualcuno in questa discussione diceva che fopen funzionava solo in locale qui su altervista ed consigliava le curl
Originalmente inviato da
;668555
P.S. Il file non verrà mai allegato, perchè fopen() è limitata ad aprire file interni al server... Quindi devi utilizzare le cURL
di cui ho pensato io visto che ho provato proprio a fare come dicevi tu:
Originalmente inviato da
alemoppo
aggiungi di volta in volta elementi fino ad arrivare a spedire una email con allegato.
ma visto che non riusciva ad allegare nessun file pensavo fosse dovuto al fatto che non ho usato le curl
Originalmente inviato da
alemoppo
Quel codice in che senso non funziona? Parte l'email senza allegato? Non parte mai?
Arriva a destinazione, con tutti i campi compilati corettamente ma senza allegato, ecco il codice:
invia.php
Codice PHP:
$timestampcorrente=time();
$dataora=gmdate("d/m/Y H:i:s", $timestampcorrente).' UTC'; //UTC
$a=$_POST['emaila'];
$da=$a;
$oggetto=$dataora;
$messaggio=$oggetto.'<br>';
// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];
// Creo 2 variabili che riempirò più avanti...
$headers = "From: " . $da;
$msg = "";
// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo proseguo nel lavoro...
if (is_uploaded_file($allegato))
{
// Apro e leggo il file allegato
$file = fopen($allegato,'rb');
$data = fread($file, filesize($allegato));
fclose($file);
// Adatto il file al formato MIME base64 usando base64_encode
$data = chunk_split(base64_encode($data));
// Genero il "separatore"
// Serve per dividere, appunto, le varie parti del messaggio.
// Nel nostro caso separerà la parte testuale dall'allegato
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// Aggiungo le intestazioni necessarie per l'allegato
$headers .= "\nMIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n";
$headers .= " boundary=\"{$mime_boundary}\"";
// Definisco il tipo di messaggio (MIME/multi-part)
$msg .= "This is a multi-part message in MIME format.\n\n";
// Metto il separatore
$msg .= "--{$mime_boundary}\n";
// Questa è la parte "testuale" del messaggio
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$msg .= "Content-Transfer-Encoding: 7bit\n\n";
$msg .= $messaggio . "\n\n";
// Metto il separatore
$msg .= "--{$mime_boundary}\n";
// Aggiungo l'allegato al messaggio
$msg .= "Content-Disposition: attachment;\n";
$msg .= " filename=\"{$allegato_name}\"\n";
$msg .= "Content-Transfer-Encoding: base64\n\n";
$msg .= $data . "\n\n";
// chiudo con il separatore
$msg .= "--{$mime_boundary}--\n";
}
else
{
$msg = $messaggio;
}
// Invio la mail
//Per verificare che la funzione mail() sia attiva per il proprio sito basta creare uno script semplice php come il seguente, caricarlo nel proprio spazio ed eseguirlo.
if(mail($a,$oggetto,$messaggio,$headers))
echo 'email con oggetto "'.$oggetto.'" inviata correttamente a "'.$a.'"<br>Attendere ... <meta http-equiv="refresh" content="5; url=./index.php">';
else echo 'Errore!<br>Attendere ...<meta http-equiv="refresh" content="5; url=./">';
form
Codice PHP:
<form action="invia.php" method="post">
Destinazione: <input type="text" name="emaila" value="" /><br>
Allegato: <input type="file" name="allegato" /><br>
<input type="submit" name="submit" value="Submit" />
</form>
Se volessi usare appunto le curl come dovrei fare?
Ciao e grazie.