Ir al contenido


Foto

Como mandar un correo con Delphi 2010


  • Por favor identifícate para responder
36 respuestas en este tema

#21 pacopenin

pacopenin

    Member

  • Miembros
  • PipPip
  • 12 mensajes
  • LocationAsturias

Escrito 14 febrero 2011 - 10:02

Hola.

Yo no uso Indy, sino synapse y el siguiente ejemplo a mi me funciona bien (es para gmail, pero es fácil adaptarlo):



delphi
  1. procedure MailSend(const sSmtpHost, sSmtpPort, sSmtpUser, sSmtpPasswd, sFrom, sTo, sFileName: AnsiString);
  2. var
  3.   smtp: TSMTPSend;
  4. begin
  5.   smtp := TSMTPSend.Create;
  6.   try
  7.     smtp.UserName := sSmtpUser;
  8.     smtp.Password := sSmtpPasswd;
  9.  
  10.     smtp.TargetHost := sSmtpHost;
  11.     smtp.TargetPort := sSmtpPort;
  12.  
  13.     smtp.AutoTLS := true;
  14.  
  15.     if not smtp.Login() then
  16.       raise ESMTP.Create('SMTP ERROR: Login:' + smtp.EnhCodeString);
  17.  
  18.     if not smtp.MailFrom(sFrom, Length(sFrom)) then
  19.       raise ESMTP.Create('SMTP ERROR: MailFrom:' + smtp.EnhCodeString);
  20.     if not smtp.MailTo(sTo) then
  21.       raise ESMTP.Create('SMTP ERROR: MailTo:' + smtp.EnhCodeString);
  22.     if not smtp.MailData(msg_lines) then
  23.       raise ESMTP.Create('SMTP ERROR: MailData:' + smtp.EnhCodeString);
  24.  
  25.     if not smtp.Logout() then
  26.       raise ESMTP.Create('SMTP ERROR: Logout:' + smtp.EnhCodeString);
  27.   finally
  28.     smtp.Free;
  29.   end;
  30. end;
  31.  
  32. procedure TForm1.Button2Click(Sender: TObject);
  33. begin
  34. MailSend('smtp.gmail.com', '587', 'cuenta@gmail.com', 'password', 'cuenta.from@gmail.com', 'cooreoTo@correor.com', 'test.txt');
  35. //
  36. end;



Saludos,

  • 0

#22 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 mensajes
  • LocationBogota

Escrito 14 marzo 2011 - 01:09

Hola, he implementado el procedure MailSend con sypapse en delphi XE o 2010, una pregunta en el codigo que es... ESMTP ???  donde se declara.. y otra pregunta dices que es para gmail.. pero toca hacer alguna configurcion especial para que funcione?, lo pregunto por que intente con mi cuenta de gmail, tal cual el ejemplo y no me envia ningun mensaje si no un errror.. pero si uso una cuenta de terra.com.co alli envia mail, pero la segunda vez que intento enviar otro mail me sale el error MailFrom : permanent failure, delivery not authorizaed, message refussed
  • 0

#23 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 14 marzo 2011 - 05:51

Caral: En indy10 tienes funciones IdAttachmentFile e IdAttachmentStream, pero en las Indy anteriores se utilizaba una sola generica, IdAttachment, que solo admitía ficheros, era algo así como "TIdAttachment.Create(Email.MessageParts, NombreFichero);"

Desart: No le des más vueltas a tu código, deberían funcionarte casi todos los ejemplos, el problema está en tu windows casí con total seguridad.

Seguramente tengas algún problema al conectar con el servidor smtp.

Lo más normal es que sea culpa de un matavirus, en espcial Norton, McAffe y puede que Panda. Trata de probar tras desactivarlos. Muchos de estos programa bloquean ejecutablñes concretos para que no puedan salir al exterior, si es así, tendrías problemas siempre que el matavirus esté activo (detecta cambios en los EXE, así quye en cada compilación elproblema reaparecería).

Otra posible causa es que el servidor SMTP este negandote la entrada al venir tu petición de una IP considerada parte de una red de spam: Si tu IP es dinamica, igual la semana pasada la tenia un PC lleno de virus de algún chaval, y este registrada en spamhaus o similar. En ese caso, toca apagar el modem ADSL o de cable y dejar pasar unas horas -toda la noche es lo mejor- de forma que al reconectar te toque otra IP a ver si era esto.

Puedes comprobar si el problema es de tu delphi o del exterior mandando los correos a localhost como smtp server: instala MiniRelay http://www.netvicious.com/ y prueba. Así sabras si tu aplicacion es correcta (le llega a minirelay tu email) y si luego el correo consigue salir de tu PC o no (mirando el log de minirealy).
  • 0

#24 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 14 marzo 2011 - 07:23

Muchas Gracias Sergio lo probare esta tarde.
  • 0

#25 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 14 marzo 2011 - 07:57

Aqui tienes un ejemplo de como hacerlo usando libcurl:
http://www.delphiacc...il-con-libcurl/
  • 0

#26 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 mensajes
  • LocationBogota

Escrito 23 marzo 2011 - 01:51

Hola, yo he logrado crear una aplicacion en XE par envio de correo, lo que no me funciona es el envio de archivos adjuntos, siempre me sale 'Abstract Error', ya he intentado con todo lo que encontre en la web, basicamente tengo una fusion de quien sabe cuantos programas en un solo, utilizo los indy 10.5.7, revise la unidad IdMessageClient de los indy 10.5.7 y haciendole seguimiento, veo que el error se presenta en el procedure:



delphi
  1. 977.    procedure EncodeAttachment(AAttachment: TIdAttachment; AEncoderClass: TIdMessageEncoderClass);
  2. 978.  var
  3. 979.    LAttachStream: TStream;
  4. 980.  begin
  5. 981.    LDestStream := TIdTCPStream.Create(Self); try
  6. 982.      LEncoder := AEncoderClass.Create(Self); try
  7. 983.        LEncoder.Filename := AAttachment.Filename;
  8. 984.        LAttachStream := AAttachment.OpenLoadStream; try
  9. 985.          LEncoder.Encode(LAttachStream, LDestStream);
  10. 986.        finally AAttachment.CloseLoadStream; end;
  11. 987.      finally FreeAndNil(LEncoder); end;
  12. 988.    finally FreeAndNil(LDestStream); end;
  13. 989.  end;


No se si sera algun error de la indy,, algun bug... si halguien sabe algo por favor se les agradece.

el siguiente es el codigo que utilizo en mi boton enviar.



delphi
  1. procedure TfrmPrincipal.actEnviarExecute(Sender: TObject);
  2. var i:integer;
  3. begin
  4. with IdMessage do
  5.     begin
  6.     Clear;
  7.     if(ledFrom.Text <> '') then
  8.         begin
  9.         idMessage.From.Address:= ledFrom.Text + '@gmail.com';
  10.         if (PC_Nombre = '') then
  11.             From.Name:=ledFrom.Text+'@hotmail.com'
  12.         else
  13.           From.Name:=PChar(PC_Nombre);
  14.  
  15.         idMessage.ReplyTo.EMailAddresses := ledFrom.Text + '@gmail.com';
  16.         end;
  17.  
  18.     if(ledTo.Text <> '') then
  19.         idMessage.Recipients.EMailAddresses := ledTo.Text
  20.     else
  21.         idMessage.Recipients:= nil;
  22.  
  23.     if(ledCC.Text <> '') then
  24.         idMessage.CCList.EMailAddresses := ledCC.Text
  25.     else
  26.         idMessage.CCList:= nil;
  27.  
  28.     if(Body.Text<>'') then
  29.         Body.AddStrings(frmprincipal.Body.Lines);
  30.  
  31.     if(ledSubject.Text <> '') then
  32.         Subject:=PChar(ledSubject.Text+' '+enviados.Text);
  33.  
  34.     if(ledAttachment.Text = '')and(lFicherosAdjuntos.Count=0) then
  35.         idmessage.MessageParts.Clear
  36.     else
  37.     if lFicherosAdjuntos.Count>0 then
  38.         begin
  39.         idmessage.MessageParts.Clear;
  40.         // Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
  41.         for i := 0 to lFicherosAdjuntos.Count-1 do
  42.             begin
  43.             if FileExists(lFicherosAdjuntos.items[i]) then
  44.               begin
  45.               with TIdAttachment.Create(idmessage.MessageParts)do
  46.                     begin
  47.                     //FileName:=PChar(lFicherosAdjuntos.items[i]);
  48.                     //ContentType := 'text/txt';
  49.                     //ContentTransferEncoding:='quoted-printable';//'base64';
  50.                     //extraheaders.Add('Content-ID: <somelogo>');
  51.                     end;
  52.               end;
  53.             end;
  54.         end;
  55.  
  56.     btnEnviarCorreo.Enabled := false;
  57.     try
  58.       try
  59.         if not idSMTP.Connected then
  60.         idSMTP.Connect;
  61.  
  62.         IdSMTP.Send( IdMessage );
  63.         enviados.Value:=enviados.Value+1;
  64.         IdMessage.MessageParts.Clear;
  65.         except// Capturo algunas excepciones que pueden ocurrir
  66.             on E:Exception do
  67.               StatusMemo.Lines.Insert(0, 'No se ha podido enviar el email.' + #13 +'ERROR: ' + E.Message) ;
  68.             on E: EFOpenError do
  69.               ShowMessage('No se ha podido enviar el email.' + #13 +'Fichero Adjunto desconocido o erróneo.');
  70.             else
  71.               begin
  72.               MessageDlg('Error al enviar email (IntToStr(Result)).', mtError, [mbOk],0);
  73.               exit;
  74.               end;
  75.             end;
  76.     finally
  77.           btnEnviarCorreo.Enabled := true;
  78.           end;
  79.     end;
  80. end;


  • 0

#27 genyus00

genyus00

    Advanced Member

  • Miembros
  • PipPipPip
  • 52 mensajes
  • LocationBogota

Escrito 23 marzo 2011 - 03:43

Hola DESAR, si no has encontrado solucion, aqui esta, te respondo a ti y a mi tambien de paso, despues de tanto buscar, encontre la solucion aca. en mi caso solo me hacia falta enviar archivo adjunto en mi email...

http://www.delphiacc...junto-con-indy/



delphi
  1.         // Si hay que meter un archivo adjunto lo creamos y lo asignamos al mensaje
  2.         for i := 0 to lFicherosAdjuntos.Count-1 do
  3.             begin
  4.             if FileExists(lFicherosAdjuntos.items[i]) then
  5.               with TIdAttachmentFile.Create(idMessage.MessageParts, lFicherosAdjuntos.items[i])do
  6.                     begin
  7.                     ContentType := 'text/txt';
  8.                     FileName:=lFicherosAdjuntos.items[i];
  9.                     //ContentTransferEncoding:='base64';
  10.                     //extraheaders.Add('Content-ID: <somelogo>');
  11.                     end;
  12.             end;



me queda pendiente saber que hace esto:
//ContentTransferEncoding:='base64';
//extraheaders.Add('Content-ID: <somelogo>');

aunque segun la pagina en  http://www.indyproje...08_17_a.en.aspx , con lo que esta basta.

esta linea creo esta de mas  ContentType := 'text/txt';  por que segun es para definir el tipo de documento a enviar, pero aun asi, adjunte txt, rar, zip, ini, log, rtf, doc, xls, jpg y viajaron a su destino sin problemas..

mi aplicacion  esta en delphi XE con indy 10.5.7.    :cool:
  • 0

#28 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 24 marzo 2011 - 01:52

Gracias y perdonar que no respondiera antes, la verdad, no he probado, el código  :embarrassed: , el problema lo tengo en el ruter, no puedo abrir los puertos, y me esta volviendo loco, tambien tengo commo 10 pequeños proyectos , que estoy estudiando y trabajando, por eso suelo ir tan lento, pero cuando menos lo espero suelo acabar varios en muy poco tiempo.
  • 0

#29 tambarra

tambarra

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 17 abril 2011 - 02:02

Hola

Espero que puedas abrir y compilar los fuentes, yo los he podido abrir y compilar hasta con Turbo Delphi (BDS 2006).

Salud OS


Hola Egostar

Gracias por publicar las fuentes, el código me funciona a la perfeción en delphi 2009. Solo tengo un pequeño inconveniente, en el memo 1 se añaden varias líneas para el cuerpo del mensaje, pero al recibir el mail y abrirlo todo esta escrito en una sola linea.

Me explico mejor, con el ejecutable enviado por tí:

el cuerpo del mensaje es:

Prueba de envio de correo electrónico
desde una aplicación "Stand Alone"
creada con Delphi XE utilizando el
componente POP3 de los Indy.

Saludos


y lo que ves cuando abres el correo en outlook:

Prueba de envio de correo electrónico desde una aplicación "Stand Alone" creada con Delphi XE utilizando el componente POP3 de los Indy.Saludos

¿ hay forma de que el cuerpo del mensaje respete los retornos de carro?





  • 0

#30 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 17 abril 2011 - 03:27

ELIMINADO
  • 0

#31 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 17 abril 2011 - 03:30

Hola compañeros un amigo me ha enviado el siguiente código que funciona bien, el problema de los anteriores según me comenta, es el envió adjunto de archivos.


Este código fue bajado de http://www.planetadelphi.com.br/


este es el código, sólo falta el envío de adjuntos.

[DELPHI]

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
  Dialogs,IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdBaseComponent,
IdMessage, IdPOP3, StdCtrls;
{IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdBaseComponent,
IdMessage, IdPOP3}

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure EMail_Enviar(Portam : Integer; Hostm:
String; UserNamem: String; Passwordm : String;
Destinatariom : String; Assuntom : String; Mensagemm :
TMemo; EMail_Remetentem: String;
Mensagem_Confirmacao : Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
function EnviarEmail(aData, aHora : TDateTime; aHost,
aLogin, aSenha,
aListaEmail, aAssunto, aCorpo : String) : Boolean;
var
  IdSMTP    : TIdSMTP;
  IdMessage : TIdMessage;
  Cabecalho: string;
begin
  Cabecalho:= '';
  Result:= False;
  IdSMTP    := TIdSMTP  .Create(nil);
  IdMessage := TIdMessage.Create(nil);
  try
    IdSMTP.Host:= aHost;
    IdSMTP.AuthType:= satDefault;
    IdSMTP.Username:= aLogin;
    IdSMTP.Password:= aSenha;
    IdSMTP.Connect;

    IdMessage.From.Address:= aLogin;
    IdMessage.Recipients.EMailAddresses:= aListaEmail;
    IdMessage.Subject:= aAssunto;
    IdMessage.Body.Text:=
'Data: '+DateToStr(aData)+#13#10+
'Hora: '+TimeToStr(aHora)+#13#10+ aCorpo;
    IdMessage.MessageParts.Clear;
    try
      IdSMTP.Send(IdMessage);
    except
      on E: Exception do
        begin
          MessageDlg('Erro ao tentar enviar este e-
mail'+#13#10+e.Message,mtWarning,[mbok],0);
          Exit;
        end;
    end;
  finally
    IdSMTP  .Disconnect;
    IdSMTP  .Free;
    IdMessage.Free;
  end;
  Result:= True;
end;

begin                      //Servido Email    Correo Origen       
Clave Origen    Correo Destino          Asunto         
Mensaje
    EnviarEmail(Date,Time,
'smtp.eresmas.com','Desart@eresmas.com','2310',         
'Desart@misabueso.com','Evido de email','Enviando email
via programa��o utilizando os recursos da poderosa
paleta indy');
end;



procedure TForm1.EMail_Enviar(Portam : Integer; Hostm:
String; UserNamem: String; Passwordm : String;
          Destinatariom : String; Assuntom : String;
Mensagemm : TMemo; EMail_Remetentem: String;
          Mensagem_Confirmacao : Boolean);
Var Message_ : TidMessage;
    IdSMTP_  : TIdSMTP;
begin
  IdSMTP_                    := TIdSMTP.Create(Application);
  IdSMTP_.Port              := Portam;
  IdSMTP_.AuthType          := satDefault;
  IdSMTP_.Host              := Hostm;
  IdSMTP_.Username          := UserNamem;
  IdSMTP_.Password          := Passwordm;

  IdSMTP_.Connect;
  If (IdSMTP_.Connected = False) Then
  Begin
      ShowMessage('Falha na conex�o!');
      IdSMTP_.Disconnect;
      Exit;
  End;

  try
      Message_ := TidMessage.Create(Application);
      Message_.Recipients.EMailAddresses :=
Destinatariom;    // EMail destinatario
      Message_.Subject                  := Assuntom;        //
Assunto
      Message_.Body                      := Mensagemm.Lines; 
// Mensagem que ser� enviada
      Message_.From.Address              :=
EMail_Remetentem; // Email do Remetente

      IdSMTP_.Send(Message_);
  finally
      IdSMTP_.Disconnect;
      Application.ProcessMessages;
  end;

  If (Mensagem_Confirmacao = True) Then
      ShowMessage('Enviado com sucesso!');

  Message_.Free;
  IdSMTP_.Free;
end;

// Declare no Uses IdMessage, IdSMTP
// USE ASSIM:
// EMail_Enviar(Porta (normalmente usada a 25),
//'SMTP do E-Mail do servidor - smtp.servidor.com.br',
//'Sua conta de email - usu�rio',
//'Sua conta de email - senha',
//'email@destinatario.com.br',
//'Assunto da mensagem',
//Nome do Memo com o corpo da mensagem ex:Memo1,
//'email@remetente.com.br',
//Se ser� exibido mensagem de confirma��o de envio ou
n�o = False ou True);

procedure TForm1.Button2Click(Sender: TObject);
begin
    EMail_Enviar
(25,'smtp.eresmas.com','Desart@eresmas.com','XXXXXX',Edi
t1.Text,Edit2.Text,Memo1,'desart@clubdelphi.com',false)
;

// Portam : Puerto del envió
//Hostm:Servidor,
// UserNamem: Correo de envió
// Passwordm : Clave correo envío
//Destinatariom : Correo a quien se envía
//Assuntom :Asunto
// Mensagemm : Mensaje
// EMail_Remetentem: Donde mandar el mensaje si falla
//Mensagem_Confirmacao : Si nos avisa del resultado del envió
end;

end.
[/DELPHI]


Hola compañeros repito el mensaje de arriba ya que como siempre me ha dado problemas al colgarlo en CROme

  • 0

#32 tambarra

tambarra

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 17 abril 2011 - 08:06

Pues por un foro de asp encontré que este mismo problema se le ha generado a otros programadores, y por algún sitio ponía que los saltos de linea no se interpretaban bien en html..........

........... pues

[DELPHI]
procedure TForm1.Send_Mail;
begin
  //Configuramos los datos del receptor y del enviador así como el Asunto del correo
  with FMessage do
  begin
    Recipients.Add;
    Recipients[0].Name    := FToName;
    Recipients[0].Address := FToMail;
    From.Name            := FFromName;
    From.Address          := FFromMail;
    Subject              := FSubject;
  end;

  //Cargamos el cuerpo del correo con un archivo (texto/html)
  FTextPart:= TIdText.Create(FMessage.MessageParts,nil);
  with FTextPart do
  begin
  // ContentType := 'text/html';
  ContentType := 'text';                              // aqui se ha quitado /html
    Body.Add(fBodyhtmlName);
  end;
[/DELPHI]

Y no tengo ni idea del porque , pero ahora respeta perfectamente los saltos de línea.

Agradecer a egostar la publicación de las fuentes, funcionan perfectas para enviar un mail.


  • 0

#33 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 17 abril 2011 - 11:54

Hola,

Desart y tambarra, he editado sus mensajes para darle el formato al código. Recuerden que existe las etiquetas [ DELPHI ] Y [ /DELPHI ] (sin los espacios) para darle formato. También puede hacerse simplemente copiando el código, seleccionarlo y presionar en el botón del casco ubicado debajo del combo para elegir el color del texto.

Saludos,
  • 0

#34 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 17 abril 2011 - 12:00

Gracias Delphius, si te fijas suelo usarlo pero en casa uso el Crome y no se porque si uso este se me junta todo, tengo que usar la respuesta rápida y aún asi si luego intento re colocarlo suele dar problemas.
  • 0

#35 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 17 abril 2011 - 12:13

Hola Desart,
Si, lo se... y por eso me pareció raro. Será algún problema del Crome, yo no uso ese navegador. Utilizo FF y copia y pega bien.
Quizá podrías hacer una prueba cambiando el modo de vista. Fíjate que el último botón es de un cursor con unos corchetes. Por defecto está activo (resaltado con color celeste), desactivalo para cambiar al modo texto sin formato (en vez de aparecerte caritas se ve el texto equivalente).
Luego coloca las etiquetas a tu código, ya sea manualmente o con el botón.

Con probar eso no se pierde nada.

Saludos,
  • 0

#36 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 18 abril 2011 - 10:12

Hola Delphius esto es una prueba que hago con lo que me comentaste del cambio de vista, veamos que tal.





delphi
  1. begin
  2. ....
  3. end;






delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3.     EMail_Enviar
  4. (25,'smtp.eresmas.com','Desart@eresmas.com','XXXXXX',Edi
  5. t1.Text,Edit2.Text,Memo1,'desart@clubdelphi.com',false)
  6. ;
  7.  
  8. // Portam : Puerto del envió
  9. //Hostm:Servidor,
  10. // UserNamem: Correo de envió
  11. // Passwordm : Clave correo envío
  12. //Destinatariom : Correo a quien se envía
  13. //Assuntom :Asunto
  14. // Mensagemm : Mensaje
  15. // EMail_Remetentem: Donde mandar el mensaje si falla
  16. //Mensagem_Confirmacao : Si nos avisa del resultado del envió
  17. end;
  18.  
  19. end.



Aparentemente ahora parece que funciona, pero si modifico, guardo y vuelvo a modificar me borra los últimos cambios

Si salgo y vuelvo a entrar si permanecen los cambios. Muchas Gracias Delphius.
  • 0

#37 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 abril 2011 - 01:36

Hola Desart,
Disculpame por mi ausencia, he estado ocupado ayer.
La verdad eso que comentas que al guardar y modificar se borran los cambios no me lo esperaba.

Parece que Crome da algunos problemitas porque con FF no tengo esos inconvenientes.

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.