Archivo

Archive for the ‘Desarrollo y programación de sistemas’ Category

Hype, animaciones interactivas en HTML5, sin Flash

Hype es un software para Mac que combina la linea de tiempo de Flash y una interfaz similar a Keynote de Apple para crear una de las primeras herramientas que apuntan a reemplazar por completo a Flash, por lo menos a nivel de las animaciones interactivas en la web.

Hype usa CSS3HTML5 y Javascript para animar elementos HTML con keyframes y efectos de movimiento similares a los que crea Flash. Aun no combina audio o video (aunque es 100% posible hacerlo con HTML5), pero sí permite agregar, dentro de la herramienta, interactividad con Javascript.

Cuando Hype detecta que un navegador no soporta animaciones CSS3, usa Javascript tradicional (como las animaciones de jQuery) en reemplazo. Sólo en casos extremos, como Internet Explorer 6 fallará. Pero ya nadie usa Internet Explorer 6.

¿Cuanto cuesta y en serio esto mata a Flash?

Cuesta 30 dolares en la Mac Store, sólo está disponible en Mac OS X. Revisen la galería para entender qué puede hacer Hype. Es similar a lo que veíamos en Flash 4 y 5, que es un avance increíble sobre hacer animaciones con sólo código. Para muchos, esto será suficiente para no usar Flash.

Para casos complejos, obviamente aun no reemplaza a la corona de Adobe. Si quieres crearcosas como esta, Hype está bien, pero cuando vas a elementos más complejos como videojuegos, tus opciones son usar Flash o hacer código puro en JS, CSS3 y HTML5.

Por otro lado, esto es un 1.0. Si la aplicación vende y tiene futuro, puede que veamos, al fin, una competencia seria a Flash. El código que genera Hype aun no es lo más lindo, pero con un poco de tiempo, puede ser un contendiente fuerte.

Aplicaciones de Escritorio vs Aplicaciones Web, ¿hay diferencia en el desarrollo?

  • Esto post nace como respuesta a las siguientes preguntas o dudas:
    • Estoy desarrollando una aplicación Web, en Windows yo usaba el evento KeyPress pero en asp.net, asp, php, jsp, o xsp no se como hacerlo.
    • De una página A envío información a una página B, quiero que al cerrar la página B el foco regrese a la página A. Esta última es clásica en los foros, además de venir con esta nota la final: el código debe estar con C# 2008 y usando mejores prácticas
    • El diseñador de Visual Studio .Net no funciona, arrastre mis controles pero en el navegador se ve todo feo
    • Voy a desarrollar una página, y no se que lenguaje usar JavaScript, C#, JSP, Php, o ASP.Net, ¿con cuál de estos se ve mejor mi página?
    • Quiero pasar variables usando POST en asp.net, y no se como hacerlo
    • ¿Cuáles son los navegadores más usados? Estoy haciendo una web con Php, y no quiero hacer muchas versiones de mi código, sólo para 3 navegadores como máximo
    • Estoy haciendo una Web 2.0, estoy programando con JavaScript y no puedo conectarme a la base de datos
    • -¿Qué estas usando para desarrollar tu Web html o xhtml?, –No uso html, yo estoy usando lo ultimito uso ASP.NET 3.5, dicen que html ya esta desfasado.
    • -¿Y ya aprendiste Html y Javascript para tu proyecto Web?, –No, con Visual Studio .Net ya no se usa eso, sólo arrastras controles y programas como en Windows

    Para responder a las preguntas vamos a ver una arquitectura simple de dos aplicaciones una Windows (o de escritorio) y una Web

    Aplicación de Escritorio

    https://i0.wp.com/sergiot2.com/blogimages/2009/01Ene/14-Windows.png

    En una aplicación de escritorio normalmente no iniciamos sesión por cada aplicación que usemos, sólo se inicia sesión una vez cuando prendemos el sistema operativo, asumiendo que vamos a abrir una aplicación para ver nuestra lista de tareas:

    1. El usuario carga la aplicación.
    2. La aplicación (el código), se conecta a la base de datos y recupera la información del usuario.
    3. La aplicación muestra al usuario la información solicitada.

    Aplicación Web

    https://i0.wp.com/sergiot2.com/blogimages/2009/01Ene/14-Web.png

    El usuario desde cualquier parte del mundo y desde cualquier dispositivo (PC, laptop, mobile), desea ver donde será el próximo @BeerTwit.

    1. El usuario tiene que ingresar la URL de la página en su navegador (*1). El navegador por detrás se encargará de hacer un request (solicitud) al servidor Web usando el protocolo de comunicación HTTP (*2) (internet), y en este caso usará el método GET, por que sólo quiere obtener información.
    2. El servidor Web recibe el request y envía un response (sólo html) al navegador. Los navegadores no entienden el código ASP, PHP, o JSP, ellos sólo muestran contenido en html (*3), es por eso que todos los servidores Web después de procesar un request devuelven sólo html (que puede incluir Javascript (*4)), el html generado debe ser un formulario en html, para que el usuario pueda enviar su información. Por otro lado si el usuario ha iniciado sesión con anterioridad es posible que su sesión este activa, y no tenga que iniciar sesión nuevamente.
    3. El usuario llena su información, user y password, y hace clic en el famoso botón “Sign in”. El navegador por detrás recolectará esta información, y en este caso que se desea enviar esa información al servidor debe estar usando el método POST. Todos los lenguajes usan POST para enviar información a una página, ya sea ASP.NET, Php, JSP, etc (*5). En el caso especial de ASP.NET cuando están desarrollando por defecto todos los formularios se envían usando POST, pueden hacer “View Source” de una página en el navegador y verán que el formulario html tiene el método POST. Pueden ver también esto usando la herramienta Fiddler. Con GET también se puede enviar variables, pero no es técnicamente enviar información, es mas bien, un obtener información con estos parámetros.
    4. El request llega al servidor Web, y se ejecutará el código de servidor Php, Jsp, o ASP, que se conectará con la base para verificar si existe el usuario y si el password coincide con el enviado por el usuario.
    5. Si el usuario y el password son validos, el código de servidor (login.php, login.jsp, o login.aspx), redireccionará el request a otra página showUpdates.php, la cual se conecta nuevamente a la base de datos para traer todos los updates de los amigos del usuario, después de procesar la página, el servidor envía el response (sólo html) al usuario.
    6. El usuario ve en una página las últimas actualizaciones de sus amigos, y parece que esta semana no habrá @BeerTwit, así que tendrá que inventar alguna excusa para generar uno nuevo.

    ¿Se nota la diferencia por qué es distinto para programar para Windows, que programar para Web? ¿Todavía no?. Vayamos resumiendo:

    *1. El front-end de toda aplicación Web, siempre acabará en un “navegador” y si queremos que se vea bien la mayoría de navegadores debemos desarrollar usando estándares, eso evitará tener que hacer una versión de Html o Css por cada navegador. Ahora también esta de moda tener una versión móvil de las aplicaciones:http://m.elcomercio.com.pehttp://m.hi5.com/http://m.facebook.comhttp://m.twitter.comhttp://m.tuWebAqui.com.

    *2. El protocolo usado para comunicarse con un servidor web es: “HTTP”, y normalmente usamos HTTP GET o HTTP POST, para cualquier tecnología de servidor. Revisar este Screencast del genial David SalgadoTrabajando con HTTP GET y HTTP POST, acá muestra por ejemplo simular un browser desde .Net haciendo request GET o POST usando la clase HttpWebRequest, aunque también pueden usar la clase WebClient. Por otro lado existen otros métodos de request además del GET o POST, el uso de estos métodos los verán con REST.

    *3. Ya hemos mencionado que todo servidor Web devuelve al cliente sólo “HTML”, por eso importante trabajar con estándares para que nuestro diseño se pueda ver bien en todos los navegadores. ¿Por qué el código de mi página (php, jps, asp.net) no se ve bien? Pues posiblemente sea por que no sabemos HTML o no sabemos CSSo el diseño no es nuestro tu tema, si vamos a desarrollar una Web tampoco vamos a centrarnos en aprender html a nivel experto, pero si debemos conocer lo básico sobretodo si nosotros estamos encargados de integrar el diseño con la funcionalidad. ¿Si soy developer como diseño mi página Web?, revisar los comentarios en elsiguiente artículo.

    *4. Un gran aliado para hacer más dinámica la interacción de nuestra aplicación web con el usuario es usar “Javascript”. Recuerden que una aplicación Web, tiene dos ámbitos: cuando esta en el cliente (1), y cuando se hace un request y se va al servidor (2) para procesar el request y generar el response. Entonces, o está en el navegador del usuario o está en el servidor Web, entonces JavaScript es un lenguaje script del lado del cliente, y con el voy poder cambiar elementos dentro de la versión html que este en el cliente. Por ejemplo, puedo con un botón (input: type-button) hacer el llamado a una función en javascript que cambia el color o contenido a un caja de texto (input: type-text), y para hacer esto en la página, no es necesario que la página vaya al servidor, con JavaScript podemos hacer estos cambios del lado del cliente. Si yo hago el cambio de color o contenido de una caja de texto desde un lenguaje de servidor asp o php, la página tendrá que viajar al servidor sólo para cambiar el color. JavaScript da una mejor interacción con el usuario, pero no todo se puede hacer del lado cliente, por que la data, información, el valor, la carnecita, esta en el servidor y hay que viajar para traer esta información. Cada vez que se hace un request al servidor Web (sea GET o POST) se refresca toda la página, lo que da una percepción de lentitud a comparación de Windows, si quieres mejorar esto una de las opciones es usar Ajax. Siempre es bueno conocer lo básico de JavaScript, sobre todo para cuando estemos trabajando con popUps o cualquier interacción del lado del cliente.

    *5. Y por último el “lenguaje de servidor”, que puede ser Php, Asp, Jsp, y todos los demás. Obviamente si tu labor es desarrollar páginas web con acceso a datos, debes dominar el lenguaje de programación, pero como vimos anteriormente también es útil conocer lo básico de JavaScript, Html, Css, y cuando lo vayas necesitando aprendes más de cada uno de ellos.

    Espero que las preguntas propuestas al inicio, hayan quedado resueltas.

    P.D.: Y recuerden, programar una aplicación Web no es lo mismo que programar una aplicación de escritorio, pero si va servir nuestros conocimientos de programación. En .Net por ejemplo todas las librerías, a excepción de las propias de Windows, que hayas aprendido programando Windows, te van servir cuando programas en Web, ejemplo: System.IO, System.Xml, System.Data.SqlClient, System.XYZ.

    Saludos,

    s foros, además de venir con esta nota la final: el código debe estar con C# 2008 y usando mejores prácticas

El Worldwide Web Consortium acaba de dar a conocer los resultados de su test con el que analizar la compatibilidad de los navegadores con el futuro estándar HTML5

El Worldwide Web Consortium acaba de dar a conocer los resultados de su test con el que analizar la compatibilidad de los navegadores con el futuro estándar HTML5

03/11/2010 – W3C, el organismo encargado de desarrollar protocolos y directrices que aseguren el crecimiento de la Web, ha llevado a cabo el Official HTML5 Test Suite Conformance, una serie de pruebas con las que determinar de forma oficial la implementación de HTML5 en los principales navegadores web.

Las pruebas realizadas hasta la fecha y que evalúan a los navegadores Internet Explorer 9 Plattform Preview 6, Chrome 7 beta, Firefox 4 beta 6, Opera 11 alpha y Safari 5.0, han cubierto los aspectos de las especificaciones de HTML5: “atributos”, “audio”, “vídeo”, “canvas”, “getElementsByClassName”, “contenido externo” y “xhtml5”.

Para sorpresa de muchos, el navegador que obtiene los mejores resultados en este Test de compatibilidad con la especificación de HTML5 es Internet Explorer, por delante incluso de Google Chrome.

Microsoft parece confirmar de esta manera, el esfuerzo e interés en su carrera por extender su compatibilidad con estandares web. Aquellos que deseen acceder a más información y descarga de Internet Explorer 9 Plattform Preview 6.

Clasificación Official HTML5 Test Suite Conformance:

  1. Internet Explorer Platform Preview 6
  2. Google Chrome 7.0.517.41 beta
  3. Firefox 4 Beta 6
  4. Opera 11.00 alpha (build 1029)
  5. Safari Version 5.0.2 (6533.18.5)

Crea una postal virtual

Un Sistema de postales Virtuales en ASP 

Muchos de vosotros me habíais pedido un articulo sobre el desarrollo de una aplicación de envió de postales, bien, pues aquí lo tenéis.

El código que voy a mostrar es el mismo que el usado en el sistema de postales de ASPTutor, así que para que te hagas una idea del funcionamiento general antes de liarte con el código, te recomiendo que te pases por allí.

El ActiveX que vamos a usar para enviar la postal es ASPemail de Persit, entre otras cosas porque poco a poco se ha convertido en un estándar y además, porque nos permite enviar correo con formato HTML. Tienes todos los procedimientos de configuración y uso de ASPEmail en http://www.asptutor.com/asp/vart.asp?id=55

Nuestra aplicación va a costar de una estructura de directorios para almacenar las imágenes,  una base de datos y tres módulos asp.

Vamos a empezar describiendo la estructura de directorios que vamos a crear.
Situaremos nuestra aplicación de e-postales e un directorio que denominaremos «postales» (aquí situaremos nuestros módulos .asp) a su vez crearemos u subdirectorio de «postales» llamado «images» para situar los imágenes que enviaremos en nuestras postales. Debajo de «images» crearemos el directorio «miniaturas» destinado a contener copias reducidas de todas nuestras imágenes a fin de agilizar la carga cuando mostremos los catálogos de imágenes.

Nuestra estructura final debería quedar asi:

Descripción de la base de datos:

Como veis, la base de datos es muy sencilla, solo contiene una tabla denominada «postales» y tres campos

id Campo autonumérico que nos hace de identificador de cada imagen
url Nombre físico de la imagen (mariposa.gif, avion.jpg,…) 
tema El campo tema nos servirá para agrupar todas las imágenes de un mismo tipo (paisajes, infantil, …)

Hasta aquí sencillo ¿verdad?, bueno, pues como veréis ahora el código tampoco es complejo.

Módulos de la aplicación

Como dijimos al principio, la aplicación consta de 3 módulos:

default.asp Será la página de inicio de nuestro sistema de postales. Cumplirá una doble función, nos va a servir tanto para elegir el tema de la postal (si se entra en ella sin parámetros) como para que el usuario confeccione la postal una vez elegido el tema
confirmapostal.asp En este modulo comprobaremos que el usuario ha introducido todos los datos necesarios para el envío, y si es así le mostraremos una previsualización de la postal y le daremos la oportunidad de enviarla o volver atrás para corregirla.
enviarpostal.asp En este modulo llamaremos a ASPEmail y confeccionaremos y enviaremos la postal

Módulos de la aplicación

Apuntes sobre el código:

  • DEFAULT.ASP

  • Como comentamos anteriormente, el código hace una doble función, si al capturar la variable tema a través de request.form(«tema») esta esta vacía, mostramos un formulario para poder elegir el tema de la postal, en caso contrario, mostramos todas la imágenes sobre el tema elegido.

  • En las variables urlfoto y urlminiatura guardamos la dirección relativa de los directorios que contienen nuestras imágenes

  • CONFIRMAPOSTAL.ASP

  • En este modulo comprobamos que ninguna de las variables recibidas desde default.asp esta vacía, si alguna lo esta, emitimos un mensaje de error y no mostramos la previsualización de la postal.

  • Utilizamos la función comentarios=replace(request.form(«comentarios»),chr(10),»<br>»)para sustituir los saltos de línea de teclado por etiquetas <br>

Defaul.asp

<html> <head> <title>Envio de E-Postales</title> </head> <body> <%urlfoto="images/" urlminiatura="images/miniaturas/" tema=request.form("tema")%> <center> <div align="center"> <center> <table border="0" width="80%"> <tr> <td width="100%" align="center"><font color="#0000FF" size="5"> Envió de E-Postales</font> <p>&nbsp;</p> </td></tr> <tr> <td width="100%" align="center" bgcolor="#D9F8FF"> <%Set Conna = Server.CreateObject("ADODB.Connection") 'nota: la cadena de conexión debe de ir en una sola línea, aqui esta cortada por diseño
Conna.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\TudirBd\postales.mdb")) 
set rs=createobject("ADODB.Recordset") if tema="" then sqltxt="SELECT distinct tema from postales" rs.open sqltxt,conna%> <p align="left">Elige un tema para tu postal:</p> <form method="POST" action="default.asp"> <p align="center"><select size="1" name="tema"> <%do while not rs.eof %>  <option><%=rs("tema")%></option> <%rs.movenext loop rs.close set rs=nothing%>  </select><input type="submit" value="Seleccionar" name="B1"></p> </form> <p><br>  <%else sqltxt="SELECT * from postales where tema like '%"&tema&"%' order by id" rs.open sqltxt,conna%> </p> <p align="left"><font color="#0000FF">Tema:</font><font color="#00FFFF"> </font> <%=tema%></p> <p align="left">Elige una imagen para tu postal:</p> <form method="POST" action="confirmapostal.asp"> <table border="0" width="100%" bgcolor="#55B5F1"><tr> <%contador=0 do while not rs.eof contador = contador+1 if contador >3 then contador=1%>  </tr><tr> <%end if %> <td width="33%" align="center"> <p align="center"><img border="0" src="<%=urlminiatura%><%=rs("url")%>" >
<input type="radio" value="<%=rs("id")%>" name="id" checked></td> <%rs.movenext loop rs.close set rs=nothing%> </tr> </table> <p align="left">&nbsp;</p> <table border="1" width="100%" bgcolor="#C0C0C0" bordercolor="#FFFFFF"> <tr> <td width="30%"><font color="#0000FF" size="2">Tu nombre:</font></td> <td width="70%"><input type="text" name="nombre" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Tu email:</font></td> <td width="70%"><input type="text" name="email" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Nombre de tu amigo:</font></td> <td width="70%"><input type="text" name="amigo" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Email de tu amigo:</font></td> <td width="70%"><input type="text" name="emailamigo" size="45"></td> </tr> </table> <p align="left">Que le contamos:</p> <p align="center"><textarea rows="2" name="comentarios" cols="53"></textarea></p> <p align="center"><input type="submit" value="continuar ->" name="B1"></p> </form> <%end if%> </td> </tr> <tr> <td width="100%" align="center">&nbsp;</center> </center> <p align="right"><font size="1"> Código proporcionado por :&nbsp; <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a></font></td> </tr> </table> </div> </body> </html>  

Confirmapostal.asp

<%if request.form("id")="" then response.redirect "default.asp" end if urlfoto="images/" urlminiatura="images/miniaturas/"%> <html> <head> <title>Envio de E-Postales</title> </head> <body> <div align="center"> <center> <table border="0" width="80%" bgcolor="#D9F8FF"> <tr> <td width="100%"> <%for each v_entrada in request.form for indice=1 to request.form(v_entrada).count if request.form(v_entrada)(indice) = "" then mal=1%> <font color="#FF00FF">El campo <%=v_entrada%> no puede estar vacio</font><br> <%end if next next if mal <> 1 then Set Conna = Server.CreateObject("ADODB.Connection") 
'nota: la cadena de conexión debe de ir en una sola línea, aqui esta cortada por diseño
Conna.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\TudirBd\postales.mdb")) 
 set rs=createobject("ADODB.Recordset") sqltxt="SELECT * from postales where id="&request.form("id") rs.open sqltxt,conna url=rs("url") rs.close set rs=nothing %> <h3 align="center"><font color="#FF0000">Esta es la postal que vas a enviar</font></h3> <div align="center"> <center> <table border="0" width="500" background="images/rayasgrises.gif"> <tr> <td width="642" colspan="2"> &nbsp; </td> </tr> <tr> <td width="93" bgcolor="#66CCFF">&nbsp;</td> <td width="543">&nbsp; <table border="0" width="100%" cellspacing="5" bgcolor="#FFFFFF"> <tr> <td><img border="0" src="<%=urlfoto%><%=url%>" align="left"></td> <%'cambiamos los saltos de carro por <br> comentarios=replace(request.form("comentarios"),chr(10),"<br>") 'Ponemos la primera letra en mayusculas inicial=ucase(mid(request.form("comentarios"),1,1)) 'Asignamos a la variable comentarios el resto de la cadena comentarios=mid(comentarios,2) %> <td valign="top">&nbsp;<i> <font color="#FF00FF" size="7"> <%=inicial%></font></i><%=comentarios%></td> </tr> <tr> <td width="100%" colspan="2"><font color="#FF0000">De:</font> <a href="mailto:<%=request.form("email")%>"><%=request.form("nombre")%></a><br> <font color="#FF0000">Para:</font> <%=request.form("amigo")%> (<%=request.form("emailamigo")%>)</td> </tr> </table> <p>&nbsp;</p> </td> </tr> </table> </center> </div> &nbsp; <div align="center"> <center> <table border="0" width="50%"> <tr> <td width="50%" valign="top"> <p align="center">No me gusta, quiero corregirla</td> <td width="50%" valign="top"> <p align="center">Me gusta,<br> envíala</td> </tr> <tr> <td width="50%" valign="top" align="center"> <a href="javascript:window.history.back()"> <img border="0" src="../images/atras.gif"></a></td> <td width="50%" valign="top" align="center"> <form method="POST" action="enviarpostal.asp"> <input type="hidden" name="comentarios" size="20" value="<%=request.form("comentarios")%>"> <input type="hidden" name="nombre" size="20" value="<%=request.form("nombre")%>"> <input type="hidden" name="email" size="20" value="<%=request.form("email")%>"> <input type="hidden" name="amigo" size="20" value="<%=request.form("amigo")%>"> <input type="hidden" name="emailamigo" size="20" value="<%=request.form("emailamigo")%>"> <input type="hidden" name="url" size="20" value="<%=url%>"> <input type="hidden" name="id" size="20" value="<%=request.form("id")%>"> <p><input border="0" src="../images/adelante.gif" name="I1" type="image"></p> </form> &nbsp;</td> </tr> </table> </center> </div> <%else%> <p align="center"><a href="javascript:window.history.back()"> <img border="0" src="../images/atras.gif"></a></p> <%end if%></td> </tr> <tr> <td width="100%">&nbsp; <p align="right"> <font size="1">Código proporcionado por :&nbsp; <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a> </font></td> </tr> </table> </center> </div> </body> </html>  

Un Sistema de postales Virtuales en ASP (IV)

Módulos de la aplicación

Apuntes sobre el código:

  • ENVIARPOSTAL.ASP

  • En las variables urlfoto y urlminiatura guardamos la dirección ABSOLUTA de los directorios que contienen nuestras imágenes. Tener en cuenta que cuando alguien reciba la postal, todas las referencias a objetos de la red (URL’s, tanto de imágenes como hipervinculos) que se incluyan en esta deberán ser en ABSOLUTO (http://www.tuweb.com/&#8230;.) , de otra forma no podría visualizarlas

  • Tendréis que configurar las variables de ASPEmail con los datos de vuestro servidor.

Enviarpostal.asp

 <% id=request.form("id") if id = "" then response.redirect "default.asp" end if urlfoto="http://www.tuweb.com/postales/images/" urlminiatura="http://www.tuweb.com/postales/images/miniaturas/" 'cambiamos los saltos de carro por <br> comentarios=replace(request.form("comentarios"),chr(10),"<br>") 'Ponemos la primera letra en mayusculas inicial=ucase(mid(request.form("comentarios"),1,1)) 'Asignamos a la variable comentarios el resto de la cadena comentarios=mid(comentarios,2) strHost = "mail.tuweb.com" Set Mail = Server.CreateObject("Persits.MailSender") Mail.Host = strHost Mail.From = "webmaster@tuweb.com" Mail.FromName = request.form("nombre") Mail.AddReplyTo request.form("email") Mail.AddAddress request.form("emailamigo") titulo=Request.form("Nombre")&" te envia una e-postal" Mail.Subject = titulo Mail.IsHTML = True mensaje="<html><head>" mensaje=mensaje & "<title>Una E-postal para ti</title>"&vbcrlf mensaje=mensaje & " </head><body><div align=center>"&vbcrlf mensaje=mensaje & "<center> "&vbcrlf mensaje=mensaje & "<table border=0 width=652 " mensaje=mensaje & " background=http://www.tuweb.com/images/rayasgrises.gif> "&vbcrlf mensaje=mensaje & " <tr>"&vbcrlf mensaje=mensaje & " <td width=93 bgcolor=#66CCFF>&nbsp;</td>"&vbcrlf mensaje=mensaje & " <td width=543>&nbsp;"&vbcrlf mensaje=mensaje & " <table border=0 cellspacing=5 bgcolor=#FFFFFF>"&vbcrlf mensaje=mensaje & " <tr> <td ><img border=0 src="&urlfoto&request.form("url")&">"&vbcrlf mensaje=mensaje & " <td valign=top>"&vbcrlf mensaje=mensaje & " &nbsp;&nbsp;&nbsp;<i><font color=#FF00FF size=7>" mensaje=mensaje & inicial&"</font></i>"&comentarios&vbcrlf mensaje=mensaje & "</td> </tr>"&vbcrlf mensaje=mensaje & " <tr>"&vbcrlf mensaje=mensaje & "<td colspan=2> "&vbcrlf mensaje=mensaje & " <font color=#FF0000>De:</font>"&vbcrlf mensaje=mensaje & " <a href=mailto:"& request.form("email")&">" mensaje=mensaje & request.form("nombre")&" </a><br>"&vbcrlf mensaje=mensaje & "<font color=#FF0000>Para:</font> "&vbcrlf mensaje=mensaje & request.form("amigo")&"("&request.form("emailamigo")&")"&vbcrlf mensaje=mensaje & " </td> </tr></table><p>&nbsp;</p> </td></tr>"&vbcrlf mensaje=mensaje & " </table>"&vbcrlf mensaje=mensaje & " </center>"&vbcrlf Mail.Body = mensaje Mail.Send %> <html> <head> <title>Envio de E-Postales</title> </head> <body> <p align="center">&nbsp;</p> <h3 align="center"><font color="#FF0000">Postal enviada correctamente</font></h3> <p align="center"><a href="default.asp">Enviar otra</a></p> <p align="center">&nbsp; <font size="1">Código proporcionado por :&nbsp; <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a> </font> </body> </html>