Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    PhpMailer dentro a funzione

    Ciao a tutti, sto pensando di usare la classe PHPMailer per inviare le email dal sito, ma ho qualche dubbio sul come farlo.

    un codice puramente di esempio per PhpMailer sarebbe questo:

    codice:
    <?
    require "phpmailer/class.phpmailer.php";
    $messaggio = new PHPmailer();
    $messaggio->IsSMTP();
    $messaggio->Host='Host SMTP';
    $messaggio->From='info@mittente.it';
    $messaggio->AddAddress('info@destinatario.it');
    $messaggio->AddReplyTo('info@mittente.it'); 
    $messaggio->Subject='Email con allegato';
    $messaggio->Body='Invio file Pdf';
    
    //percorso all'allegato
    $messaggio->AddAttachment('pdf/file.pdf');
    if(!$messaggio->Send()){
      echo $messaggio->ErrorInfo; 
    }else{ 
      echo 'Email inviata correttamente!';
    }
    $messaggio->SmtpClose();
    unset($messaggio); 
    ?>
    per usarlo, si potrebbe fare una pagina dedicata invioemail.php, a cui di volta in volta quando serve si inviano i dati e si fa spedire l'email, il tutto volendo si potrebbe fare con un chiamata ajax, facendosi tornare il risultato dell'invio.

    ma... ad esempio.. io ho un form di registrazione, che al suo completamente fa una chiamata ajax a una pagina che fa gli insert su db.. e al suo interno, se tutto va bene, invia l'email di avvenuta registrazione.

    in questo caso come potrei gestire la cosa?

    io prima usavo la funzione mail(), e mi ero creato una mia funzione invioemail() all'interno di una mia classe.. che appunto richiamavo all'occorrenza.

    codice:
    class panda extends mysqli 
    {
    
    public function my_invioemail($arraybbc,$to,$fromtext,$fromemail,$oggetto,$testomessaggio,$allegato,$typeallegato,$pathallegato)
    	{
    		global $_LANG;
    		// costruiamo alcune intestazioni generali
    		$header = "From: ".$fromtext." <".$fromemail.">\n";
    		
    		// generiamo la stringa che funge da separatore
    		$boundary = "==String_Boundary_x" .md5(time()). "x";
    		
    		// costruiamo le intestazioni specifiche per un messaggio
    		// con parti relazionate
    		$header .= "MIME-Version: 1.0\n";
    		$header .= "Content-Type: multipart/related;\n";
    		$header .= " boundary=\"$boundary\";\n\n";
    		
    		// questa parte del messaggio viene visualizzata
    		// solo se il programma non sa interpretare
    		// i MIME poiché è posta prima della stringa boundary
    		$messaggio = $_LANG['email_nomime']."\n\n";
    		
    		// costruiamo la sezione in formato html
    		$messaggio .= "--$boundary\n";
    		$messaggio .= "Content-Type: text/html; charset=\"UTF-8\"\n";
    		$messaggio .= "Content-Transfer-Encoding: 7bit\n\n";
    		
    		$messaggio .= "<html>
    		<body>
    			";
    		
    		$messaggio .= $testomessaggio;
    		$messaggio .= "</body>
    		</html>\n\n";
    		
    		if(is_file($pathallegato."/".$allegato))
    		{ 
    		
    			// Aggiungo l'allegato al messaggio	
    			$messaggio .= "--$boundary\n";	
    			
    			$messaggio .= "Content-Type: ".$typeallegato.";"; 
    			$messaggio .= " name=\"".$allegato."\"\n"; 
    			$messaggio .= "Content-Transfer-Encoding: base64\n";
    			$messaggio .= "Content-Disposition: attachment;";
    			$messaggio .= " filename=\"".$allegato."\"\n\n"; 
    			
    					// leggiamo il file corrispondente all'immagine dal nostro server
    			
    			// Apro e leggo il file allegato
    			$fileallegato = $pathallegato."/".$allegato;
    			
    			$file = fopen($fileallegato,'rb');
    			$data = fread($file, filesize($fileallegato));
    			fclose($file);
    			// Adatto il file al formato MIME base64 usando base64_encode
    			$data = chunk_split(base64_encode($data));
    			
    			$messaggio .= $data . "\n";
    		}
    		
    		// chiusura del messaggio con la stringa boundary
    		$messaggio .= "--$boundary--";
    				
    			
    		if( @mail($to, $oggetto, $messaggio, $header) )
    		{
    			return true;
    			
    		} else {
    			return false;
    		}
    		
    	}
    }
    posso fare la stessa cosa e crearmi una funzione con PHPMAILER?
    non so come fare... qualcuno mi da una dritta?

  2. #2
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, basta molto semplicemente sostituire tutto il codice per la funziona mail() con quell'esempio da te descritto sopra.

  3. #3
    Originariamente inviato da jcsnake
    Ciao, basta molto semplicemente sostituire tutto il codice per la funziona mail() con quell'esempio da te descritto sopra.

    i miei dubbi su quel che mi dici sono 2:

    1. l'include va fatto ad inizio pagina immagino, non all'interno della funzione ne della classe.

    2. se infilo quel codice in una funzione all'interno della mia classe.... mi vede la classe PhpMailer? la devo istanziare fuori dalla classe insieme all'include...? o devo istanziarla dentro la funzione?

  4. #4
    Originariamente inviato da Pandax
    1. l'include va fatto ad inizio pagina immagino, non all'interno della funzione ne della classe.
    l'include del phpmailer dovresti poterlo fare anche dentro il metodo della classe, però nello specifico lo farei fuori dalla classe ad inizio pagina

    2. se infilo quel codice in una funzione all'interno della mia classe.... mi vede la classe PhpMailer? la devo istanziare fuori dalla classe insieme all'include...? o devo istanziarla dentro la funzione?
    per vedere la classe phpmailer devi aver incluso la libreria prima... probabile che l'include dentro al metodo dia poi visibilità a "tutta la pagina" del file incluso, e quindi non resti relegato all'area di visualizzazione del metodo. Però nello specifico (torniamo al punto 1) l'idea è di preparare l'ambiente in cui girano le tue classi (la tua app) in maniera che le classi abbiano accesso alle librerie che gli servono, quindi includere il file in testa di pagina (o da dove parte l'app/frammento di codice in cui "gireranno" le classi) in maniera da non porsi il problema

    puoi anche pensare di adottare un autoloader
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    ho fatto un test..

    ho incluso la classe phpmailer all'inizio della pagina, successivamente ho incluso la mia classe...

    codice:
    /* classi caricate */ include("class/phpmailer/class.phpmailer.php"); 
    /* le mie funzioni */ include_once('class/panda.class.php');
    ma non la vede nella funzione


    singolo Fatal error: Class 'PHPmailer' not found in /web/htdocs/www.sito.it/home/class/panda.class.php on line 293
    codice:
    <?php 
    class panda extends mysqli 
    {
    public function my_invioemail_phpmailer($content)
    	{
    		$messaggio = new PHPmailer();
    		$messaggio->IsSMTP();
    		$messaggio->IsHTML(true);
    		$messaggio->Host='smtp.sito.it';
    		$messaggio->From='test@sito.it';
    		$messaggio->AddAddress('sito@virgilio.it');
    		$messaggio->AddReplyTo('test@sito.it'); 
    		$messaggio->Subject='Email di test';
    		$messaggio->Body = $content;
    		
    		//percorso all'allegato
    		//$messaggio->AddAttachment('pdf/file.pdf');
    		
    		if(!$messaggio->Send()){
    		  return $error = $messaggio->ErrorInfo; 
    		}else{ 
    		  return $error = 'no';
    		}
    		$messaggio->SmtpClose();
    		unset($messaggio); 
    		
    	}
    }

  6. #6
    ho provato così... e pare funzionare

    codice:
    /* classi caricate */
    include("class/phpmailer/class.phpmailer.php");
    
    /* le mie funzioni */
    include_once('class/panda.class.php');
    
    $mysqli = new panda(HOST, USERNAME, PASSWORD, DATABASE);
    
    $phpmailer = new PHPmailer();
    codice:
    class panda extends mysqli 
    {
    	var $__istanzaclasse_phpmailer; 
    public function my_invioemail_phpmailer($istanza, $content)
    	{
    		$this->__istanzaclasse_phpmailer = $istanza;
    		//$messaggio = new PHPmailer();
    		
    		$this->__istanzaclasse_phpmailer->IsSMTP();
    		$this->__istanzaclasse_phpmailer->IsHTML(true);
    		$this->__istanzaclasse_phpmailer->Host='smtp.sito.it';
    		$this->__istanzaclasse_phpmailer->From='test@sito.it';
    		$this->__istanzaclasse_phpmailer->AddAddress('sito@virgilio.it');
    		$this->__istanzaclasse_phpmailer->AddReplyTo('test@sito.it'); 
    		$this->__istanzaclasse_phpmailer->Subject='Email di test';
    		$this->__istanzaclasse_phpmailer->Body = $content;
    		
    		//percorso all'allegato
    		//$messaggio->AddAttachment('pdf/file.pdf');
    		
    		if(!$this->__istanzaclasse_phpmailer->Send()){
    		  return $error = $this->__istanzaclasse_phpmailer->ErrorInfo; 
    		}else{ 
    		  return $error = 'no';
    		}
    		$this->__istanzaclasse_phpmailer->SmtpClose();
    		unset($this->__istanzaclasse_phpmailer); 
    		
    	}
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.