Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Fallo en el envío de correo

Al enviar correo (un solo destino), este còdigo funciona correctamente, pero si envío un correo masivo, si un destino falla, no llega al
resto de destinatarios. Sin embargo si todos los destinos son correctos no hay problema.
Utilizo delphi7, indy, yahoo.
Si alguien conoce este error, le agradezco su ayuda.
Gracias anticipada. Saludos.

Código Delphi [-]
procedure TFCorreo1.Enviocorreo1;
var
  i: integer;
begin
  SMTP.Host := mHost;
  SMTP.Port := 25;
  SMTP.username := mUsuario;
  SMTP.password := mPassword;

  MailMessage.Clear;
  MailMessage.From.Address := mEmail;
  MailMessage.From.Name := mNombre;
  MailMessage.Recipients.EMailAddresses := mEmail;
  MailMessage.Subject := 'Comunidad de Propietarios';
  MailMessage.Body.Text := Memo1.text;

   // Envío masivo
  for i := 0 to CLB1.Items.count-1 do  // CLB1 es un TCheckListBox
    if CLB1.State[i] = cbChecked then
      MailMessage.CCList.add.Address := Query4EMAIL.Text; {destino}

  for i := 0 to LB1.Items.count-1 do      // LB1 es un TListBox
    if FileExists(LB1.Items[i]) then
       TIdAttachment.Create(MailMessage.MessageParts,LB1.Items[i]);
  try
    try
      SMTP.Connect(1000);
      SMTP.Send(MailMessage);
    except
      showmessage('Fallo en el Envío de Correo');
    end;
  finally
    SMTP.Disconnect;
  end;
end;
Responder Con Cita
  #2  
Antiguo 30-06-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Question

Cita:
Empezado por Loviedo Ver Mensaje
Si alguien conoce este error, le agradezco su ayuda.
Si, alguien conoce el error.

Quien? No se. No se cual es el error.

Un mensaje amistoso del grupo de "Lee la guía de estilo"
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
El error es el siguiente:

paco@yahoo.es
pepe@yahoo.es
pedro@yahoo.es

El envío es correcto, los tres reciben el correo.

paco@yahoo.es
pepe@yah
pedro@yahoo.es

Nadie recibe el correo, entiendo que paco y pedro deberían recibirlo.
Saludos.
Responder Con Cita
  #4  
Antiguo 30-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Además de nuestra guía de estilo, también tenemos "la otra guía de estilo", cuyo punto 3 dice:
Cuando te aparezca un mensaje de error, no te molestes en decirnos cuál es. Nos encanta tratar de adivinar.

Aquí está:
Cita:
La otra guía de estilo
  1. No te preocupes por dónde colocar tus preguntas. A nosotros nos encanta abrir todos los mensajes sin importar en qué foro estén.
  2. Ni pienses qué título ponerle a tu mensaje. "Tengo una duda" es suficiente para que nosostros entendamos que estás en problemas.
  3. Cuando te aparezca un mensaje de error, no te molestes en decirnos cuál es. Nos encanta tratar de adivinar.
  4. Cuando publiques código no te preocupes porque quede bien presentado. Nosotros distinguimos perfectamente los bloques sin necesidad de ninguna indentación.
  5. Si tienes un problema con bases de datos no es necesario que nos digas qué motor usas, nosotros sabemos la respuesta para cualquiera de ellos.
  6. Si no se entiende lo que preguntas, ni te molestes en aclarar. Nos fascinan los misterios.
  7. No te esfuerces en oprimir F1. Nosotros ya lo hemos hecho y podemos darte la respuesta más rápido.
  8. La opción de búsqueda en los foros sólo está para adornar la página. Es divertidísimo contestar una y otra vez lo mismo.
  9. ¿Google? Eso es para nerds como nosotros.
  10. Ante un problema, no te molestes en tratar de entenderlo. Nosotros ya nos hemos quemado las pestañas por tí y estamos felices de escribirte el código.
  11. Si te plase, eskribe con kas y faltas de hortografia. Komo nosotros no entramos a los chats nos encanta pensar ke estamos en 1.
  12. Si en cinco minutos nadie te ha contestado, siéntete en libertad de abrir cuantos hilos puedas para preguntar lo mismo. Tú no mereces ese trato.
  13. Nunca des las gracias. Nos encanta responder sin más aliciente que ver nuestro nombre escrito.
  14. Cuando escribas un mensaje, siéntente en libertad de no volver en tres semanas. Nosotros estaremos aquí resolviendo tu problema.
  15. Si eres nuevo, acláralo desde el principio. Con eso basta para que nosotros resolvamos tu problema. Tú aún no puedes consultar la ayuda.
  16. Si alguien te remite a la guía de estilo, no te molestes en leerla. Tú tienes cosas más importantes que hacer y a fin de cuentas, nadie la lee.
  17. Si encuentras la solución tú mismo, no te molestes en explicarla. Bastará con un "Ya lo resolví, gracias". Nos emociona ver gente autosuficiente.
  18. No dudes en pedir que te envíen la solución a tu correo. El foro está sólo para los ociosos y tú no tienes tiempo que perder.
Está gracioso.

Con respecto a tu problemita con ese código, creo que deberías cambiar la forma en que lo haces, me explico:
Responder Con Cita
  #5  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Creo que la ayuda solicitada está perfectamente detallada pero no hay inconveniente en describir el error, porque creo que aclara menos que la pregunta.

error:
syntax error in arguments

Tengo 62 años, esto para mí es un hobby, no es mi profesión ni me lucro con ello, llevo mucho tiempo en este foro, pero a veces es decepcionante las respuestas que se dan, es muchos más elegante no responder, pués nadie está obligado a ello, no se si preguntas poco clara aumenta mucho el trabajo de los moderadores. Lo siento.
saludos.
Responder Con Cita
  #6  
Antiguo 30-06-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Con el código que tienes, por qué no te construyes una función para enviar un solo correo cada vez, mediante un bucle llamas a la función pasándole una dirección cada vez así el fallo de alguna de las direcciones no afectaría a las otras, aunque no estaría demás dentro del Try incluir un mensaje la dirección xxx no pudo procesarse.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Gracias por la respuesta, pensé en ello, pero como es un tema muy tratado en el foro (correo automático), y como sólo es un hobby,
tenía curiosidad por una posible solución al envío masivo.
Saludos.
Responder Con Cita
  #8  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Optaré por la solución del Sr. Marcoszorrilla. Gracias.
Saludos.
Responder Con Cita
  #9  
Antiguo 30-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Loviedo Ver Mensaje
Creo que la ayuda solicitada está perfectamente detallada pero no hay inconveniente en describir el error, porque creo que aclara menos que la pregunta.
error:
syntax error in arguments
Tengo 62 años, esto para mí es un hobby, no es mi profesión ni me lucro con ello, llevo mucho tiempo en este foro, pero a veces es decepcionante las respuestas que se dan, es muchos más elegante no responder, pués nadie está obligado a ello, no se si preguntas poco clara aumenta mucho el trabajo de los moderadores. Lo siento.
saludos.
Hola, el detallar lo mejor posible la pregunta, ni aumenta ni disminuye el trabajo de los moderadores, lo único que consigues es que te ayuden antes y mejor
Si las respuestas son decepcionantes pueden deberse a varios motivos:
1. Que la pregunta es decepcionante, por lo que es imposible ayudar.
2. Que la pregunta no es clara, por lo que induce a equívocos al tratar de "descifrar" lo que se pregunta, por lo que se dan respuestas variadas.
3. Que el que responde contesta lo que buenamente sabe, por tratar de ayudar, para encaminar o para dar alguna pista de por donde van los "tiros".

Por ejemplo, ahora dices que el error es "syntax error in arguments", eso es muy diferente a lo que dijiste antes. Es como si vas al médico y le dices que te duele la cabeza y el brazo derecho... pero se te "olvida" contarle que te caiste con la moto

Si se quieren respuestas buenas entonces habría que ver exactamente el mensaje del error, en qué línea del código se ha producido, qué valores tienen las variables involucradas, etc.

Por cierto, el que sea un hobby no implica que podamos dar respuestas distintas. El "médico por hobby" tiene que hacer su trabajo igual que el profesional, salvo que no le importe "perder" a sus pacientes

Aquí también somos todos voluntarios, que ayudamos cada uno en lo que podemos, también hay muchas más personas que están igual que tú, que tiene todo esto como hobby. Y por la edad, bueno, no creas que somos todos unos jovencitos tampoco, ojalá

Resumiendo, puedes hacer un bucle y enviar un mensaje cada vez con un try except, tal y como se te ha explicado o puedes usar un "truco" que no sé si te vale en tu caso, te explico:
Si todos los emails son iguales y van dirigidos a distintas direcciones, puedes enviarlos como "CCO", o sea, que todos las direcciones van en un único email enviado, pero todas las direcciones van en CCO (copia oculta, creo recordar que se llama), así de esa manera cada uno recibe su email pero no ve las direcciones de nadie más, no puede saber a quién más se le ha enviado.
Te puedo pasar un ejemplo, aunque no está hecho con Indy, pero para darte una idea, voy a buscarlo y te lo copio a continuación.
Responder Con Cita
  #10  
Antiguo 30-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, aquí está el código, a ver si te sirve para algo, es muy antiguo, de hace unos 11 años, pero hay muchas empresas que siguen usándolo, sin problemas:

Uso el MAPImail de Scalabium Software

Código Delphi [-]
procedure TfrmMailing.btSendEmailClick(Sender: TObject);
var
  iX, iEmails : Cardinal;
begin
  mapiEmail.Recipients.Text:='';
  mapiEmail.Attachments.Text:='';
  iEmails := 0;
  //
  if (edMailTo.Text='') or (edSubject.Text='') then
  begin
    MensajeAviso('Debe escribir una dirección de email y un asunto');
    edMailTo.SetFocus;
    abort;
  end;
  //
  mapiEmail.Recipients.Add( edMailTo.Text );
  inc( iEmails );   // el edMailTo
  //
  try // Ahora le damos las direcciones para BCC
    mtD.DisableControls;  // <- esto es una tabla en memoria, en tu caso el checklistbox
    mtD.First;
    while not mtD.Eof do
    begin
      if mtD.FieldByName('sacar').AsInteger = 1 then
      begin
        mapiEmail.Recipients.Add( 'BCC:'+mtD.FieldByName('email').AsString );
        Inc( iEmails );
      end;
      mtD.Next;
    end;
    mtD.First;
    mtD.EnableControls;
  except
    MensajeError('Error al crear los emails BCC');
    abort;
  end;
  //
  if iEmails < 1 then
  begin
    MensajeAviso('No hay ningún destinatario para el email');
    exit; //abort;
  end;
  //
  if MensajeConfirmacion('Se va a enviar el mensaje a '+
                          IntToStr(iEmails)+' destinos, ¿Desea continuar?')<>mrYes then
    exit; //abort;
  //
  if lbAdj.Items.Count > 0 then
  begin
    try // Añadimos los Adjuntos
      for iX := 0 to lbAdj.Items.Count-1 do
        mapiEmail.Attachments.Add( lbAdj.Items.Strings[iX] );
    except
      MensajeError('Error al añadir los archivos adjuntos');
      exit; //abort;
    end;
  end;
  //
  try // Enviar el mensaje
    mapiEmail.Subject := edSubject.Text;
    mapiEmail.Body := reText.Lines.Text;
    //
    mapiEmail.EditDialog := false; //true;  PARA QUE SE MUESTRE EL PROGRAMA DE CORREO O NO. !!!!!!!
    //
    mapiEmail.Send;
    //
    iX := mapiEmail.LastError;
    if iX <> SUCCESS_SUCCESS then
      MensajeAviso('No se pudo enviar el mailing'#13#10'Error: '+IntToStr(iX)+' -> '+MAPIErrorDescription(iX))
    else
      MensajeAviso('Mailing enviado.');
  except
    MensajeError('Error de datos para el email');
    abort;
  end;
end;
Responder Con Cita
  #11  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Gracias. Lo probaré.
Saludos.
Responder Con Cita
  #12  
Antiguo 30-06-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Aunque no es exactamente lo que quieres quizás te sirva alguna parte del código:

Código Delphi [-]
procedure TfrConAlumnos.spCorreoClick(Sender: TObject);
Var
i:integer;
stlCorreo:TStringList;
nVacios:Integer;
s:String;
begin
stlCorreo:= TStringList.Create;
nVacios:=0;

  for i := 0 to frConAlumnos.Reja.SelectedRows.Count-1 do
  begin
  frConAlumnos.Reja.DataSource.DataSet.Bookmark := frConAlumnos.Reja.SelectedRows[i];

   if (pos('@',DmoJuanes.AlumnosCorreoel.AsString) > 0) and (pos('.',DmoJuanes.AlumnosCorreoel.AsString) > 0) then
   stlCorreo.Add(Trim(DmoJuanes.AlumnosCorreoel.Value)+';')
   else
   nVacios:=nVacios + 1;

  end;

  if nVacios > 0 then
  ShowMessage('Atención: Se han encontrado direcciones incorrectas en la selección y se han omitido.');

ShellExecute(0, 'open', PAnsiChar('Mailto:'+stlcorreo.CommaText), nil, nil,0);
stlCorreo.Free;
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #13  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Lo del Sr. Casimaimiro no me da error, pero llama al 'outlook', yo utilizo 'yahoo', también probé con 'gmail', pero el resultado es el mismo.
Muchas gracias. la solucíon del Sr. Marcoszorrilla de momento funciona. El envío masivo es para una comunidad de propietarios, y solo somos 26.
Saludos.
Responder Con Cita
  #14  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Encontré el fallo.
El componente Indy no admite 'pepe@yahoo' como dirección de correo, pero si 'pepe@yah.es' aunque las dos son incorrectas.
Saludos.
Responder Con Cita
  #15  
Antiguo 30-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Loviedo Ver Mensaje
Encontré el fallo.
El componente Indy no admite 'pepe@yahoo' como dirección de correo, pero si 'pepe@yah.es' aunque las dos son incorrectas.
Saludos.
Claro, no puedes saber si una dirección es correcta o no, sólo puedes verificar que tiene la arroba y el punto. Pero de todas formas, Indy (o lo que uses) debe enviar el mensaje a su destinatario, aunque no exista. Ya se encargará yahoo/gmail/elquesea de devolverte el mensaje indicando que la dirección no existe.

Así que si verificas y eliminas las direcciones incorrectas, por ejemplo con el código que te ha pasado antes marcoszorrilla, ya podrás enviar todos tus emails sin problemas.
Aunque para enviar 26 emails, que son muy poquitos, puedes verificarlo visualmente tú mismo en unos segundos de que están correctos y te quitas de problema.
Saludos.
Responder Con Cita
  #16  
Antiguo 30-06-2012
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
En el primer caso (pepe@yahoo) el error lo detecta el componente Indy, en el segundo (pepe@yah.es), es Yahoo quien avisa de que la direccion no existe.
Saludos y gracias por todo.
Responder Con Cita
  #17  
Antiguo 01-07-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Exacto, sólo debes controlar de que la dirección está bien "formada", un texto, una arroba, un texto, un punto, un texto. Antes de la arroba pueden ir puntos también, por lo que la "plantilla" sería:
cualquiercosa@cualquiercosa.algo
Como pueden ir puntos antes, entonces mejor verificar tras la arroba
cualquier.cosa@cualquiercosa.algo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Envio de correo con y sin autenticacion kharen Internet 4 30-05-2011 18:34:23
Envio de correo Besto Internet 1 22-11-2010 11:01:35
Duda Envio de Correo jlalvarez OOP 6 19-12-2007 21:28:32
Fallo al enviar correo electrónico User_Baja_2 Internet 1 04-02-2006 23:54:34
envio de correo srangel Linux 0 22-04-2005 17:44:56


La franja horaria es GMT +2. Ahora son las 02:57:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi