martes, 15 de mayo de 2012


Función en ASP 2, para envío de correo SIN AUTENTICACIÓN, 
En esta ocasión les comparto una función en ASP que utiliza un componente de Persits, lo pueden descargar directo de su pagina web, sin embargo el componente es comercial, pero nos permite el envío de correo sin problema siempre y cuando no requiera autenticación, así que se vuelve en el componente ideal toda vez que se trate de estas mismas circunstancias,
nota: el componente realmente trabaja también con autenticación, solamente que para que funcione con atenticación en el servidor requiere la versión con licencia

<%
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
dim comentarios,fecha,rating
comentarios=Request.QueryString("com")
destino=Request.QueryString("des")
origen=Request.QueryString("ori")
registro=Request.QueryString("reg")
subject = Request.QueryString("sub")
copia = request.QueryString("cc")
set mail = server.createObject("Persits.MailSender")
mail.Host = "smtp.gmail.com"
'Mail.Username = “micorreo@midominio.com”
'Mail.Password = "mipassword"
Mail.Port = 587
mail.from = origen
'mail.html = true
mail.addAddress destino
mail.body = comentarios&" "
mail.subject = subject
'Si requiere colocar copia del mensaje
'Mail.AddCC copia
'Mail.AddBcc  “micopia@otrodominio.com”

On Error Resume Next
  mail.send
 
if Err <>0 then
   
response.write "Error, no se ha podido enviar, "
   
response.write Err.Number & ", "
   
response.write Err.Description & ", "
   
response.write Err.Source & ", "
 
else
    response.write
";)"
  end if
%>

Esta función se puede mandar llamar de este modo:
http://../sendMail.asp?com=’Mensaje’&des=correo1@dominio.com&ori=correo2@dominio.com&sub=’TituloDelCorreo’



Función en VB.Net para enviar correo con una cuenta GMAIL a traves de SSL con Smtp.Client
Es comun que tras encontrar alguna excepcion en tu codigo requieras enviar un aviso, o simplemente necesites contar con una notificación via correo electronico del status de algun proceso, esta es una funcion que puede ayudarte si es el caso!

Sub envia_correo(ByVal origen As StringByVal destino As StringByVal subject As StringByVal mensaje As String)
        Dim SmtpObj As New System.Net.Mail.SmtpClient
        Dim MailNachricht As New System.Net.Mail.MailMessage()
        'Esta linea la lleva solo si requiere autenticacion
        SmtpObj.Credentials = New System.Net.NetworkCredential("usuario@gmail.com""tupassword")
        'en caso de que el servidor requiera SSL, se coloca en true
        SmtpObj.EnableSsl = True
        'Este es un puerto para SSL, si no lleva el puerto puede ser 25
        SmtpObj.Port = 465

        'Direccion del servidor SMTP ( para enviar correo)
        SmtpObj.Host = "smtp.gmail.com"
        'Aqui  formamos el mensaje con los parametros que nos envien, y la codificacion en UTF8
        With MailNachricht
            .From = New System.Net.Mail.MailAddress(origen)
            .BodyEncoding = System.Text.Encoding.UTF8
            .To.Add(destino)
            .Subject = subject
            .IsBodyHtml = False
            .Body = mensaje
        End With

        MailNachricht.Attachments.Clear()
        Try
            'Envio del mensaje
            SmtpObj.Send(MailNachricht)
        Catch ex As Exception
            'Si hay alguna excepcion aqui se toma! ( Algun error)
        End Try
    End Sub


espero que sea de utilidad!
att:pbm

lunes, 9 de abril de 2012

Lenguaje: Pascal ( Delphi 7)
Este es un procedimiento que muestra la forma en la que se llama precisamente un procedimiento almacenado en MySQL 5 y se invoca sin los componentes habituales para aprovechar una conexión ADO
(Nota: utilice un DataModule, con un componente de conexion en ADO pero tambien se puede naturalmente realizar al vuelo)




procedure tprincipal.actualiza_importe_impuestos(oficina:string);
var sqlBorrar,sqlInsertarImporte,conexion,c:string;
borrar:TADOQuery;
begin
c:='''';
sqlInsertarImpo:=' CALL basededatos.Genera_Impuestos("'+oficina+'",sysdate()); ';

CONEXION := 'Provider=MSDASQL.1;Extended Properties="DRIVER={MySQL ODBC 5.1 Driver};DESC=;DATABASE=basededatos;SERVER=localhost;UID=elusuario;PASSWORD=tupassword;PORT=;SOCKET=;OPTION=16427;STMT=;"';
dm.adocon.connected:=false;
 dm.adocon.connectionString:=CONEXION;
 dm.adocon.connected:=true;

Borrar:= TADOQuery.Create(nil);
   Borrar.Connection:=dm.adocon;
      Borrar.SQL.Text := sqlInsertarImpo;
      Borrar.execSQL;
      Borrar.Close;
      Borrar.Free;
dm.adocon.connected:=false;

/* Despues de esto hago mas cosas que no publique :P*/

end;



Lenguaje: Action Script 2.0 ( Flash)
Ejemplo: Clase "Estadístico", esta clase es un pequeño ejemplo
para guardar una serie de datos y determinar algunos calculos 
como el valor mayor, el menor, los porcentajes etc.
 ( Nota: AS2, es muy parecido a C++ :P vdd?)


class Estadistico  {
                private var Valores:Array;
                private var Media:Number;
                private var ValorMayor:Number;
                private var ValorMenor:Number;
                private var Moda:Number;
                private var Porcentajes:Array;
                private var PorcentajeMayor:Number;
                private var PorcentajeMenor:Number;
                public static var SumaTotal:Number;
                public function Estadistico(valores:Array) {
                               Valores = valores;
                               SumaTotal=0;
                               PorcentajeMayor=0;
                               PorcentajeMenor=0;
                               Calculos();
                }
                private function Calculos():Void {
                               var i:Number;
                               var Porcentaje:Number;
                               SumaTotal = SumaValores();
                               //trace("ST:"+String(SumaTotal));
                               Porcentaje = 0;
                               PorcentajeMayor = 0;
                               PorcentajeMenor = Valores[0];
                               ValorMayor = Valores[0];
                               ValorMenor = Valores[0];
                               for (i=0; i<Valores.length; i++) {
                                               //trace(i+":"+Valores[i]);

                                               Porcentaje = (Valores[i]/SumaTotal)*100;
                                               Porcentajes[i] = Porcentaje;
                                               //trace("Por:"+Porcentaje);
                                               if (Porcentaje>PorcentajeMayor) {
                                                               PorcentajeMayor = Porcentaje;
                                               }
                                               if (Porcentaje<PorcentajeMenor) {
                                                               PorcentajeMenor = Porcentaje;
                                               }
                                               //Valores[i] = 0;
                                               if (Valores[i]>ValorMayor) {
                                                               ValorMayor = Valores[i];
                                               }
                                               if (Valores[i]<ValorMenor) {
                                                               ValorMenor = Valores[i];
                                               }
                                              
                               }
                }
                private function SumaValores():Number {
                               var i:Number;
                               for (i=0; i<Valores.length; i++) {
                                               SumaTotal += Valores[i];
                               }
                               return SumaTotal;
                }
                public function PMayor():Number {
                               return PorcentajeMayor;
                }
                public function ValMayor():Number {
                               return ValorMayor;
                }
                               public function ValMenor():Number {
                               return ValorMenor;
                }
                public function PMayorTrunc():Number {
                               return int(PorcentajeMayor*100)/100;
                              
                }
                public function PMenor():Number {
                               return PorcentajeMenor;
                }
                public function STotal():Number {
                               return SumaTotal;
                }
}

jueves, 5 de abril de 2012

Función que recibe una imagen y modifica las propiedades, escala de grises, resolución, calidad, etc y retorna como un arreglo de Bytes

Es común que al momento de trabajar con imágenes necesitemos realizar un ajuste de calidad, la resolución o escala de grises, respecto a este problema aqui tenemos una funcion que diseñe algunos años con varios bloques comentados segun la necesidad de cada quien, en su momento utilice cada uno de estos bloques y los fui comentando solamente :P


    Public Shared Function BmpToBytes_MemStream(ByVal img As Image) As Byte()
        'Esta configuracion reduce el tamaño en mas de un 70% del PDF
        '----------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Default

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

        'MOD:2 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 60%
        '-----------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Default

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality


        'MOD:3 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 55%
        '-------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.Half

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:4 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un 55%
        '--------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:5 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '-------------------------------------------------------------------
        'Dim imagen As New Bitmap(782, 1070, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality


        'MOD:6 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '---------------------------------------------------------------------------------------
        'Dim imagen As New Bitmap(950, 1300, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:7 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '---------------------------------------------------------------
        'ESTA ES LA IDEAL
        Dim imagen As New Bitmap(1024, 1402, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        Dim new_g As Graphics = Graphics.FromImage(imagen)

        new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        'MOD:8 Esta confiracion mejorara la calidad y aumentará el tamaño del los archivos PDF, 
        'reduce el tamaño en un ?%
        '----------------------------------------------------------
        'Dim imagen As New Bitmap(1600, 2190, System.Drawing.Imaging.PixelFormat.Format64bppPArgb)
        'Dim new_g As Graphics = Graphics.FromImage(imagen)

        'new_g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality

        'new_g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear
        'new_g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

        new_g.DrawImage(img, 0, 0, imagen.Width, imagen.Height)
        img = imagen

        Dim sTemp1 As String

        sTemp1 = System.IO.Path.GetTempFileName()
        System.IO.File.Delete(Path.GetTempFileName())

        Dim fs As New FileStream(sTemp1, FileMode.OpenOrCreate)

        img.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg)

        fs.Position = 0

        Dim imgLength As Integer = CInt(fs.Length)
        Dim bytes(0 To imgLength - 1) As Byte
        fs.Read(bytes, 0, imgLength)

        fs.Close()
        'Eliminar el archivo temporal para no saturar el disco duro
        System.IO.File.Delete(Path.GetTempFileName())
        Return bytes
    End Function

miércoles, 4 de abril de 2012

Función para iTextSharp en VB.net que recibe un DataSet y retorna una Tabla en cierta coordenada X Y

Esta es una funcion muy sencilla para mandar imprimir a traves de coordenadas cartesianas una matriz de datos de un DataSet,

Paso 1.

Verificar que nuestra dll ( libreria de iTextSharp) se encuentra en el directorio del proyecto








Paso 2.

Ingresar las librerias del iTextSharp como se indica
Imports iTextSharp.text
Imports iTextSharp.text.pdf

Paso 3

Esta es la funcion y su llamado
Sub agregar_tablaPDF_XY(ByRef datos As DataTable, ByVal x As Integer, ByVal y As Integer, ByVal cb As PdfContentByte, ByVal BF_Times As BaseFont, ByVal Espx As Int32, ByVal Espy As Int32)
        Dim nc, nf, nfila As Integer
        Dim indX As Int32 = x
        Dim indY As Int32 = y
        Dim posx As Int32 = x
        Dim posy As Int32 = y


        For nf = 0 To datos.Rows.Count
            indX = x
            For nc = 0 To datos.Columns.Count - 1
                If nf = 0 Then

             coloca_textoxy(datos.Columns(nc).ColumnName, cb, BF_Times, indX, indY)
                Else
                    nfila = nf - 1
            coloca_textoxy(datos(nfila)(nc).ToString(), cb, BF_Times, indX, indY)
                End If
                indX += Espx
            Next
            indY -= Espy
        Next
     End Sub

Sub coloca_textoxy(ByVal valor As String, ByVal cb As PdfContentByte, ByVal BF_Times As BaseFont, ByVal x As Int32, ByVal y As Int32)
cb.BeginText()
cb.SetFontAndSize(BF_Times, 8)   
cb.SetTextMatrix(x, y)        cb.ShowText(valor)        cb.EndText()
End Sub 

Esta es la forma en la que se manda llamar la funcion
agregar_tablaPDF_XY(dsDetalle, 80, 610, cb, BF_Times, 50, 12)

Es un ejemplo muy sencillo, pero practico
un saludo