jueves, 23 de febrero de 2012

Mensajes con basura en el texto

Sintomas
Algunos destinatarios no ven correctamente el texto de mensajes de correo compuestos mediante la clase system.net.mail de .net Framework.
Concretamente los carácteres no ASCII como vocales acentuadas o ñ se transforman en varios carácteres extraños.
Para complicarlo mas unos destinatarios lo ven bien y otros no. Depende del servidor de correo pero tambien del cliente empleado.
Por ejemplo:
  • En la versión web de Gmail se vé bien, pero no en Outlooks cuando lo descargas por IMAP .
  • El mismo Outlook ve bien el mensaje si lo descarga de un servidor Exchange.
Es muy curioso, yo tengo dos cuentas en mi perfil de Outlook, una conectada a Exchange la otra a Gmail por IMAP. Si adjunto el mensaje incorrecto a otro mensaje y me lo mando a la cuenta Exchange, cuando abro el adjunto lo veo perfectamente.
Para colmo de males, en ocasiones el problema desaparece si no incluyes el logotipo en la firma del mensaje.

Solución:
Obviamente es un problema de codificación, el texto esta en UTF-8 pero el cliente de correo cree que es Windows 1252.
La documentación del framework habla de codificaciones por defecto UTF-8 y base64 pero no estoy seguro de que lo haga, o de que le hagan caso.
Mi consejo es establecer la codificación en todos las propiedades y metodos que lo permitan:
El mensaje:
* mailmessage.Bodyencoding
* mailmessage.SubjetEncoding
* mailmessage.HeadersEncoding
Los adjuntos (el logotipo es un adjunto referenciado en el HTML):
* Attachment.transferEncoding

Yo también lo incluyo en los headers del HTML del mailmessage.bodyHTML también deberiamos incluir un metatag
content="text/html;charset=utf-8" http-equiv="content-type"
Y por fin, y muy importante, hay que especificar la codificación cuando creamos vistas alternativas generadas desde un string:
dim av=alternateview.createAlternateViewFromString(txt, system.text.encoding.utf8, "text/html")
msg.alternateviews.add (av)
Finalmente, si leemos el cuerpo de un archivo no hay que olvidarse de que esté haya sido guardado en UTF8 y que haya sido leido usando UTF8
Actualmente con todas estas medidas me funciona, pero creo que encontraré algún problema más.

miércoles, 15 de febrero de 2012

Al abrir Google se dispara una alarma de virus Exploit:JS/Blacole.BW

Sintomas:
Cuando un usuario accede a Google con IE aparece una notificación de detección del virus Exploit:JS/Blacole.BW y se bloquea la página o incluso se solicita el reinicio del ordenador.
Motivo:
Parece que hubo un error en la actualización de las firmas antivirus de Microsoft.
Hay una nota en el centro de seguridad de Microsoft
Solución:
Actualizar con windows update las firmas de virus.
Comentario:
Será algo temporal pero me parece que hay mucha gente preocupada por la alerta y no he visto aún ninguna advertencia aparte del trhead arriba.

miércoles, 8 de febrero de 2012

Ocultar mensajes de estado de página en Sharepoint

Sintomas:
Al editar una página wiki en SPD,  por ejemplo para ocultar la sección "modificado recientemente" del menu de acceso rápido, aparece una mensaje en amarillo que dice:
La página actual se personalizó a partir de su plantilla. Revertir a la plantilla. 
En inglés:
 The current page has been customized from its template.
Esto plantea dos problemas:
No queda bonito.
Un usuario puede revertir al diseño original por error.
Solución:
Incluir el div pageStatusBar en un bloque SharePoint:SPSecurityTrimmedControl

   

Con esto solo los gestores puede ver el mensaje de estado.  De hecho es bastante útil usarlo en lugar del borrado.
Hay otras soluciones basadas en CSS, borrado, programación,..etc:

Luego intenté usar powershell para quitar el link y evitar restauraciones accidentales, pero no lo he conseguido. La idea era una propiedad HidePageUnghostMessageV4 no documentada que esconde el linq pero no el mensaje, sin embargo no he conseguido que funcione por ahora.

REFERENCIAS:

Getting rid of The current page has been customized warning in SharePoint 2010

http://social.technet.microsoft.com/Forums/en/sharepoint2010customization/thread/61a953cc-6480-429f-bbee-a34988c1e031