Script php: Inviare mail con PHPMailer con 2 allegati o oltre
difficoltà:

Script simili
14/6/2007
Abbiamo visto come Inviare mail in formato html con allegato in php ma spesso mi viene chiesto come poter inviare 2 o più allegati. Nell'esempio precedente abbiamo visto come creare la nostra funzione di invio mail, in questo caso faremo uso di una semplice classe per l'invio delle mail in php: PHPMailer.
Questa classe in particolare ci permette di inviare mail con php in formato html, di inserire un testo alternativo per client che non visualizzano l'html (multipart/alternative), di aggiungere allegati (anche più di un allegato).
La classe è molto semplice da usare. Innanzitutto scarichiamo PHPMailer da questo link.
Dalla cartella preleviamo il file class.phpmailer.php che per ora sarà l'unico a servirci.
Per inviare la mail a questo punto basterà includere la classe e procedere con l'invio. Il codice completo sarà:
<?Chiaramente $oggetto sarà l'oggetto della mail, $bodyhtml il testo della mail in formato html. Nel caso volessimo aggiungere il testo alternativo in formato testo aggiungeremo $mail->AltBody = $bodytxt; in cui $bodytxt è il testo della mail in formato testo.
require_once("class.phpmailer.php");
$mail = new PHPMailer();
$mail->From = "mittente@dominio.it";
$mail->FromName = "Nome Mittente";
$mail->AddAddress("destinatario@dominio.it");
$mail->IsHTML(true);
$mail->Subject = $oggetto;
$mail->Body = $bodyhtml;
$mail->AltBody = $bodytxt;
$mail->AddAttachment("public/filename_1.zip");
$mail->AddAttachment("public/filename_2.zip");
if(!$mail->Send()){
echo "Si è verificato un errore nell'invio della mail";
}else{
echo "Mail inviata con successo";
}
?>
Con AddAttachment allegheremo gli allegati, indicandone il percorso. Si possono aggiungere quanti allegati si desidera.
Permalink:
Tag:
Script Simili:
Script php: Invio mail in formato html con allegato
Script javascript: Form di invio mail lato client
Script asp: Invio mail con Aspemail
Script asp: Invio mail con CDonts
Link utili:
Vota:
Commenti
15/6/2007 10:10:09
Hai provato a inviare allegati con nome scritto senza caratteri particolari? Tipo lo spazio che vedo che c'è codificato? Giusto per fare una prova..
Invece nel secondo file, mandi l'allegato in pdf...ma lo rinomini in new.jpg.. quindi è normale che non si veda.
Altra prova da fare. Invece che inviare subito la newletter a più utenti prova a inviare la mail solo a un indirizzo. Infatti sugli esempi di PHPMailer alla fine di ogni invio c'è:
$mail->ClearAddresses();
$mail->ClearAttachments();
però se l'allegato lo inserisci fuori dal ciclo di invio dovrebbe bastare solo la prima voce, perchè se no ad ogni ciclo aggungi un utente.
18/6/2007 9:24:23
Ciao a tutti!
Ho provato a fare delle modifiche al codice php per l'invio di più allegati. Vi scrivo il codice:
<?
$destinatario = $_POST['destinatario'];
$nominativo = $_POST['nominativo'];
$mittente = $_POST['mittente'];
$indirizzo = $_POST['indirizzo'];
$telefono = $_POST['telefono'];
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];
$allegato1 = $_FILE['allegato1'];
$allegato2 = $_FILE['allegato2'];
require_once("class.phpmailer.php");
$mail = new PHPMailer();
$mail->From = $mittente;
$mail->FromName = $nominativo;
$mail->AddAddress($destinatario);
$mail->IsHTML(true);
$mail->Subject = $oggetto;
$mail->Body = $nominativo, $indirizzo, $telefono, $messaggio, ;
$mail->AltBody = $bodytxt;
$mail->AddAttachment($allegato1);
$mail->AddAttachment($allegato2);
if(!$mail->Send()){
echo "Si è verificato un errore nell'invio della mail";
}else{
echo "Mail inviata con successo";
}
?>
I miei problemi sono i seguenti...
1- Su yahoo la mail non arriva (probabilmente perchè la individua come spam);
2- Su una mail della TOL arriva ma senza allegati;
3- Non riesco a far indicare nel testo della mail i dati "nominativo" - "indirizzo" - "telefono".
Potete darmi una mano?
Premetto che a livello di PHP sono un novellino! XD
18/6/2007 9:36:32
per i dati "nominativo" - "indirizzo" - "telefono" devi scrivere cosi:
$mail->Body = $nominativo."<br>".$indirizzo."<br>".$telefono."<br>".$messaggio;
mentre per gli allegati, innanzitutto conrolla che mel form di invio ci sia l'enctype:
<form enctype="multipart/form-data" method="post">
Inoltre ti conviene preso il file salvarlo in una cartella temporanea e poi in
$mail->AddAttachment
inserire il percorso del file che poi potai cancellare dopo l'invio.
18/6/2007 9:52:05
Innanzitutto ti ringrazio per la disponibilità e per la rapida risposta!
Il problema dell'inserimento dei dati aggiuntivi ora funziona!
Nel form di invio ho indicato questo enctype:
<form action="formmail.php" method="post" enctype="multipart/form-data">
Per salvare i file allegati in una directory temporanea come posso fare?
18/6/2007 9:58:11
Per vedere come fare l'upload vedi qua:
Upload file con filtro estensione e dimensione massima
Dall'esempio vedi come copiare il file sul server.
18/6/2007 10:35:41
Preferirei evitare di eseguire l'upload dei files...Sia per mia difficoltà nel verificare la correttezza delle istruzioni sia per sicurezza del server su cui si eseguirebbe l'upload!
Un altro metodo non c'è?
18/6/2007 11:22:20
Beh il file lo carichi comunue sul server quando lo invii tramite form, solo che non lo copi da nessuna parte e lo tiene in una sua cartella per i file temporanei con nome 'codificato'.
La soluzione migliore è caricare i file in una cartella da te creata e poi una volta effettuato l'invio eliminare il file.
18/6/2007 13:51:01
io l'ho provato ma mi da questo messaggio di errore.
Parse error: syntax error, unexpected T_VARIABLE in /web/htdocs/www.plzalliance.com/home/.../isend/send.php on line 10.
Cosa posso fare?
18/6/2007 14:16:47
Cosa c'è nella riga 10?
18/6/2007 15:07:47
Il problema è che non sarei io il mittente delle mail ma i clienti dell'azienda per cui sto creando il sito internet.
Ce li avrebbero lo stesso i permessi per copiare i file in una cartella temporanea? Se si, come posso integrare il codice dell'upload dei files con il codice per l'invio delle mail con allegati?
19/6/2007 18:35:27
@Fabio, nella riga 10: $mail->Body = $_GET['testo'];
anche se cambio la variabile con una costante non cambia nulla, il problema resta lo stesso!
Grazie.
19/6/2007 20:21:12
Vincenzo..se non mi scrivi la riga che ti da errore nn riesco a venirti in contro. Mi posti la riga 9 e la riga 10?
18/8/2007 11:27:01
help!!! ho rpvato a cercare in rete uno script che ni aiutassi a creare un form con molti allegati circa 10, ho trovato questo ma non riesco a capire come fare, premetto che conosco poco di php...
Spero che qualcuno mi aiuti a capire!!!
21/10/2007 19:29:42
Scusate ma non c'ho capito una mazza, a me mi dici email inviata... .. ?!?!
12/5/2008 2:07:01
non si capisce niente dalla spiegazione, per favore spiegate che si deve fare con i 2 files da modificare, qui pè illustrato una modifica che non c'entra nulla
12/5/2008 2:12:12
cambiare redattore, questo che ha scritto questo articolo non fa capire nulla, davvero pessimo
12/5/2008 8:00:45
@mario:
qual'è il tuo livello di conoscenza di php?
se è zero o quasi penso sia normale tu non abbia capito nulla..
ma del resto non si puó per ogni articolo partire da zero. Per capire gli articoli di php e asp bisogna conoscere php e asp, per js e ajax bisogna averne delle basi + o - solide a seconda dell'articolo.
per chi conosce php questo script risulterà banale in quanto il programmatore poco o niente dovrà fare in quanto fa tutto la classe inclusa.
se hai dubbi in particolare chiedi..
5/3/2009 15:46:57
Fabio sto utilizzando phpmailer per l'invio di un allegato con estensione .doc. Il testo della mail arriva correttamente, ma come allegato arriva un file strano phpQsxx.dat. Quale può essere il motivo secondo te?
5/3/2009 15:56:02
Usi Outlook?
cerca nelle impostazioni e disabilita il controllo sugli allegati
5/3/2009 16:26:21
Sì uso outlook. Ho provato quello che dici tu però mi arriva sempre lo stesso allegato. Vabbè nessun problema, utilizzo move_uploaded_file(..) per l'upload dell'allegato in una cartella temporanea poi unlink(..) per rimuoverlo dopo l'invio della mail.
5/3/2009 16:46:51
beh è cosi che devi fare non inviare il file temporaneo.
10/4/2009 19:46:53
Ciao a tutti, ho provato ad inviare una mail con due allegati, ma su gmail non arriva nulla, su libero mi arriva la mail con un solo allegato! :(
Qualcuno mi sa aiutare?
Grazie!
7/5/2009 18:46:02
Dove si deve scrivere tutto
io o provato sull blocco note e lo salvo .php ma poi qnd lo apro internet mi dici che lo devo scaricare
BHO ?!?!?!?!
8/6/2009 2:06:54
Simone non è HTML che si apre semplicemente tramite il browser così....devi avere apache e php installato sul pc ( se fai i test locali ) poi metti la pagina con estensione php nella directory web (ESEMPIO: c:\www\ ) e poi quando apri il tuo browser fai 127.0.0.1/pagina.php e ti carica la pagina php che hai nella dir .... Io avrei un problema con la classe, l'email in HTML se inviata a indirizzo Gmail viene messa in spam, come posso risolvere il problema??...ho metto accesso smtp del mio server e il resto ma non so come risolvere
8/6/2009 9:12:50
@Salvatore:
il problema puo' essere che il server è in qualche lista spam. O il contenuto è visto come spam. Se pero' non è questo puoi provare a risolvere inviando la mail autenticando la mail da cui invii e inviandola tramite l'smtp del server.
Per intenderci il tuo dominio avrà una mail del tipo mail@host.it che invia tramite smtp del tipo smtp.host.it(controlla qual'è effettivamente). Bisogna inviare tramite quella mail dal server. In questo modo la mail risulterà inviata da quella mail da un host esistente:
$mail->IsSMTP(); // invia la mail tramite smt
$mail->Host = "smtp.host.it"; // setto l'smtp tramite cui inviare (quello della mail che usi)
$mail->SMTPAuth = true; // usa una mail esistente e invia tramite autenticazione
$mail->Username = "mail@host.it"; // username(di solito la mail)
$mail->Password = "password"; // password della mail
2/7/2009 15:52:49
salve a tutti io sto cercando un form da mettere sun un sito che mi invii delle email ad un indirizzo di posta senza usare client di posta sul pc e senza gestione e invio degli ALLEGATI (un qualcosa di molto simile all'inserimento di questa richiesta nel forum con la differenza che invece di mandarlo in coda alla pagina lo si manda per email) solo l' invio di alcuni campi che posso modificare a seconda della pagina richiesta
ES.
pagina 1 :
nome
email (del mittente)
testo
pagina 2:
nome
tel
email (del mittente)
testo
pagina 3:
nome
tel
email (del mittente)
titolo (da mettere di default)
testo
quindi bene o male solo l'aggiunta o l'eliminazione di campi
di php non so nulla ma di programmazione ci capisco un po quindi non cadrò dalle nuvole
ho letto in giro che mi serve un invio di email dal lato server e quindi serve esclusivamente il php
ho scaricato il file: class.phpmailer.php
e il codice non so bene dove metterlo credo su una pagina html ma credo che mi manca ancora qualcosa
spero che mi possiate aiutare
grazie
10/7/2009 20:46:33
Per poter inviare più di un allegato con la classe di PHPmailer si devono apportare modifiche alla classe stessa.
Io ho modificato cosi
if (in_array($attachment[0], $incl)) { continue; }
$filename = $attachment[1];
$name = $attachment[2];
$encoding = $attachment[3];
$type = $attachment[4];
$disposition = $attachment[6];
$cid = $attachment[7];
$incl[] = $attachment[0];
if ( isset($cidUniq[$cid]) ) { continue; }
//$cidUniq[$cid] = true;
linea 1297 -1306
come si vede ho commentato la riga $cidUniq[$cid] = true;

Feed Rss
15/6/2007 9:57:11
Proprio ieri l'ho provato per sviluppare un sistema di mailing list. Le mail in html arrivano bene ma gli allegati no.
Ecco il codice che ho scritto:
Il path dei file è corretto, l'ho appena verificato.