Parsear e importar contactos o direcciones de email desde .csv

Parsear e importar contactos o direcciones de email desde .csv

Necesitaba hacer una función para parsear y procesar un .csv pues quería hacer una aplicación que subiendo un .csv exportado de la libreta de direcciones de Outlook o Thunderbird, un usuario pudiera invitar a todos sus contactos de su agenda.
Una de las claves de esta función es la función de php fgetcsv(), que es similar a fgets() excepto que fgetcsv() examina la línea que lee para tratar campos en formato CSV y devuelve una matriz que contiene el campo leído.

A continuación la función para parsear y procesar archivos .csv exportados desde Outlook o Thunderbird.
Nota: la función tan sólo procesa y obtiene todos las direcciones de correo válidas en un array, a partir de aquí que cada uno siga como quiera. Lo normal es presentar al usuario todos los correos obtenidos en un formulario y que pueda elegir a que contactos le llega la invitación, seleccionando o deselecionando sendos checkbox. Esto ya se puede hacer todo lo bonito que se quiera con diseño y jquery (o las librerías de javascript que uno elija).

<?php
/**
 * Funcion que se encarga de procesar el contenido de un archivo .csv
 * Los archivos .csv o comma-separated values, suelen servir para exportar la libreta de direcciones de gestores de correo como Outlook o Thunderbird
 * En la siguiente funcion, se procesa el contenido de un .csv para recoger todos los emails que contenga.
 * Se realiza previamente una serie de comprobacaciones de <a title="seguridad" href="http://www.pedroventura.com/tag/seguridad/">seguridad</a>.
 * Así como el filtrado con una expresion regular para tan sólo obtener las direcciones de email, pues un csv contiene tantos datos como tengamos en nuestra libreta de direcciones
 * El resto de la lógica queda abierta a las necesidades de cada uno.
 * Nota: este ejemplo esta realizado sobre el framework <a title="CakePHP" href="http://www.pedroventura.com/cakephp/">CakePHP</a>
 * @author Pedro Ventura www.pedroventura.com
 * @version 1.0
 * 
 */

function procesar_contactos_csv() {
	$formatosFicheroValidos = array('text/csv');
	if (!empty($this->data)) {
		if (isset($this->data['Usuario']['name1']['name']) && (!empty($this->data['Usuario']['name1']['name']))) {
			$arrayEmails = array();
			if (in_array($this->data['Usuario']['name1']['type'],$formatosFicheroValidos)) {
				$punteroFichero = fopen($this->data['Usuario']['name1']['tmp_name'], "r");
				if ($punteroFichero) {
					while (($aDatos = fgetcsv($punteroFichero, 1000, ",")) !== false) {
						foreach ($aDatos as $registro) {
							# solo tomo los emails, pues $registro puede tener el nombre, apellidos, etc..
							if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$registro)) {
								# verifico que no este ya en el array de emails finales, para no repetirlo
								if (!in_array($registro,$arrayEmails)) {
									$arrayEmails[] = $registro;
								}
							}
						}
					}
					fclose($punteroFichero);
				}
			} else {
				$this->Session->setFlash('Formato de archivo incorrecto, tienes que subir un archivo .csv');
			}
			# seteamos el array obtenido para seguir procesando o realizar la logica que cada uno desee
			$this->set('aEmailsContactos',$arrayEmails);
		} else {
			$this->Session->setFlash('Primero debes seleccionar un archivo .csv para poder procesarlo!');
		}
	}
}

No me voy a parar a explicar mucho el HTML para generar el formulario de subida, esta parte es relativamente sencilla, pero vendría a ser algo así

<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="data[Usuario][name1]" />
<input type="submit" value="Procesar contactos">
</form>

Tags de búsquedas:

csv contactos android apk,* csv importar registros,email registro CSV,leer y parsear un documento csv en android,seleccionar campo csv php,thunderbird importar csv campos de la libreta

Noticias relacionadas »

1 comentario en “Parsear e importar contactos o direcciones de email desde .csv

  1. isra
    / Responder

    Excelente amigo Pedro, gracias por la info 😀

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Invertir en criptomonedas: »

 

Cómo comprar bitcoin

Invertir y comprar Bitcoin y otras altcoins es más fácil de lo que crees.

1) Si sólo quieres comprar Bitcoin, Ethereum o Litecoin como inversión, tu opción es Coinbase

2) Si quieres probar con otras criptomonedas tu opción es Binance

3) Cualquier duda escríbeme con total libertad al formulario de contacto para resolver dudas: https://www.pedroventura.com/contacto/

¡Comparte este artículo! »

  • Pedro (40 min)
    Buenos días Margherita El plugin está obsoleto y ya no…
  • Juan Carlos Díaz (11 horas)
    Este grupo de Telegram me ha dado muy buenas señales…
  • Margherita (22 horas)
    Hola, tengo un problema con el plugin. Tanto en la…
  • Pablo H (2 semanas)
    Hola Pedro, Muchas gracias por el post, me fue muy…
  • Pedro Ventura (2 semanas)
    Hola Margat Muchísimas gracias por tu comentario, me alegro de…
  • Pedro Ventura (2 semanas)
    Hola Rebeca, Tan sólo se permite 1 dominio por cuenta.…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
Invitar a contactos de facebook desde una web externa con la API FBML

Integrar un formulario donde un usuario puede conectarse a facebook y seleccionar sus amigos y contactos para enviarles una invitacion...

Cerrar