Como usar Hotmail desde Outlook (O cualquier otro cliente POP3/SMTP)

Si uno pudiera apuntar a un problema que muchísima gente ha tenido a través de loa años sin tener una solución clara, es el problema de usar algún cliente de email como Outlook para usar su cuenta de correo de Hotmail.

Hay plug-ins para Outlook, instrucciones no claras, y datos falsos o expirados (por ejemplo, de que se requiere una cuenta de Hotmail pagada para poder usarlo bajo Outlook).

Mi meta de es de disipar toda la incertidumbre :-) .

En estos tiempos (septiembre 2009), uno puede accesar todas las cuentas Hotmail, inluyendo las que siempre han sido gratis.  La configuracion de puertos y servidores es la siguiente:

Servidor POP3:

  • Servidor: pop3.live.com
  • Port: 995
  • Encripción: SSL

Servidor SMTP:

  • Server: smtp.live.com
  • Port: 587
  • Encryption: TLS
  • Servidor requiere autentificacion

Para ambos servidores, el nombre de usuario es tu direccion email completa.

Configuración de Outlook

Estos son los pasos a seguir (perdonen las pantallas en inglés, no uso Outlook en español):

En la ventana principal de configuración:

Outlook Main Account Configuration Page

En esta ventana, dale entrada a los datos de servidor como esta mostrado, y también a tu nombre de usuario y contraseña.

Haz click en “Mas Configuraciones…” (O como diga en español)

Ventana de configuración de email

OutlookOutgoingServer

En esta ventana cambia a tab de servidor de envio, y cambia la configuracion como se muestra.

Ve al tab “Avanzado” en seguida…

OutlookAdvanced

…Y pon la configuración mostrada arriba.

Listo!  Ahor has prueba a tus cambios.  Presiona “OK” y vas a regresar a la ventana principal de configuracion de tu cuenta.

En esa ventana, presiona “Probar Configuración de Cuenta…” y Outlook va a hacer la prueba:

OutlookTestSuccess

Si pusiste todos los parámetros correctamente, vas a ver los valores de estatus como “Completado”.  Felicidades, ya tienes acceso completo a tu cuenta de Hotmail desde Outlook!

Post to Twitter Manda este post a Twitter

,

No hay Comentarios

C#: Trabajando con Image y PictureBox

Una de las cosas más frustrantes de trabajar con imágenes y controles PictureBox es que cuando alguien instala tu aplicación, al tratar de modificar archivos de imágenes después de haberlos mostrado vía un PictureBox, algunos usuarios van a obtener errores de “fichero bajo uso por otro usuario” y “error GDI+ desconocido.” Estos errores solo pasan en algunas maquinas, y es muy inconsistente su aparición en general. Es difícil saber qué está pasando realmente.

Microsoft hace el problema peor, da mala información en sus páginas como esta: http://support.microsoft.com/kb/311754. Este artículo da una solución que no funciona, y aparte dice que lo que ocurre es “de acuerdo al diseño.” Ignorando la cuestión de cómo alguien podría poner este comportamiento intencionalmente en un sistema, el hecho de que el comportamiento no sea consistente constituye un error en la implementación.

Si hacemos una búsqueda para este problema, pueden ver varios arreglos propuestos:

  • Llamar .Dispose() a la imagen antes de grabar un archivo
  • Llamar .Dispose() a la imagen antes de grabar un archivo, y luego llamar al recolector de basura
  • Hacer una copia del objeto Image antes de asignarlo al control PictureBox (.NET es demasiado inteligente para esto, al pareces)
  • Usar Image.Clone() para hacer una copia del objeto Image antes de asignarlo al PictureBox
  • Usar FileStream para abrir el archivo

Hay muchísimas páginas y foros en el internet acerca de este problema, y los leí todos, créanme. Ninguno me dio una respuesta 100% efectiva, aunque me apuntaron en la dirección correcta: El problema es en asociar una imagen obtenida de un archivo con un PictureBox. La meta es de usar toda medida en hacer pensar al objeto Image que la imagen no vino de un archivo.

Ya basta de quejarnos… ¿Así que como lo arreglamos? Aparentemente este es un error en Windows desde los días de VB6, asi que no tiene caso esperar a que Microsoft lo arregle.

Después de muchos jalones de pelo e intentos fallidos, esto es lo que finalmente funcionó para mi: Abrir el archivo que contiene la imagen, y de la manera más indirecta posible, asignar los contenidos al objeto Image que vas a usar para mostrar la imagen en el PictureBox. Haz lo mismo cuando vas a salvar una imagen. Si no mezclas objetos Image con acceso a archivos todos van a estar felices y sin errores.

Estos son los pasos a seguir en general:

  • Para abrir un archivo:
    • Abre el archive, pero no como un objeto Image, lee el archive a un arreglo de byte
    • Convierte ese arreglo de byte a un objeto Image, la conversión detectara cual formato (JPG, PNG, etc…) usa el archivo
    • Usa ese objeto Image para asignarlo al PictureBox y desplegarlo
    • NO llames al método .Save() de Image para grabar un archivo, ve lo siguiente…
  • Para grabar un archivo:
    • Clona el objeto Image via el metodo .Clone()
    • Graba la imagen via a un MemoryStream, usando tu codificación preferida (JPG, PNG, etc…)
    • Convierte el MemopryStream a un arreglo de byte
    • Graba ese arreglo de byte al archivo destino

Aquí hay un poco de código que lo demuestra:

Para leer el archivo:

public static Image NonLockingOpen(string filename) {
	Image result;

	#region Save file to byte array

	long size = (new FileInfo(filename)).Length;
	FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
	byte[] data = new byte[size];
	try {
		fs.Read(data, 0, (int)size);
	} finally {
		fs.Close();
		fs.Dispose();
	}

	#endregion

	#region Convert bytes to image

	MemoryStream ms = new MemoryStream();
	ms.Write(data, 0, (int)size);
	result = new Bitmap(ms);
	ms.Close();

	#endregion

	return result;
}

Para escribir el archivo:

public static void NonLockingSave(Image img, string fn, ImageFormat format) {
	// Delete destination file if it already exists
	if (File.Exists(fn))
		File.Delete(fn);

	try {

		#region Convert image to destination format

		MemoryStream ms = new MemoryStream();
		Image img2 = (Image)img.Clone();
		img2.Save(ms, format);
		img2.Dispose();
		byte[] byteArray = ms.ToArray();
		ms.Close();
		ms.Dispose();

		#endregion

		#region Save byte array to file

		FileStream fs = new FileStream(fn, FileMode.CreateNew, FileAccess.Write);
		try {
			fs.Write(byteArray, 0, byteArray.Length);
		} finally {
			fs.Close();
			fs.Dispose();
		}

		#endregion

	} catch {
		// Delete file if it was created
		if (File.Exists(fn))
			File.Delete(fn);

		// Re-throw exception
		throw;
	}
}

Finalemente, aqui hay un método de extension que puede ayudarte:

public static void SaveViaStreams(this Image img, string fn, ImageFormat format) {
	NonLockingSave(img, fn, format);
}

Una vez que usé estos métodos para abriy y grabar mis archivos, todos mis errores de usar imagenes con PictureBox se fueron, en todas las computadoras quemis clientes usan. !Espero te ayuden a tí igual!

Post to Twitter Manda este post a Twitter

, ,

No hay Comentarios

La ética de trabajo en México

Me doy cuenta que en México (o por le menos en Colima) la gente no tiene una gran ética de trabajo.

Me sorprende porque los mexicanos que nos vamos a otras tierras (Estados Unidos más que nada), trabajamos muchísimo allá; somos de los trabajadores más confiables que hay. ¿Pero qué pasa con los que estamos acá en México?

Hace poco un programador, uno que yo consideraba de los mejores que había conocido en México se fue de Gobae (mi compañía de consultoría). Se fue en el momento que le asignamos mantener un subsistema que yo consideraba que solo él podría mantener por lo complejo que es su tecnología.

En la junta donde estábamos hablando de proyectos simplemente dijo que se iba al yo decirle que él debería de mantener ese subsistema. Literalmente paramos la junta para que se saliera del edificio.

Ahora… Yo comprendo que tal vez se sorprendió al ser asignado algo que consideraba complejo, o algo que le iba a tomar tiempo aprender. Pero su reacción fue una de “me voy porque no me gusta” en vez de algo constructivo como… Pues cualquier otra respuesta hubiera sido más constructiva. No le pusimos limite de fecha de cuando debía el sistema estar funcionando, ni ningún otro tipo de presión.
Solamente puedo llegar a la conclusión de que no quería trabajar.

Es triste, porque aquí no va a conseguir trabajo que lo haga avanzar tanto como profesional. Ni va a tener un trabajo que lo conduzca a ser todo lo que puede llegar a ser.

Peor bueno, basta con filosofar. Lo que me alarma, aparte de ponerme en alerta de que una persona más para de trabajar con nosotros porque no quiere hacer el trabajo aunque es capaz de hacerlo, es la señal que envía esto.
No puedo, de buena fe, decirle a alguna compañía americana que abra un centro de trabajo en México. Así como he visto a mi gente acá no trabajar, no puedo recomendar a gente que no conozco íntimamente para algún puesto bueno en una compañía buena.

¿Es el problema que estoy en Colima, una ciudad calmada, de donde la gente acostumbra a emigrar a otras ciudades y otros países? Tal vez tendré más suerte si me voy a vivir a Guadalajara y veo que tal la gente trabaja allá… Una persona muy sabia me dice que en Colima no somos buenos para trabajar porque no tenemos hambre, no necesitamos tanto del trabajo para vivir una vida mínimamente satisfactoria. Puede ser verdad, he escuchado que en otros estados de la republica los trabajadores son mucho mejores que aquí.

Pase lo que pase, no voy a cerrar la oficina de Colima. Seguir abierta y trabajando va a depender de la gente que ahorita está en ella. Esa es la acción mas justa que me puedo imaginar.

Post to Twitter Manda este post a Twitter

, , , ,

No hay Comentarios

Kiva: Mejorando al mundo

Se dice que debemos de enseñar a la gente a pescar para darle de comer toda una vida.  Hya muchas maneras de hacer eso, unas de las mejores que he encontrado es de participar en el mundo de las microfinanzas.  Kiva.org es un sitio donde uno puede aporetar una menor parte de un prestamo (de $25 a $100 USD) en conjunto con otros prestamistas.  El beneficiario es alguien de un pais del trecer mundo que desea crear una micro empresa:  Comprar una vaca para vender la leche, comprar diez prendas de vestir para venderlas a domicilio, etc…

Es bueno participar en esto ya que es muy facil para alguien que no tiene mucho tiempo de tener una participación mayor.  Hasta ahora llevo 63 prestamos hechos.  Unete al movimiento!

Post to Twitter Manda este post a Twitter

, ,

No hay Comentarios

C#: Como obetener el directorio de ejecución

Soy un aficionado a la programación.  Asi que este es mi primer post de código fuente que hace cosas interesantes, resuelve problemas cuyas soluciones no son obvias, o simplemente es codigo interesante.

Este post tiene que ver con algo que aparenta ser simple:  Como pueda saber en cual directorio esta corriendo mi ejecutable?  La respuesta es sorprendentemente dificil de encontrar:

public static string GetExePath() {
	return (System.AppDomain.CurrentDomain.BaseDirectory);
}

La respuesta esta oculta, como ven, en System.AppDomain. Vale la pena explorar esa clase mas a fondo, hay muchas cosas interesantes ahí.

Post to Twitter Manda este post a Twitter

No hay Comentarios

Fotos de boda en linea

Las 925 :) fotos que tomó el fotógrafo para nuestra boda ya esta en linea!  Haz click en la foto para ir a la galería:

Boda Gabriel y Mily

Boda Gabriel y Mily

Estas fotos son preliminares.  Vamos a escojer las mejores y esas si las van a ajustar, retocar, etc…

Post to Twitter Manda este post a Twitter

,

No hay Comentarios

Nacimiento…

Esta es la primer entrada en este blog.

La meta de hacer este blog es de publicar datos e historias interestantes para la gente de habla hispana.  Soy programador de sistemas, es algo que me fascina, asi que probablemente voy a poner alguna entrada de programación aqui tambien, ya que no hay mucha info de nuevas tecnicas y tecnologias en español.

Un saludo!

Post to Twitter Manda este post a Twitter

No hay Comentarios

Twitter links powered by Tweet This v1.6.1, a WordPress plugin for Twitter.