Archivo Diciembre, 2007
Bloqueo del puerto 25 por Prodigy Infinitum
Por Pablo Viale - Web, Windows - 27 Diciembre 2007
Prodigy Infinitum es el proveedor más grande de Internet en México. Recientemente tomaron la determinación de bloquear el puerto 25 para combatir el SPAM o correo basura.
Para los proveedores de hosting esto es un problema, porque los clientes utilizan principalmente Infinitum y perdieron la capacidad de enviar mensajes desde sus oficinas usando Outlook o Thunderbird. Sí los pueden descargar porque el puerto de POP que es el 110 no fue bloqueado.
¿Cómo solucionarlo?
Si eres un proveedor de hosting, esta es la mejor solución:
Antes que nada, no cambies tu servidor de e-mail a un puerto diferente. Déjalo en el puerto 25 porque todos los servidores de mail externos (hotmail, gmail, yahoo, etc) intentarán conectarse con tu servidor de mail usando el puerto 25. Si pones a tu servidor de mail a escuchar en otro puerto, los correos de servidores externos no lo encontrarán y tus clientes no recibirán mails.
Ok, con ese asunto aclarado, tienes que hacer lo siguiente:
Al seleccionar un nuevo puerto, no puedes elegir el que se te venga a la mente, busca en Internet información sobre los diferentes puertos porque hay varios números que ya están reservados para otros servicios, como FTP, bases de datos, etc. El 26 está libre y lo puedes usar sin problemas.
1. Redirigir el tráfico del puerto 26 al 25
Si tu servidor de mail lo soporta, indícale que escuche en el puerto 25 y en el 26 (u otro número de tu elección) y sáltate toda la explicación siguiente del paso 1. Si no soporta múltiples puertos, entonces deberás redirigir todo el tráfico del puerto externo 26 (u otro número de tu elección) al puerto interno 25.
Esto también se puede llamar “port mapping”. Estas son dos herramientas que me recomendaron para hacerlo, aunque no las he probado:
- Greyware Detour – http://www.greyware.com/software/detour/index.asp
- Port mapper, v1.40 – http://www.kmint21.com/free/port-map.zip
Una tercera opción y que sí he probado, es utilizar el Windows Firewall/Internet Connection Sharing (ICS). Para hacerlo, primero asegúrate que el servicio esté encendido y marcado como automático.
Puedes abrir el Firewall de Windows desde el panel de control:
Si no está encendido, enciéndelo:
Haz clic en la pestaña Advanced, selecciona Public bajo Network Connection Settings y oprime el botón Settings....
En la ventana que aparece, oprime Add... para dar de alta una nueva entrada y realizar la redirección o mapeo de puertos. Notarás que yo ya lo he hecho, mi entrada se llama Programa de mail.
Esta es la configuración de dicha entrada, he puesto una dirección IP ficticia, modifícala por tu IP pública:
Acepta los cambios y la redirección ha sido realizada. Ahora, todo el tráfico que llegue a tu servidor solicitando el puerto 26 será reenviado al puerto 25. De esta manera es como si tu servidor de mail estuviera escuchando por ambos puertos.
Solamente ten en cuenta que si no tenías habilitado tu Firewall y lo acabas de habilitar, tienes que abrir los puertos para los demás servicios, como FTP, Web, etc. Esto lo haces desde la misma ventana, pero en la pestaña Exceptions. Haz clic en Add Port... y configura el puerto que deseas abrir:
Busca una lista de puertos en Internet para saber cuáles debes abrir.
Lo que me gusta de esta solución es que no hay que instalar nada adicional en el servidor, y el Firewall de Windows corre como un servicio, así que te aseguras de que siempre estará activo, aún después de reiniciar el servidor.
2. Pedir a tus clientes que modifiquen la configuración de su Outlook o Thunderbird
Suponiendo que seleccionaste el puerto 26, tendrás que pedirles a tus clientes que realicen la modificación del Servidor de Salida (SMTP) en sus clientes de e-mail (Outlook, Thunderbird, Eudora, etc), borrando el número 25 y colocando el 26.
Los pasos para realizar esta configuración varían de programa a programa, busca información en Internet para saber cómo hacer este cambio.
Al usar el puerto 26, el Outlook de tus clientes se conectará a tu servidor por el puerto 26, tu servidor lo redireccionará al puerto 25, donde está escuchando tu servidor de mail. Tu cliente nunca utilizó el puerto 25, que ha sido bloqueado.
Si tienes otros clientes cuyo proveedor de Internet no ha bloqueado el puerto 25, entonces puedes pedirles que realicen el cambio al puerto 26 o que no hagan nada. De cualquiera de las dos formas podrán enviar y recibir correo sin problemas.
Cómo obtener tamaño, ancho y alto de una imagen, y cómo modificar su tamaño
Por Pablo Viale - ASP.NET 2.0 / 3.5 - 13 Diciembre 2007
Para obtener el tamaño, ancho y alto de una imagen, usa el siguiente código:
Primero importa:
-
Imports System.IO
-
Imports System.Drawing
Para obtener tamaño, ancho y alto de una imagen:
-
Dim fs As FileStream = New FileStream("c:\miruta\miimagen.jpg", FileMode.Open, FileAccess.Read, FileShare.Read)
-
Dim LaImagen As System.Drawing.Image
-
LaImagen = System.Drawing.Image.FromStream(fs)
-
Label3.Text = "Tamaño: " & Convert.ToInt32(fs.Length) & "<br/>"
-
Label3.Text = Label3.Text & "Ancho: " & LaImagen.Width & "<br/>"
-
Label3.Text = Label3.Text & "Alto: " & LaImagen.Height & "<br/>"
-
fs.Close()
-
fs = Nothing
Para modificar su tamaño:
-
Dim fs As FileStream = New FileStream("c:\miruta\miimagen.jpg", FileMode.Open, FileAccess.Read, FileShare.Read)
-
Dim LaImagen As System.Drawing.Image
-
LaImagen = System.Drawing.Image.FromStream(fs)
-
-
Dim ancho, alto As Integer
-
ancho = 100
-
'este calculo es para que la foto no pierda proporciones
-
alto = Math.Floor((100 / LaImagen.Width) * LaImagen.Height)
-
-
Dim NuevoBitmap As Bitmap = New Bitmap(ancho, alto)
-
Dim Graficos As Graphics = Graphics.FromImage(NuevoBitmap)
-
Graficos.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
-
Graficos.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
-
Graficos.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
-
Dim Rectangulo As Rectangle = New Rectangle(0, 0, ancho, alto)
-
Graficos.DrawImage(LaImagen, Rectangulo)
-
NuevoBitmap.Save("c:\miruta\thumb.jpg", NuevoBitmap.RawFormat)
-
fs.Close()
-
fs = Nothing
Este código es muy útil para crear vistas previas de nuestras imágenes (o thumbnails) automáticamente.
Cómo subir un archivo al servidor usando ASP.NET
Por Pablo Viale - ASP.NET 2.0 / 3.5 - 13 Diciembre 2007
Para subir un archivo al servidor mediante una aplicación web ASP.NET 2, usa el siguiente código:
-
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
-
<asp:Button ID="Subir" runat="server" Text="Subir foto" />
-
If FileUpload1.HasFile Then
-
FileUpload1.SaveAs("c:\miruta\" & FileUpload1.Filename)
-
End If
Asegúrate de que el fólder en el que vas a grabar tus archivos tenga permisos de escritura por parte del usuario ASPNET y/o NETWORK SERVICE.
Añadir metatags al elemento head mediante programación
Por Pablo Viale - ASP.NET 2.0 / 3.5 - 12 Diciembre 2007
Para añadir metatags al elemento head utilizando programación (ASP.NET 2), primero asegúrate de que el elemento head tenga su propiedad runat=server.
En el código de la página coloca lo siguiente:
-
Dim cabeza As HtmlHead
-
cabeza = DirectCast(Header, HtmlHead)
-
Dim meta As HtmlMeta = New HtmlMeta()
-
meta.Attributes.Add("cache-control", "no-store, must-revalidate, private")
-
meta.Attributes.Add("Pragma", "no-cache")
-
cabeza.Controls.Add(meta)
Funciona aunque la página esté ligada a un master page.
Expresión regular para limitar número de caracteres en TextArea
Por Pablo Viale - ASP.NET 2.0 / 3.5 - 5 Diciembre 2007
Trabajando con ASP.NET, cuando pones un TextBox con la propiedad TextMode = MultiLine, el control se convierte en un textarea de HTML. Debido a esto, la propiedad MaxLength no funciona.
Si quieres limitar el contenido del texto a un número específico de caracteres, te recomiendo utilizar un RegularExpressionValidator con la siguiente ValidationExpression:
^[\s\S]{0,25}$
Solamente cambia el número 25 por el número máximo que desees.
Buscando en Internet encontrarás varios javaScripts que van mostrando cuántos caracteres quedan y cuando se alcanza el límite no te dejan escribir más. Pero si alguien tiene deshabilitado javaScript en su navegador entonces esa validación no se realizará.
Lo bueno de que lo hagas con un RegularExpressionValidator es que hace la validación tanto en el cliente como en el servidor.
Cómo obtener el Username (Nombre de usuario) logueado
Por Pablo Viale - ASP.NET 2.0 / 3.5 - 3 Diciembre 2007
Si dentro de una aplicación quieres mostrar el Nombre de usuario del usuario logueado, puedes usar el siguiente código:
-
Dim ElUser As MembershipUser
-
ElUser = Membership.GetUser()
-
Men.Text = ElUser.UserName







