Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

ejemplos de builder 6 sobre smtp y pop3
Ir a página Anterior  1, 2, 3  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Responder citando

Tendrías que enviar antes del texto HTML un TIdText de tipo "text/plain", ya que si no lo haces toma por defecto el primero que añadas de esta manera aunque le especifiques "text/html".

Yo he probado de la siguiente manera, usando una cuenta de Terra para hacer el envío hacia una cuenta de Telefónica y otra de Gmail y me ha funcionado correctamente. (Aunque no uso el Thunderbird sino el Outlook Express):
Código:
String fitxerAt = "c:\\windows\\web\\wallpaper\\luna.jpg";

TStringList *cos = new TStringList;
cos->Append("<html><head><title>prueba</title><body><p>Prueba<br>");
cos->Append("<img src=\"cid:" + ExtractFileName(fitxerAt) + "\">");
cos->Append("</body></html>");

TIdText *text = new TIdText(IdMessage1->MessageParts, 0);
IdMessage1->MessageParts->Add();
text->Body->Text = "Texto plano...";
text->ContentType = "text/plain";

TIdText *html = new TIdText(IdMessage1->MessageParts, cos);
IdMessage1->MessageParts->Add();
html->ContentType = "text/html";

TIdAttachment *att = new TIdAttachment(IdMessage1->MessageParts, fitxerAt);
IdMessage1->MessageParts->Add();
att->ContentType = GetMIMETypeFromFile(fitxerAt);
att->FileName = ExtractFileName(fitxerAt);
att->ExtraHeaders->Values["content-id"] = ExtractFileName(fitxerAt);

IdMessage1->Subject = "Mensaje de prueba";
IdMessage1->From->Address = "miCuenta@terra.es";
TIdEMailAddressItem* dest = IdMessage1->Recipients->Add();
dest->Address = "destino@dominio.com";

IdSMTP1->Username = "miCuenta.terra.es";
IdSMTP1->Password = "miClave";
IdSMTP1->Host = "smtp.terra.es";
IdSMTP1->AuthenticationType = atLogin;

__try
{
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
}
__finally
{
    if(IdSMTP1->Connected())
        IdSMTP1->Disconnect();
    IdMessage1->Clear();
    IdMessage1->MessageParts->Clear();
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Hostia!! Responder citando

Muchisimas Gracias. No tengo palabras.

Funciona perfecto, lo del GetMIMETypeFromFile es cojonudo!
Total que he provado y funciona , ahora si ,el formato HTML en los clientes como Thunderbird.

Yo uso las 2 dll para poder enviarmensajes desde Google
ssleay32.dll ... que lei que era necessario, lo que no sabia es que sin ellas tambien se podia enviar con autentificación.
Entiendo pues que cada cuenta tiene sus cosas.

Gracias. Ahora envio mensajes perfectamente; ya se que sin duda lo mio es abusar pero esta rutina de envio de emails la utilizo para recorrer una serie de direcciones y aunque no me es ni mucho menos urgente ni nada de eso me gustaria saber qual es la manera en Builder de poder evitar que el programa entre en un estado de no responder cuando estamos realizando tareas como la de enviar 100 emails de golpe, o uploads multiples etc....

Yo siempre miro de usar Application->ProcessMessages(); dentro del bucle , pero aun y con eso la aplicación parece colgada hasta el final de la tarea.

Bueno que esto segundo es abuso, ya estoy mirando Thread's a ver si así consigo el efecto deseado.

Muchas Gracies Leo. Espero poder ayudarte yo algun dia, aunque seguramente no sera en nada de C++.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

amas escribió:
Yo uso las 2 dll para poder enviarmensajes desde Google
ssleay32.dll

Esas dlls son necesarias con cuentas que usan SSL, como es el caso de Gmail.

amas escribió:
qual es la manera en Builder de poder evitar que el programa entre en un estado de no responder cuando estamos realizando tareas como la de enviar 100 emails de golpe, o uploads multiples etc....

Una opción es añadir el componente "TIdAntiFreeze" (pestaña: Indy Misc), aunque lo que hace internamente es lo mismo que ya haces con el ProcessMessages.

amas escribió:
estoy mirando Thread's a ver si así consigo el efecto deseado

Creo que esta es la mejor opción, ejecutarlo en un hilo aparte.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola
he estado estado probando el ejemplo de _Leo sobre mandar el texto con la imagen pero me da errores siempre en que no puede load la imagen, la he puesto en formatos distintos y hasta en rar pero me da el mismo error
que tengo diferennte , si solo tengo el Idmessage y el IdSMTP?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

_Leo he estadotratando de entender este codigo que pones para mandar un mensaje en formato html , lo de la imagen adjunta no es lo que me preocupa, ya yo mande un mensaje en dicho formato con este codigo que dejas aca pero a pesar de que no hubo problemas , quiciera saber realmente como funciona ese codigo liena a linea si me lo puedes explicar por favor , porque no comprendo cuando debo mostrar el texto que me mandan en ul richedit y cuando en un cppwebbrowser
gracias
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Se añaden 2 partes, una en html (text/html) y otra alternativa de texto plano (text/plain). Y es el cliente de correo quien decide cual de las dos partes mostrara (la parte de texto plano se añade porque hay clientes que no pueden mostrar html).

No es obligatorio poner las dos partes. Aunque si se envía una parte en html es recomendable añadir una de texto plano por los clientes más antiguos o los que no puedan mostrar html.

Código:
    // La imagen que vamos a adjuntar
String fitxerAt = "c:\\windows\\web\\wallpaper\\luna.jpg";

    // Creamos el texto html de prueba
TStringList *cos = new TStringList;
cos->Append("<html><head><title>prueba</title><body><p>Prueba<br>");
cos->Append("<img src=\"cid:" + ExtractFileName(fitxerAt) + "\">");
cos->Append("</body></html>");

    // Adjuntamos una parte de texto plano al mensaje
TIdText *text = new TIdText(IdMessage1->MessageParts, 0);
IdMessage1->MessageParts->Add();
text->Body->Text = "Texto plano...";
text->ContentType = "text/plain";

    // Adjuntamos el código html del TStringList creado mas arriba
TIdText *html = new TIdText(IdMessage1->MessageParts, cos);
IdMessage1->MessageParts->Add();
html->ContentType = "text/html";

    // Adjuntamos la imagen a la que hacemos referencia mas arriba.
    // Nos fijamos en el apartado "content-id" que es lo que usaremos
    //   en el código html como "cid:" para hacer referencia a la imagen
TIdAttachment *att = new TIdAttachment(IdMessage1->MessageParts, fitxerAt);
IdMessage1->MessageParts->Add();
att->ContentType = GetMIMETypeFromFile(fitxerAt);
att->FileName = ExtractFileName(fitxerAt);
att->ExtraHeaders->Values["content-id"] = ExtractFileName(fitxerAt);

    // Rellenamos el asunto/remitente/destino del mensaje
IdMessage1->Subject = "Mensaje de prueba";
IdMessage1->From->Address = "miCuenta@terra.es";
TIdEMailAddressItem* dest = IdMessage1->Recipients->Add();
dest->Address = "destino@dominio.com";

    // Introducimos el usuario/clave/servidor smtp
IdSMTP1->Username = "miCuenta.terra.es";
IdSMTP1->Password = "miClave";
IdSMTP1->Host = "smtp.terra.es";
IdSMTP1->AuthenticationType = atLogin;

    // Conectamos con el servidor y enviamos el mensaje finalmente
__try
{
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
}
__finally
{
    if(IdSMTP1->Connected())
        IdSMTP1->Disconnect();
    delete cos;
    IdMessage1->Clear();
    IdMessage1->MessageParts->Clear();
}




Versión para Indy10 (o sea C++Builder 2009)
Código:
// Añadimos las siguientes cabeceras
#include <IdText.hpp>             // TIdText
#include <IdAttachmentFile.hpp>   // TIdAttachmentFile
#include <IdGlobalProtocols.hpp>  // GetMIMETypeFromFile(...)


    // La imagen que vamos a adjuntar
String fitxerAt = "c:\\windows\\web\\wallpaper\\luna.jpg";

    // Creamos el texto html de prueba
TStringList *cos = new TStringList;
cos->Append("<html><head><title>prueba</title><body><p>Prueba<br>");
cos->Append("<img src=\"cid:" + ExtractFileName(fitxerAt) + "\">");
cos->Append("</body></html>");

    // Adjuntamos una parte de texto plano al mensaje
TIdText *text = new TIdText(IdMessage1->MessageParts, 0);
IdMessage1->MessageParts->Add();
text->Body->Text = "Texto plano...";
text->ContentType = "text/plain";

    // Adjuntamos el código html del TStringList creado mas arriba
TIdText *html = new TIdText(IdMessage1->MessageParts, cos);
IdMessage1->MessageParts->Add();
html->ContentType = "text/html";
IdMessage1->ContentType = "multipart/alternative";

    // Adjuntamos la imagen a la que hacemos referencia mas arriba.
    // Nos fijamos en el apartado "content-id" que es lo que usaremos
    //   en el código html como "cid:" para hacer referencia a la imagen
TIdAttachmentFile *att = new TIdAttachmentFile(IdMessage1->MessageParts, fitxerAt);
IdMessage1->MessageParts->Add();
att->ContentType = GetMIMETypeFromFile(fitxerAt);
att->FileName = ExtractFileName(fitxerAt);
att->ExtraHeaders->Values["content-id"] = ExtractFileName(fitxerAt);

    // Rellenamos el asunto/remitente/destino del mensaje
IdMessage1->Subject = "Mensaje de prueba";
IdMessage1->From->Address = "miCuenta@terra.es";
TIdEMailAddressItem* dest = IdMessage1->Recipients->Add();
dest->Address = "destino@dominio.com";

    // Introducimos el usuario/clave/servidor smtp
IdSMTP1->Username = "miCuenta.terra.es";
IdSMTP1->Password = "miClave";
IdSMTP1->Host = "smtp.terra.es";
IdSMTP1->AuthType = satDefault;

    // Conectamos con el servidor y enviamos el mensaje finalmente
__try
{
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
}
__finally
{
    if(IdSMTP1->Connected())
        IdSMTP1->Disconnect();
    delete cos;
    IdMessage1->Clear();
    IdMessage1->MessageParts->Clear();
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Aunque la versión para Indy10 (C++Builder 2009) que pongo arriba funciona correctamente, pongo aquí una versión alternativa que creo que es más fácil, haciendo uso de la nueva clase "TIdMessageBuilderHtml":
Código:
// Añadimos las siguientes cabeceras
#include <IdMessageBuilder.hpp>   // TIdMessageBuilderHtml
#include <memory>                 // std::auto_ptr


    // La imagen que vamos a adjuntar
String fitxerAt = "c:\\windows\\web\\wallpaper\\luna.jpg";

std::auto_ptr<TIdMessageBuilderHtml> mb(new TIdMessageBuilderHtml);
    // Adjuntamos una parte de texto plano al mensaje
mb->PlainText->Add("Texto plano...");
    // Adjuntamos código html
mb->Html->Add("<html><head><title>prueba</title><body><p>Prueba<br>");
mb->Html->Add("<img src=\"cid:" + ExtractFileName(fitxerAt) + "\">");
mb->Html->Add("</body></html>");
    // Adjuntamos la imagen a la que hacemos referencia en el código html
mb->HtmlFiles->Add(fitxerAt);
    // Rellenamos el TIdMessage con todos estos datos
mb->FillMessage(IdMessage1);

    // Rellenamos el asunto/remitente/destino del mensaje
IdMessage1->Subject = "Mensaje de prueba";
IdMessage1->From->Address = "miCuenta@terra.es";
TIdEMailAddressItem* dest = IdMessage1->Recipients->Add();
dest->Address = "destino@leosoftware.com";

    // Introducimos el usuario/clave/servidor smtp
IdSMTP1->Username = "miCuenta.terra.es";
IdSMTP1->Password = "miClave";
IdSMTP1->Host = "smtp.terra.es";
IdSMTP1->AuthType = satDefault;

    // Conectamos con el servidor y enviamos el mensaje finalmente
try {
    IdSMTP1->Connect();
    IdSMTP1->Send(IdMessage1);
}
__finally {
    if(IdSMTP1->Connected())
        IdSMTP1->Disconnect();
    IdMessage1->Clear();
}


Ultima edición por _Leo el Mar 20 Ene, 2009 1:11 am, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo las dos formas que me mandas esta perfectas, gracias, ahora veamos

tengo un form con un memo o richedit, un cppwebbrowser y:
1 me mando el mensaje con el formato que me has dado(en thubderbirth, outlook) se ve perfecto,
2 recibo el mensaje a trves de mi aplicacion y el texto ( solo el texto por qu eno se guardar el adjunto) lo guardo en el memo o richedit ,
3 tengo un prueba.html en la raiz de C , un fichero previo para guardar el texto
4 le paso el valor del memo al prueba.html
memo1->Lines->savetofile("c:\\prueba.html");
5 trato de mostrar lo qu ehay en el prueba.html en el webbrowser
TVariant ruta = "c:\\prueba.html";
CppWebBreoser->Navigate2(&ruta);
y me sale lo siguiente tanto en el memo como en el webbrowser
This is a multi-part message in MIME format

This is a multi-part message in MIME format


que puede ser esto ?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Un ejemplo de como descargar cada una de las partes del mensaje:
Código:
// En caso de estar usando C++Builder2009 añadir:  #include<IdText.hpp>

// Conectamos con nuestra cuenta POP3
IdPOP31->Host = "pop3.dominio.es";
IdPOP31->Username = "miCuenta.dominio.es";
IdPOP31->Password = "miClave";
IdPOP31->Connect();

// Si hay mensajes, descargamos el primero
if (IdPOP31->CheckMessages() > 0)
{
    // Leemos el mensaje
    IdMessage1->Clear();
    const int msgNum = 1;
    IdPOP31->Retrieve(msgNum, IdMessage1);

    // Comprobamos si es un mensaje con multiples partes y las descargamos
    if (IdMessage1->MessageParts->Count > 0)
    {
        for (int i=0; i<IdMessage1->MessageParts->Count; i++)
        {
            TIdMessagePart* part = IdMessage1->MessageParts->Items[i];
            TIdText* IdText = dynamic_cast<TIdText*>(part);
            TIdAttachment* IdAttachment = dynamic_cast<TIdAttachment*>(part);
            if (IdText)
            {
                // Si es una parte de texto la descargamos como "texto.txt"
                if (IdText->ContentType.Pos("text/plain"))
                    IdText->Body->SaveToFile("texto.txt");
                // Si es html como "prueba.html"
                else if (IdText->ContentType.Pos("text/html"))
                    IdText->Body->SaveToFile("prueba.html");
            }
            // Y el resto de ficheros adjuntos
            else if (IdAttachment)
                IdAttachment->SaveToFile(IdAttachment->FileName);
        }
    }
    else
        IdMessage1->Body->SaveToFile("texto.txt");

    // Despues de leer el mensaje lo borramos del buzon
    IdPOP31->Delete(msgNum);
}
else
    ShowMessage("No hay mensajes.");

IdPOP31->Disconnect();
ShowMessage("OK");
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo gracias por responderme
pero ahora hay un problema , ya tengo configurado el internet explorer(porque segun tengo entendido el webbrowser trabaja con el motor de ie) pero cuando cargo el prueba.html este no me pide autentificacion para mostrar la imagen, como puedo mostrar la imagen en el webrowser?
otra duda que me surge, que es el cid que viene con la imagen adjunta y que funcion realiza?
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

ifrit escribió:
que es el cid que viene con la imagen adjunta y que funcion realiza

Ya lo explicaba más arriba en el código:
_Leo escribió:
Código:
    // Adjuntamos la imagen a la que hacemos referencia mas arriba.
    // Nos fijamos en el apartado "content-id" que es lo que usaremos
    //   en el código html como "cid:" para hacer referencia a la imagen

Vamos a ponerlo un poco mas fácil, en esta versión sustituimos los "cid:" por los nombres de las imágenes:
Código:
// Conectamos con nuestra cuenta POP3
IdPOP31->Host = "pop3.dominio.es";
IdPOP31->Username = "miCuenta.dominio.es";
IdPOP31->Password = "miClave";
IdPOP31->Connect();

// Si hay mensajes, descargamos el primero
if (IdPOP31->CheckMessages() > 0)
{
    // Leemos el mensaje
    IdMessage1->Clear();
    const int msgNum = 1;
    IdPOP31->Retrieve(msgNum, IdMessage1);

    // Comprobamos si es un mensaje con multiples partes y las descargamos
    if (IdMessage1->MessageParts->Count > 0)
    {
        TStrings* slHtml = 0;
        for (int i=0; i<IdMessage1->MessageParts->Count; i++)
        {
            TIdMessagePart* part = IdMessage1->MessageParts->Items[i];
            TIdText* IdText = dynamic_cast<TIdText*>(part);
            TIdAttachment* IdAttachment = dynamic_cast<TIdAttachment*>(part);
            if (IdText)
            {
                // Si es una parte de texto la descargamos como "texto.txt"
                if (IdText->ContentType.Pos("text/plain"))
                    IdText->Body->SaveToFile("texto.txt");
                // Si es html lo guardamos temporalmente para
                // sustituir mas abajo los identificadores (cid:)
                // por los nombres de los archivos
                else if (IdText->ContentType.Pos("text/html"))
                    slHtml = IdText->Body;
            }
            // Y el resto de ficheros adjuntos
            else if (IdAttachment)
            {
                String ContentId = IdAttachment->Headers->Values["Content-ID"];
                // Content-ID a veces esta entre <...> (los quitamos)
                TReplaceFlags rf = TReplaceFlags() << rfReplaceAll;
                ContentId = StringReplace(ContentId, "<", "", rf);
                ContentId = StringReplace(ContentId, ">", "", rf);
                // Sustituimos el cid: por el nombre del archivo
                if (slHtml && !ContentId.IsEmpty()) {
                    ContentId = "cid:" + ContentId;
                    slHtml->Text = StringReplace(slHtml->Text,
                        ContentId, IdAttachment->FileName, rf);
                }
                IdAttachment->SaveToFile(IdAttachment->FileName);
            }
        }

        if (slHtml)
            slHtml->SaveToFile("prueba.html");
    }
    else
        IdMessage1->Body->SaveToFile("texto.txt");

    // Despues de leer el mensaje lo borramos del buzon
    IdPOP31->Delete(msgNum);
}
else
    ShowMessage("No hay mensajes.");

IdPOP31->Disconnect();
ShowMessage("OK");


¡¡Importante!! si usamos este ejemplo en una versión anterior a la 2009 asegurarnos de que tenemos una versión actualizada de Indy9, ya que en las versiones viejas "IdAttachment->Headers->Values["Content-ID"];" devuelve una cadena vacía y por tanto no se sustituirán los "cid:".
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo me parece perfecto gracias por la aclaracion y como siempre mis respetos

Wink arriba el foro
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

_leo gracias po rresponderme
pero aun con dudas.]
las dudas que te planteare es con la cabecerea
#include <IdMessageBuilder>
1-cuando voy a mandar un email a varios usuarios como le haria, en el ejemploque mem mandas es para uno solo, antes yo hacia esto:
IdMessage1->Recipients->Items[0]->Name = "NOMBRE DESTINO";
IdMessage1->Recipients->Items[0]->Address = "EMAIL DESTINO";
y segun el item[i], eranlos destinos
2-como agrego adjuntos que no sean imagenes en el texto , sino adjuntos como un .rar etc.
3-habeces me entra la duda como cuando se crea una lista de destinatarios que estan siempre separados por "," ejemplo: pepe@.com, maria@.cu..etc el programa sabe que es a todos ellos a los que hay que mandarles el correo. Eso lo programamos nosotros o el componente se encarga de comprenderlo el mismo?
4-segun estaba tratando de comprender el codeigo que me das es en html y estuve estudiando algo de html para poder mandar emails con formato y resolvi algo, pero nunca vi el cid en el codigo html , sino que para mandar una imagen ponia algo como
imag src ="nombre de la foto.extencion = "foto"
asi que aun me quedo sin comprender que hace el cid

espero me puedas ayudar gracias
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

1.- Eso no ha cambiado, lo puedes seguir haciendo como lo hacías:
Código:
    IdMessage1->Recipients->Add();
    IdMessage1->Recipients->Items[0]->Name = "NOMBRE DESTINO";
    IdMessage1->Recipients->Items[0]->Address = "EMAIL DESTINO";
    IdMessage1->Recipients->Add();
    IdMessage1->Recipients->Items[1]->Name = "NOMBRE DESTINO 2";
    IdMessage1->Recipients->Items[1]->Address = "EMAIL DESTINO 2";
O bien como lo hago yo mas arriba:
Código:
    TIdEMailAddressItem* dest = IdMessage1->Recipients->Add();
    dest->Name = "NOMBRE DESTINO";
    dest->Address = "EMAIL DESTINO";
    dest = IdMessage1->Recipients->Add();
    dest->Name = "NOMBRE DESTINO";
    dest->Address = "EMAIL DESTINO";

2.- Tomando como referencia el ejemplo que ponía mas arriba, añadiríamos algo así:
Código:
mb->Attachments->Add("c:\\dir\\archivo.rar");

3.- Lo tienes que programar tu.

4.- El "CID" es porque en el email se necesita diferenciar si te estás refiriendo a una imagen adjunta o si te estás refiriendo a una imagen que está en el disco (la forma normal de HTML es para esto último).
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

A pesar de que _Leo me habrindadomucha ayuda con este tema (gracias infinitas) surgen las dudas , ahora es con las imagenes, pues segun el metodo que ha facilitado en este tema leo las imagenes se incertan al final del texto en html o al principo de este , pero ...
existe una forma de incertar una imagen en un lugar determinado y preciso del texto,
por ejemplo poner esta es laura (imagen al lado o abajo) blablabla esta es mi casa (imagen de la casa al lado). porqu elo digo porque resulta confuso par una persona que yo mande un correo y que diga este soy yo y este mi hermano y las imagenes esten por un lado y el texto por otro lado , si la persona no nos conoce , se quedo sin conocernos igual ...
espero hacerme entender y ser ayudado pronto
gracias
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.