Como enviar un E-mail con PHP

Hoy traigo una de las funciones más usadas en PHP, la función mail. Esta función es una de las más utilizadas para enviar e-mails de confirmación y de contacto, es importante saber que no es buena idea utilizarla para mandar grandes cantidades de e-mails por día, por que por lo general las compañías de hosting tienen limites respecto al envío masivo de e-mails y seguro nos van a advertir en primera instancia y luego nos cancelaran la cuenta. Esto último viene acompañado del echo de que la mayoría de las empresas que venden hosting también venden planes para mandar e-mails de forma masiva. Pero ahora vamos a ver el código de una función que yo uso para mandar e-mails diariamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
function envioEmail($modo,$asunto,$contenido,$extra){
 
 $envia=array(); 
 $envia[0]="Mi Sitio"; //El nombre del sitio sin con espacios
 $envia[1]="misitio"; //El nombre del sitio sin espacios 
 
 //El email se envía con el remitente admin@ el nombre del sitio .com puede cambiar esto debajo
 
 $headers='content-type:text/html '. PHP_EOL .'From: "'.$envia[0].'" <admin@'.$envia[1].'.com> '. PHP_EOL .'';
 
 //El modo 1 extrae el email del usuario de la base de datos y recibe el idusuario a traves del parametro extra
 if($modo==1) {
$idusu=$extra;
 
 $conn=mysql_connect("localhost","mi_usuario","mi_contrasenia");
 mysql_select_db("mi_BD",$conn);
 
 $sql="select email from usuarios where idusuario=".$idusu."";
 $rs=mysql_query($sql,$conn);
 $row=mysql_fetch_array($rs);
 $email=$row['email'];
 
 /*mail ( $to , $subject , $message [, $additional_headers [, $additional_parameters ]] )
 El message o mensaje puede contener HTML ya que en los headers especificamos
 el tipo de contenido content-type:text/html*/
 
 mail($email,$asunto,
 "<html>
 <head>
 <title></title>
 <style type='text/css'>
 .textoGris_M{font: 14px Arial, Helvetica, sans-serif;color:#333;}
 </style>
 </head>
 
 <body>
 <br>".$contenido."<br>
 <br><br> <span class='textoGris_M'>Lo saluda atentamente la administraci&oacute;n de ".$envia[1].".com </span>
 </body>
 </html>",$headers); 
 
 //El modo 2 recibe el email del usuario por el parametro extra
 }else if($modo==2) {
 
 $email=$extra; 
 mail($email,$asunto,
 "<html>
 <head>
 <title></title>
 <style type='text/css'>
 .textoGris_M{font: 15px Arial, Helvetica, sans-serif;font-weight:bold;color:#111;}
 </style>
 </head>
 <body><img src='http://www.".$envia[1].".com/imagenes/banners/principal.png' alt='".$nomSitio.".com'>
 <br>".$contenido."<br>
 <br><br> <span class='textoGris_M'>Lo saluda atentamente la administraci&oacute;n de ".$envia[1].".com </span>
 </body>
 </html>",$headers); 
 } 
 mysql_close($conn);
}
function envioEmail($modo,$asunto,$contenido,$extra){

 $envia=array(); 
 $envia[0]="Mi Sitio"; //El nombre del sitio sin con espacios
 $envia[1]="misitio"; //El nombre del sitio sin espacios 

 //El email se envía con el remitente admin@ el nombre del sitio .com puede cambiar esto debajo

 $headers='content-type:text/html '. PHP_EOL .'From: "'.$envia[0].'" <admin@'.$envia[1].'.com> '. PHP_EOL .'';

 //El modo 1 extrae el email del usuario de la base de datos y recibe el idusuario a traves del parametro extra
 if($modo==1) {
$idusu=$extra;

 $conn=mysql_connect("localhost","mi_usuario","mi_contrasenia");
 mysql_select_db("mi_BD",$conn);

 $sql="select email from usuarios where idusuario=".$idusu."";
 $rs=mysql_query($sql,$conn);
 $row=mysql_fetch_array($rs);
 $email=$row['email'];

 /*mail ( $to , $subject , $message [, $additional_headers [, $additional_parameters ]] )
 El message o mensaje puede contener HTML ya que en los headers especificamos
 el tipo de contenido content-type:text/html*/

 mail($email,$asunto,
 "<html>
 <head>
 <title></title>
 <style type='text/css'>
 .textoGris_M{font: 14px Arial, Helvetica, sans-serif;color:#333;}
 </style>
 </head>

 <body>
 <br>".$contenido."<br>
 <br><br> <span class='textoGris_M'>Lo saluda atentamente la administraci&oacute;n de ".$envia[1].".com </span>
 </body>
 </html>",$headers); 

 //El modo 2 recibe el email del usuario por el parametro extra
 }else if($modo==2) {

 $email=$extra; 
 mail($email,$asunto,
 "<html>
 <head>
 <title></title>
 <style type='text/css'>
 .textoGris_M{font: 15px Arial, Helvetica, sans-serif;font-weight:bold;color:#111;}
 </style>
 </head>
 <body><img src='http://www.".$envia[1].".com/imagenes/banners/principal.png' alt='".$nomSitio.".com'>
 <br>".$contenido."<br>
 <br><br> <span class='textoGris_M'>Lo saluda atentamente la administraci&oacute;n de ".$envia[1].".com </span>
 </body>
 </html>",$headers); 
 } 
 mysql_close($conn);
}

Bueno luego de un buen rato buscando algun plugin que mostrase el código lo más entero posible y que funcionase correctamente, encontré éste que funciona pero queda un poco chico, si quieres ver el código un poco más entero puedes hacerle click en la lupa, lamentablemente el código perdió la indentación al pasarlo a WordPress, una lastima. Resumiendo el código, esta función que vengo utilizando hace un tiempo (un poco editada para la web) permite enviar e-mails de a uno y en formato HTML, para usarla no hace falta más que llamarla y pasarle los parámetros correspondientes, el modo nos permite elegir si queremos sacar de la BD el e-mail de envió (modo=1) o si queremos enviarlo a un e-mail especifico (modo=2), el asunto es el asunto del e-mail (ej: Registro en …..), el contenido es el contenido del e-mail, claro que en mi función solo representa una parte, ya que el resto del HTML ya esta en la función, y por último el parámetro extra sirve para pasarle a la función dependiendo del modo el id del usuario o el e-mail de destino.

En definitiva es una función bastante sencilla y que permite modificarla para múltiples propósitos, una de las cosas que se pueden ver en la función es la inclusión de CSS en  el HTML del contenido del e-mail y también que en el modo dos agrega una imagen, en este caso un banner, pero lo que esto nos permite es lograr e-mail altamente customizados. Por último un error que puede molestarnos a veces es la codificación de los caracteres, que el el caso de la ñ o los tildes puede hacer que se vean mal, la solución que yo he encontrado es pasar el contenido o el asunto a través de la función PHP html_entity_decode($variable) que por lo general me ha dado resultado, a y no se sorprendan si los correos que envían va a parar a  la carpeta de Spam, siempre es conveniente avisar al usuario.

Author: gp2

Desarrollador Web, Programador PHP y MySQL, conocedor de HTML5, CSS3 y Javascript. Del culto JQuery, gran coleccionador de funciones ajenas y especialista en hacer código redundante. Últimamente programador Java.

Un comentario en “Como enviar un E-mail con PHP

Deja un comentario