sello La función que dejo hoy es un imprescindible en los proyectos de hoy en día. Se trata de una función para enviar mail a partir de las variables introducidas. La función directamente verifica si los mail introducidos como origen y destino están bien escritos y a demás verifica si es posible que existan (verifica si el hosting del mail si existe).

Las variables de la función son por orden:
Asunto: El asunto del mail.
Contenido: El contenido del mail.
To_mail: Mail de destinatario.
From_mail: Mail del usuario que lo envía.
To_name: Nombre del usuario que recibirá el mail.
From_name: Nombre del usuario que envía el mail.
Type: Tipo de contenido del mail. Hay 3 opciones para esta variable. 'html' como predeterminado para contenido HTML, 'both' como contenido comodín o 'text' como texto sin HTML (solo texto plano).
Reply: Indica 'true' o 'false' para determinar si se quiere mostrar el mail de origen al destinatario. Si no se quiere mostrar se mostrará "noreply".

PHP:
  1. function mailTo($asunto, $contenido, $to_mail, $from_mail=, $to_name=, $from_name=, $type='html', $reply = false) {
  2.     # test mail origen
  3.     if(preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/', $to_mail, $parse_mail_origen)){
  4.         if(function_exists('checkdnsrr')){
  5.             if( !checkdnsrr($parse_mail_origen[1].'.','MX') ||
  6.                 !checkdnsrr($parse_mail_origen[1].'.','A'))
  7.                     $error.='el correo de origen no existe'."<br>\n";
  8.         }
  9.     } else {
  10.         $error.='el correo de origen no es correcto'."<br>\n";
  11.     }
  12.     # test mail destino
  13.     if(preg_match('/^\w[-.\w]*@(\w[-._\w]*\.[a-zA-Z]{2,}.*)$/', $to_mail, $parse_mail)){
  14.         if(function_exists('checkdnsrr')){
  15.             if( !checkdnsrr($parse_mail[1].'.','MX') ||
  16.                 !checkdnsrr($parse_mail[1].'.','A'))
  17.                     $error.='el correo de destino no existe'."<br>\n";
  18.         }
  19.      } else {
  20.         $error.='el correo de destino no es correcto'."<br>\n";
  21.      }
  22.     if($error) return $error;
  23.     # composicion cabeceras
  24.     if($from_mail==){
  25.         $from = $_SERVER['HTTP_HOST'] ? 'noreply@'.substr($_SERVER['HTTP_HOST'], 4) : 'noreply@'.substr($_SERVER['SERVER_NAME'], 4);
  26.     } else {
  27.         if($from_name!=){
  28.             $from   = $reply ? $from_name.'<'.$from_mail.'>'   : $from_name.'<'.'noreply@'.$parse_mail[1].'>';
  29.         } else {
  30.             $from   = $reply ? $from_mail            : 'noreply@'.$parse_mail[1];
  31.         }
  32.     }
  33.     $to    = $to_name== ? $to_mail            : $to_name.'<'.$to_mail.'>';
  34.     $return_path = $reply      ? '<'.$from_mail.'>'   : '<'.'noreply@'.$parse_mail[1].'>';
  35.     $subject     = $yourSubject.': '.stripslashes($sub);
  36.     $date       = date("d-M-y H:i");
  37.     $boundary    = md5($from_mail.$to_mail.$asunto.$contenido.$type.$reply); //id unica para este contenido de mail
  38.    
  39.     $headers     = "From: $from\nReply-To: $from\n";
  40.     $headers    .= "X-Mailer:PHP/".phpversion()."\n";
  41.     $headers    .= "Mime-Version: 1.0\n";
  42.     $headers    .= "Content-Type: multipart/alternative; boundary=\"{$boundary}\"\n";
  43.     $headers    .= "Return-Path: $return_path\n";
  44.  
  45.     # composicion de mail
  46.     $message     = "\n–{$boundary}\n";
  47.     switch ($type){
  48.         case 'html' :
  49.             $message    .= "Content-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n$contenido";
  50.             $message    .= "\n–{$boundary}–\n\n";
  51.             break;
  52.         case 'text' :
  53.             $message    .= "Content-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n$contenido";
  54.             $message    .= "\n–{$boundary}–\n\n";
  55.             $message     = strip_tags(stripslashes($message));
  56.             break;
  57.         case 'both' :
  58.             $message    .= "Content-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\n\n$contenido";
  59.             $message    .= "\n–{$boundary}–\n\n";
  60.             break;
  61.     }
  62.     # envio
  63.     return mail($to, $asunto, $message, $headers);
  64. }

Al usar la función puede dar como resultado un binario indicando si se ha enviado o no el mail o un string de texto indicando si hay algún error con las direcciones.

Ejemplo basico:

PHP:
  1. <?php
  2. if( mailto('Asunto del email', '<b>contenido del email a enviar!</b>', 'email_de_destinatario@gmail.com') == true ){
  3.     echo 'Mail enviado';
  4. } else {
  5.     echo 'Error al enviar el mail';
  6. }
  7. ?>

Ejemplo completo mail de origen oculto:

PHP:
  1. <?php
  2.  
  3. $mail = mailto('Asunto del email', '<b>contenido del email a enviar!</b>', 'email_de_destinatario@gmail.com', 'email_de_origen@yahoo.es', 'text', false);
  4. if( $mail == true ){
  5.     echo 'Mail enviado';
  6. } else {
  7.     echo 'Error al enviar el mail';
  8. }
  9. ?>