dijous, 12 d’agost del 2010

Com enviar correu amb PHPMailer / 28 gener 2010

Com enviar correu amb PHPMailer

Aquest és un problema típic: com enviar un correu electrònic des d'una aplicació web.

Amb PHP  la resposta típica és: fent servir el PHPMailer.

Vet aquí un exemple: un mini formulari que permet introduir un "Subject" i un "Cos del missatge" i envia aquest missatge a una llista d'adreces de correu. Àquest codi el posem en un fitxer font "enviar.php" que deixem en una carpeta del nostre servidor, en la mateixa carpeta deixarem les classes que composen el PHPMailer, class.phpmailer.php i class.smtp.php. Et voila, ja funciona. Senzill, no?

Bé, ens caldrà també configurar correctament el servidor SMTP. El port estàndar de SMTP és el 25, ara bé, si és SMTP sobre SSL, aleshores és el 465. Vet aquí el codi:

<?php
require("class.phpmailer.php");
header("Cache-Control: no-cache, must-revalidate");
    $mail_address[0] = "compte@eservidor0.cat";
    $mail_address[1] = "
compte@eservidor1.cat";
    $mail_address[2] = "
compte@eservidor2.cat";
    $mail_address[3] = "
compte@eservidor3.cat";    
    $mail_address[4] = "
compte@eservidor4.cat";
    $mail_address[5] = "
compte@eservidor5.cat";
    $mail_address[6] = "
compte@eservidor6.cat";
    $mail_address[7] = "
compte@eservidor7.cat";
    $mail_address[8] = "
compte@eservidor8.cat";
    $mail_address[9] = "
compte@eservidor9.cat"; 

    if (isset($_POST["subject"]) && isset($_POST["body"]) && isset($_POST["boto"])) {
        $subject = $_POST["subject"];
        $body = $_POST["body"];
        $boto = $_POST["boto"];
    } else {
        $subject = "";
        $body = "";
        $boto = "";
    }    
?>
<html>
<head>
<title>Enviament de missatges</title>
</head>
<body bgcolor="#eeeeee">
<center>
<font face="Arial">
<h1>Enviament de missatges</h1>
<br />
<table border="0">
<tr>
<?php
echo "<form method=\"POST\" action=\"http://localhost/php/enviar.php\" >";
echo "<td>Subject:</td> <td><input name=\"subject\" value=\"$subject\" size=\"50\"/></td></tr>";
echo "<tr><td colspan=\"2\" align=\"left\">Text del missatge</td></tr><tr><td colspan=\"2\" align=\"center\"><textarea name=\"body\" cols=\"80\" rows=\"18\" >";
echo $body;
echo "</textarea></td></tr>";
echo "<tr><td colspan=\"2\" align=\"left\"><input type=\"submit\" name=\"boto\" value=\"Enviar\"></td>";
echo "</form>";
?>
</tr>
</table>
</font>
</center>
<?php
if ($boto == "Enviar") {
    $mail = new PHPMailer();
    $mail->IsSMTP();          
    $mail->SMTPDebug = 1;      // : 1 = errors i missatges, 2 = només missatges   
    $mail->SMTPAuth = true;   
    //$mail->SMTPSecure = "ssl"; // si cal SSL
    $mail->Host = "smtp.elmeuservidor.com";            
    $mail->Port = 25;        // o 465, si SSL     
    $mail->Username = "usuari";   
    $mail->Password = "password"; 
   
   
    foreach ($mail_address as $the_mail_address) {
        echo "Enviant a $the_mail_address<br />";
        $mail->From = "elmeucompte@servidor.cat";
        $mail->FromName = "El meu nom";
        $mail->Subject = $subject;
        $mail->AddAddress($the_mail_address,$the_mail_address);
        $mail->Body = $body;
        // afegir tractament pel cas que hi hagin adjunts
        if(!$mail->Send()) {
            echo "Error d'enviament: " . $mail->ErrorInfo."<br />";
        } else {
            echo "Missatge enviat<br />";
        }
        $mail->ClearAddresses ();
    }
   
    $mail->SmtpClose();
}
?>
</body>
</html>


GMail fa servir TLS, en comptes de SSL, per a prevenir l'spam. Per a GMail, la configuració que funciona és:

    $mail->SMTPAuth = true;
    $mail->SMTPSecure = "tls";
    $mail->Host = "smtp.gmail.com";
    $mail->Port = 587;


Les versions antigues de PHPMailer no suportaven TLS, així que val la pena descarregar-se la darrera versió, tenint en compte que l'opció d'enviar per GMail pren un caràcter "universal".

PHPMailer ofereix moltes possibilitats més: adjunts, enviament com HTML... O sigui que és una bona inversió llegir-ne el manual i fer proves. Es tracta d'un clàssic imprescindible al PHP.

Cap comentari:

Publica un comentari a l'entrada