Categories
.NET AJAX ASP.NET

Videos sobre Atlas

Para los interesados, Luis Abreu publicó unos cuantos videos básicos sobre la utilización de Atlas, también está disponible el código fuente de los ejemplos mostrados en éstos.

Categories
.NET

Visual Studio .NET Tips and Tricks – Desgarga gratuita

Para los interesados, pueden descargar una versión gratuita en formato PDF del libro "Visual Studio .NET Tips and Tricks".

Si no quieren registrarse, pueden utilizar el siguiente enlace.

Categories
PHP

PHPMailer con GMail

En un hilo publicado en forosdelweb, en el que un usuario desea utilizar el servidor SMTP de GMail para enviar correos usando PHPMailer, hacen referencia a esta interesante entrada que sirve justamente para lo antes mencionado.

Hice algunos cambios en class.phpmailer.php (línea 537) para separar correctamente el host y el puerto cuando se tienen cosas como $mail->Host = 'ssl://smtp.gmail.com:465';, estos cambios se hicieron debido a que GMail usa SSL/TLS como protocolo de comunicación/autenticación.

php:

# Original
if(strstr($hosts[$index], ":"))
        list($host, $port) = explode(":", $hosts[$index]);
else
{
        $host = $hosts[$index];
        $port = $this->Port;
}
php:

# Modificación
if (preg_match('#(([a-z]+://)?[^:]+):(\d+)#i', $hosts[$index], $match))
{
        $host = $match[1];
        $port = $match[3];
}
else
{
        $host = $hosts[$index];
        $port = $this->Port;
}

Página de prueba:

php:

<?php

require_once 'class.phpmailer.php';

$mail = new PHPMailer ();

$mail -> From = "foo@gmail.com";
$mail -> FromName = "Foo";
$mail -> AddAddress ("bar@domain.com");
$mail -> Subject = "Test";
$mail -> Body = "<h3>From GMail!</h3>";
$mail -> IsHTML (true);

$mail->IsSMTP();
$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = 'foo@gmail.com';
$mail->Password = '******';

if(!$mail->Send()) {
        echo 'Error: ' . $mail->ErrorInfo;
}
else {
{       echo 'Mail enviado!'.
}

?>
 

Nota: Para hacerlo funcionar es necesario que la extensión OpenSSL esté habilitada.

Archivos relacionados

Categories
.NET

Código fuente externo y Visual Studio .NET

Ohad Israeli comenta un problema de seguridad reportado en enero de este año. Este problema existe cuando Visual Studio ejecuta el código que está dentro del evento Load de un control de usuario o formulario, que a su vez forma parte de algún otro contenedor (también ocurre cuando se heredan controles/formularios)

Si bien es cierto que antes ya había experimentado este comportamiento -como seguramente varios de ustedes-, no lo había visto desde este punto de vista. Tendré que tener un poco más de cuidado para la próxima!

Categories
.NET

FillSchema y tablas temporales.

Hoy, mientras hacía pruebas en una aplicación desarrollada en C#, una rutina que se encargaba de obtener el esquema de procedimientos almacenados (Sql Server), mandaba errores -con el mensaje "Invalid object name '#temp...'"- por el hecho de que algunos de éstos hacían uso de tablas temporales.

El código en cuestión hacía algo como esto:

csharp:

DataTable tabla = new DataTable();

using (SqlDataAdapter da = new SqlDataAdapter("sp_test", "CadenaConexion"))
{
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.FillSchema(tabla, SchemaType.Source);
}

Y el procedimiento tenía una estructura parecida a:

sql:

CREATE procedure sp_test
AS

SELECT  a, b
INT0    #temp
FR0M    tabla1

SELECT  T.*, T2.c
FR0M    #temp T join tabla2 T2
0N      T.a = T2.a

go

Después de hacer una búsqueda y encontrar un par de páginas que aclararon mis dudas, finalmente tuve que modificar algunos procedimientos para que hagan uso de variables tipo table.

Nota: La sintáxis del procedimiento tiene errores intencionales debido a los problemas de configuración en el servidor donde se hospeda esta página