ClassMailer enviar mails con funcion mail, sin mucha complejidad

Iniciado por alexander1712, Octubre 09, 2013, 09:30:41 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Hola, siguiendo mi proyecto de tener una serie de modulos que incluya y pueda usar en cualquier proyecto para no tener que estar escribiendo código una y otra vez, y en base a que hace poco un usuario del foro se le complicaba enviar emails, realizé esta siemple pero efectiva clase que envía emails creando las cabeceras y todas esas cosas que no deberíamos tener por que escribirlas.

consta de dos archivos y requiere mi Property Trait (pueden verlo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta)

El primer archivo es el archivo "ClassMailerInterface.php" (que debe estar junto al otro)

Código: php
<?php

interface IClassMailer
{

// devuelve verdadero si $email es válido, o falso si $email no es válido
public function validar_email($email);

// enviar email preconfigurado
public function send();
// retorna verdadero o falso dependiendo de si se envió el email

// setters and getters
public function get_receptor();
public function set_receptor($value);

public function get_receptor_alias();
public function set_receptor_alias($value);

public function get_emisor();
public function set_emisor($value);

public function get_emisor_alias();
public function set_emisor_alias($value);

public function get_asunto();
public function set_asunto($value);

public function get_charset();
public function set_charset($value);

public function get_content_type();
public function set_content_type($value);

public function get_mime_version();
public function set_mime_version($value);

public function get_mensaje();
public function set_mensaje($value);

public function get_error();
public function set_error($value);

public function get_error_message();
public function set_error_message($value);

}

include('ClassMailer.php');


ese archivo de ahí arriba deben incluir para poder usar el sistema de emails, pero recuerden que primero hay que incluir el archivo que tenga el property que puse más arriba.

El segundo archivo es el ClassMailer.php
Código: php

<?php

Class ClassMailer implements IClassMailer
{
// uses
use Property;

// atributes
private $receptor = null;
private $receptor_alias = null;
private $emisor = null;
private $emisor_alias = null;
private $asunto = null;
private $charset = 'UTF-8';
private $content_type = 'text/html';
protected $mime_version = '1.0';
private $mensaje = null;

protected $error = false;
protected $error_message = null;

public function __construct($emisor, $receptor, $asunto, $mensaje, $emisor_alias = null, $receptor_alias = null)
{
try
{
if(!$this->validar_email($emisor)) Throw new exception('Invalid mail $emisor');
if(!$this->validar_email($receptor)) Throw new exception('Invalid mail $receptor');
$asunto = trim($asunto);
if(empty($asunto) && strlen($asunto)<3) throw new exception('Invalid subject $asunto');
$mensaje = trim(utf8_encode($mensaje));
if(empty($mensaje) && strlen($mensaje)<10) throw new exception('Invalid menssage $mensaje');
$this->receptor = $receptor;
$this->emisor = $emisor;
$this->asunto = $asunto;
$this->mensaje = $mensaje;
if(!empty($emisor_alias))
{
$emisor_alias = trim($emisor_alias);
if(strlen($emisor_alias)>3)
$this->emisor_alias = $emisor_alias;
else
throw new exception('Emisor Alias is invalid');
}
if(!empty($receptor_alias))
{
$emisor_alias = trim($receptor_alias);
if(strlen($receptor_alias)>3)
$this->receptor_alias = $receptor_alias;
else
throw new exception('Receptor Alias is invalid');
}
} catch (Exception $e) { $this->error = true; $this->error_message = $e->getMessage(); }
}

public function validar_email($email)
{
return preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i',$email);
}

public function send()
{
if(!$this->error)
{
mail($this->receptor, $this->asunto, $this->mensaje, $this->fabricar_cabeceras());
} else { return false; }
}

private function fabricar_cabeceras()
{
$cabeceras = null;
$cabeceras  = 'MIME-Version: ' . $this->mime_version . "\r\n";
$cabeceras .= 'Content-type: ' . $this->content_type . '; charset=' . $this->charset . "\r\n";
if(!empty($this->receptor_alias))
{
$cabeceras .= 'To: ' . $this->receptor_alias . ' <' . $this->receptor . '>' . "\r\n";
} else {
$cabeceras .= 'To: ' . $this->receptor . "\r\n";
}
if(!empty($this->emisor_alias))
{
$cabeceras .= 'From: ' . $this->emisor_alias . ' <' . $this->emisor . '>' . "\r\n";
} else {
$cabeceras .= 'From: ' . $this->emisor . "\r\n";
}
return $cabeceras;
}

public function get_receptor() { return $this->receptor; }
public function set_receptor($value)
{
try
{
$receptor = $value;
if(!$this->validar_email($receptor)) Throw new exception('Invalid mail $receptor');
$this->receptor = $receptor;
} catch (Exception $e) { $this->error = true; $this->error_message = $e->getMessage(); }
}

public function get_receptor_alias() { return $this->receptor_alias;}
public function set_receptor_alias($value)
{
try
{
$receptor_alias = $value;
$receptor_alias = trim($receptor_alias);
if(!strlen($receptor_alias)>3) throw new exception('Receptor Alias is invalid');
$this->receptor_alias = $receptor_alias;
} catch (Exception $e) { $this->error = true; $this->error_message = $e->getMessage(); }
}

public function get_emisor() { return $this->emisor; }
public function set_emisor($value)
{
try
{
$emisor = $value;
if(!$this->validar_email($emisor)) Throw new exception('Invalid mail $emisor');
$this->emisor = $emisor;
} catch (Exception $e) { $this->error = true; $this->error_message = $e->getMessage(); }
}

public function get_emisor_alias() { return $this->emisor_alias; }
public function set_emisor_alias($value)
{
try
{
$emisor_alias = $value;
$emisor_alias = trim($emisor_alias);
if(!strlen($emisor_alias)>3) throw new exception('Emisor Alias is invalid');
$this->emisor_alias = $emisor_alias;
} catch (Exception $e) { $this->error = true; $this->error_message = $e->getMessage(); }
}

public function get_asunto() { return $this->asunto; }
public function set_asunto($value)
{
try
{
$asunto = value;
$asunto = trim($asunto);
if(empty($asunto) && strlen($asunto)<3) throw new exception('Invalid subject $asunto');
} catch (Exception $e) { $this->error = true; $this->error_message = $e->getMessage(); }
}

public function get_charset() { return $this->charset; }
public function set_charset($value)
{
$this->charset = $value;
}

public function get_content_type() { return $this->content_type; }
public function set_content_type($value)
{
$this->content_type = $value;
}

public function get_mime_version() { return $this->mime_version; }
public function set_mime_version($value) { ; } // no podemos cambiar el mime_version

public function get_mensaje() { return $this->mensaje; }
public function set_mensaje($value)
{
try
{
$mensaje = $value;
$mensaje = trim(utf8_encode($mensaje));
if(empty($mensaje) && strlen($mensaje)<10) throw new exception('Invalid menssage $mensaje');
$this->mensaje = $mensaje;
} catch (Exception $e) { $this->error = true; $this->error_message = $e->getMessage(); }
}

public function get_error() { return $this->error; }
public function set_error($value) { ; } // no permitimos setear un error

public function get_error_message() { return $this->error_message; }
public function set_error_message($value) { ; } // no permitimos setear un mensaje de error

}


bueno, en una respuesta en este mismo post mostraré un ejemplo de su uso :) porque tanto código en mi post no entra y queda cortado.

saludos para todos!

Ejemplo de uso:

Código: php


// INCLUIMOS LOS ARCHIVOS NECESARIOS
include('Property.php');
include('ClassMailerInterface.php');

$emisor = '[email protected]'; // mi mail
$emisor_alias = 'Roberto Gomez';

$receptor = '[email protected]'; // el mail de la persona que recibirá el mail xD
$receptor_alias = 'José perez';

$asunto = 'Hola josé';
$mensaje = 'Hola josé, como andas? todo bien? saludos!';

// creamos un nuevo mail
$mail = new ClassMailer($emisor, $receptor, $asunto, $mensaje, $emisor_alias, $receptor_alias);
// si no hay error
if(!$mail->error)
{
    $mail->send(); // enviamos el mail
}
else // si hay error
{
    echo $mail->error_message; // mostramos el error
}


La clase tiene control de mails, control de asuntos, convierte a UTF8 los mensajes y crea las cabeceras, en otras palabras solo hay que poner eso, y admite HTML.

hacen eso y ya está envia el mail a No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, los Alias no son necesarios se pueden quitar y no va a haber problema.

saludos!