Mostrando las entradas con la etiqueta email. Mostrar todas las entradas
Mostrando las entradas con la etiqueta email. Mostrar todas las entradas

2010/03/24

Gmail para leer Hotmail y Yahoo Mail

Gmail permite descargar el correo de otras cuentas (actualmente hasta un máximo de 5 cuentas), que tengan el servicio POP3 habilitado.

Por ejemplo, si alguien tienen más de una cuenta Gmail, puede configurar una de ellas para que todos los demás correos lleguen allí.

Lo mismo se puede hacer para una cuenta Hotmail.

Para que los correos de Yahoo Mail también puedan llegar, hay que habilitarle el servicio POP3.

Gmail leyendo Gmail

Normalmente, cada cuenta Gmail tiene habilitado el servicio POP3.

Entonces, elija primero la cuenta desde donde desea ver todas las otras e ingrese. Allí puede entrar a Settings (Opciones), Accounts and Import (Cuentas e Importar), Check mail using POP3 (Revisar correo usando POP3) y pulsar el botón Add POP3 email account (Agregar cuenta email POP3) para agregar los datos de cada una de las otras cuentas.

Para verificar que tiene la propiedad de la cuenta que quiere asociar, Gmail le enviará un mensaje a dicha cuenta un mensaje con un código de verificación, un enlace e instrucciones para hacer la validación. Es conveniente usar otro navegador para entrar a la otra cuenta Gmail, abrir el mensaje y copiar el código que se ingresará en la ventana que dejamos abierta en el primer navegador. Por ejemplo, entrar a una cuenta A con Firefox y a la cuenta B con Chrome o IE.

Entre las opciones de una cuenta asociada, si gusta puede marcar la automáticamente aplica una etiqueta a los mensajes de esta cuenta para que pueda  distinguirlos fácilmente de los demás.

Gmail leyendo Hotmail
Puede asociar de modo similar una cuenta Hotmail.

Gmail leyendo Yahoo Mail
Si tienen una cuenta en Latinoamérica, tal vez habrá notado que desde hace algunos años el servicio POP3 está deshabilitado, a menos que adquiera Yahoo Mail Plus, que es un servicio pagado. Sin embargo, por alguna razón, las cuentas de Asia sí tienen el servicio POP3 habilitado en las cuentas gratuitas. Afortunadamente, es posible hacer el cambio.

Ingresando a su cuenta Yahoo Mail, puede entrar los datos de su cuenta. Puede ser que le tome un tiempo encontrar el enlace adecuado, pero es uno de los que aparece en la parte de arriba. Tal vez como un desplegable bajo su nombre de usuario (Edit My Account, Editar mi cuenta), o como un enlace simple (My Account, Mi cuenta).

Allí, por seguridad, le pedirá otra vez la contraseña, antes de conducirle al Account Info (Datos de la cuenta).
En la sección Accounts Settings (Opciones de la cuenta), entre a Set Language... (Establecer lenguaje...). Allí, podrá cambiar el Preferred Content (Contenido preferido) a Yahoo Asia.

Después de grabar los cambios, puede volver a mail.yahoo.com y entrar en Options (Opciones), POP & Forwarding (POP y Reenvíos), Set up or Edit... (Establecer o editar...), y marcar Web & POP Access (Acceso Web y POP). Además hay una opción que permite elegir entre recibir absolutamente todos los mensajes, o sólo aquellos que Yahoo no considere spam. Gmail tiene un filtro antismpam, así que parece buena idea pasarle todos los mensajes.

Luego de guardar la configuración en Yahoo Mail, se puede ir a Gmail y asociarla como en el caso anterior.

Referencias:

2010/01/23

Resolviendo el Mercury de XAMPP

XAMPP es un conveniente paquete que contiene Apache, PHP, MySQL y otros programas para facilitar la instalación y uso de un entorno de desarrollo PHP. Lo vengo usando satisfactoriamente desde hace varios meses. Sin embargo, me enfrasqué en un problema cuando necesité usar el Mercury que trae incluido para enviar emails. Aparentemente no funcionaba. Buscando y navegando mucho por internet, encontré estas páginas que me ayudaron a resolver el problema:
El primer enlace da una secuencia detallada de pasos. Muchos comentan que les funcionó muy bien, pero yo tuve un problema. Veía que las ventanas de los varios monitores que muestra Mercury decían offline, y un comando "telnet localhost 25" ejecutado en la consola me devolvía "Could not open connection to the host, on port 25".
Entonces, encontré el segundo enlace, donde un forista comentaba que los mensajes de offline se debían a un bug del módulo MercuryX y se debía deshabilitar. Así lo hice y, al reiniciar, el administrador de Mercury funcionó :-D, se enviaron los mensajes de prueba que tenía atascados e incluso pude hacer una prueba usando el telnet.

Resúmen de pasos

La idea del relay es usar un servidor SMTP externo, como el de GMail, para que Mercury envíe el correo a través de él. En teoría sería posible también usar un SMTP en localhost, pero como algunos proveedores no permiten que sus usuarios envíen correo de ese modo, el uso del relay parece más general.
En el archivo xampp/php/php.ini, ubicar las líneas correspondientes a [mail function] y editarlas para que quede algo como:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = postmaster@localhost

A continuación, configurar Mercury. En el administrador de Mercury (que se abre al pulsar su botón Admin en el panel de control de XAMPP), entrar a las opción de menú indicadas por cada título y realizar los cambios que se indican:

Configuration/Protocol modules...

Note que se han desahabilitado MercuryE y MercuryX, y se ha habilitado Mercury C.


Luego de desactivar/activar módulos es necesario reiniciar Mercury (salir del administrador y volver a entrar).


Configuration/Mercury core module...

 

Configuration/MercuryS SMTP server

El nombre en "Announce..." puede ser cualquiera. El IP es el del localhost (la página dice que usar el IP de la intranet, 192.168.x.x, no le funcionó).

 
Aquí se modifica la restricción para que se permita conexiones en el rango 127.0.0.1-127.0.0.1
Pero el punto más importante es desmarcar la casilla "Do not permit SMTP relaying of non-local-email"

Configuration/MercuryC SMTP client

Aquí indico que se use el SMTP server de gmail, según las recomendaciones de su página y usando el puerto 587 para SSL con STARTTLS. Si es su caso, verifique que el nombre de usuario incluya @gmail.com

Configuration/Manage local users

Se agrega el usuario postmaster, con privilegio de administrador.

2009/08/28

Enviando emails con PHP



El envío de emails con PHP puede ser relativamente sencillo.
Pero, dependiendo de cómo sea el mensaje, las cosas pueden requerir algo más de trabajo.


Explorando en la red encontramos ejemplos que usan la función nativa mail(). Esto funciona bien para el caso relativamente sencillo de enviar ASCII (ó ISO-8859-1).

Si uno quiere enviar HTML o Unicode (UTF-8), o ASCII junto con HTML (como suelen hacer los servicios email), entonces las cosas se complican un poco, y los tutoriales son más escasos. Quizás optan por usar alguna biblioteca auxiliar, como PEARL. Es posible seguir haciéndolo con mail(), pero no encontrará mucho al respecto.

Las complicaciones aumentan un poco más si se quiere adjuntar un documento al mensaje. Sigue siendo posible seguir haciéndolo con mail(), pero 'tampoco encontrará mucha información sobre cómo hacerlo.

Para hacerlo, es importante fijarse en los headers que se envían. Estos contienen la descripción del contenido del mensaje. Y hay que colocar también ciertas marcas de separación en la estructura del mensaje.

Un mensaje ASCII + HTML tiene un mensaje con una estructura similar a:

(declaración de separador alterno)

--separador alterno
(descripción del contenido de texto)
(contenido de texto)

--separador alterno
(descripción de contenido html)
(contenido html)
--separador alterno--

Un mensaje ASCII + HTML + adjunto tiene un mensaje con una estructura similar a:

(declaracion de separador mixto)

--separador mixto

(declaración de separador alterno)

--separador alterno
(descripción del contenido de texto)
(contenido de texto)

--separador alterno
(descripción de contenido html)
(contenido html)
--separador alterno--

--separador mixto
(descripción de contenido adjunto)
(contenido adjunto)
--separador mixto--

Se puede observar que los separadores finales tienen un par de quiones extra al final (--).

Se puede comprobar esto explorando el código fuente de algunos email que se hayan recibido, o algunos simples que ilustren estos tres casos.

A continuación coloco el código de algunos scripts que desarrollé basado en las ideas que encontré en PHP: Sending Email (Text/HTML/Attachments) y mucha prueba y error hasta que funcionaron :)

simple_email.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
// akobashikawa@gmail.com, 20090828

$from = isset($_POST['from'])?$_POST['from']:'';
$to = isset($_POST['to'])?$_POST['to']:'';
$subject = isset($_POST['subject'])?$_POST['subject']:'';
$message = isset($_POST['message'])?$_POST['message']:'';
if (isset($_POST['submit'])) {
$headers = "From: $from\r\nReply-To: $from";
$mail_sent = mail( $to, $subject, $message, $headers );
}
?>
<title>Simple Email</title>
<style type="text/css">
</style>

<script type="text/javascript">
</script>
</head>
<body>
<h1><a href="simple_email.php">Simple Email</a></h1>
<form action="simple_email.php" method="POST">
From:<br/>
<input type="text" name="from" value="<?php echo $from; ?>"><br/>
To:<br/>
<input type="text" name="to" value="<?php echo $to; ?>"><br/>
Subject:<br/>
<input type="text" name="subject" value="<?php echo $subject; ?>"><br/>
Message:<br/>
<textarea name="message"><?php echo htmlentities($message); ?></textarea><br/>
<input type="submit" name="submit" value="Send"/>
</form>
<p>
<?php echo isset($mail_sent)?($mail_sent? "Mail sent":"Mail failed"):''; ?>
</p>
</body>
</html>


html_email.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
// akobashikawa@gmail.com, 20090828

$from = isset($_POST['from'])?$_POST['from']:'';
$to = isset($_POST['to'])?$_POST['to']:'';
$subject = isset($_POST['subject'])?$_POST['subject']:'';
$message = isset($_POST['message'])?$_POST['message']:'';
if (isset($_POST['submit'])) {
$random_hash = md5(date('r', time()));
?>
<?php ob_start(); ?>
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64

<?php echo base64_encode(strip_tags($message)); ?>

--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

<?php echo base64_encode($message); ?>

--PHP-alt-<?php echo $random_hash; ?>--
<?php $_message = ob_get_clean(); ?>
<?php
$headers = "From: $from\r\nReply-To: $from";
$headers .= "\r\n".'MIME-Version: 1.0';
$headers .= "\r\n"."Content-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"";
$mail_sent = mail( $to, $subject, $_message, $headers );
}
?>
<title>HTML Email</title>
<style type="text/css">
</style>

<script type="text/javascript">
</script>
</head>
<body>
<h1><a href="html_email.php">HTML Email</a></h1>
<form action="html_email.php" method="POST">
From:<br/>
<input type="text" name="from" value="<?php echo $from; ?>"><br/>
To:<br/>
<input type="text" name="to" value="<?php echo $to; ?>"><br/>
Subject:<br/>
<input type="text" name="subject" value="<?php echo $subject; ?>"><br/>
Message:<br/>
<textarea name="message"><?php echo htmlentities($message); ?></textarea><br/>
<input type="submit" name="submit" value="Send"/>
</form>
<p>
<?php echo isset($mail_sent)?($mail_sent? "Mail sent":"Mail failed"):''; ?>
</p>
</body>
</html>


attachment_email.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
// akobashikawa@gmail.com, 20090828

$from = isset($_POST['from'])?$_POST['from']:'';
$to = isset($_POST['to'])?$_POST['to']:'';
$subject = isset($_POST['subject'])?$_POST['subject']:'';
$message = isset($_POST['message'])?$_POST['message']:'';
if (isset($_POST['submit'])) {
$random_hash = md5(date('r', time()));
if (isset($_FILES['uploadedfile'])) {
$filename = basename($_FILES['uploadedfile']['name']);
$filetype = $_FILES['uploadedfile']['type'];
$tmp_file = $_FILES['uploadedfile']['tmp_name'];
$attachment = chunk_split(base64_encode(file_get_contents($tmp_file)));
}
?>
<?php ob_start(); ?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"

--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64

<?php echo base64_encode(strip_tags($message)); ?>

--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

<?php echo base64_encode($message); ?>

--PHP-alt-<?php echo $random_hash; ?>--

--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: <?php echo $filetype; ?>; name="<?php echo $filename; ?>"
Content-Disposition: attachment; filename="<?php echo $filename; ?>"
Content-Transfer-Encoding: base64

<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--

<?php $_message = ob_get_clean(); ?>
<?php
$headers = "From: $from\r\nReply-To: $from";
$headers .= "\r\n".'MIME-Version: 1.0';
$headers .= "\r\n"."Content-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
$mail_sent = mail( $to, $subject, $_message, $headers );
}
?>
<title>Attachment Email</title>

<style type="text/css">
</style>

<script type="text/javascript">
</script>
</head>
<body>
<h1><a href="attachment_email.php">Attachment Email</a></h1>
<form enctype="multipart/form-data" action="attachment_email.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
From:<br/>
<input type="text" name="from" value="<?php echo $from; ?>"><br/>
To:<br/>
<input type="text" name="to" value="<?php echo $to; ?>"><br/>
Subject:<br/>
<input type="text" name="subject" value="<?php echo $subject; ?>"><br/>
Message:<br/>
<textarea name="message"><?php echo htmlentities($message); ?></textarea><br/>
Attachment:<br/>
<input type="file" name="uploadedfile"/><br />
<input type="submit" name="submit" value="Send"/><br/>
</form>
<p>
<?php echo isset($mail_sent)?($mail_sent? "Mail sent":"Mail failed"):''; ?>
</p>
</body>
</html


Cada uno de estos scripts es una aplicación completa. Se presenta un formulario simple y se hace el envío de email.

Algo que es importante tener en cuenta al enviar Unicode es usar base64 para codificar el mensaje.

Y al enviar un adjunto es importante identificar el tipo de contenido, así como el nombre del archivo. Si no se coloca filename, además de name, en la descripción, el cliente email no reconocerá el adjunto (al menos no GMail).

Recuerde que para que funcione el envío, PHP debe estar configurado para reconocer algún servicio email, usualmente en el servidor local.