In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Archivo adjunto duplicado en Mail

Foro de Xailer profesional en español
Responder
Alfonso
Mensajes: 33
Registrado: Lun Dic 14, 2020 10:21 am
Ubicación: Santurtzi
Contactar:

Archivo adjunto duplicado en Mail

Mensaje por Alfonso »

Hola a todos:

Estoy enviando archivos adjuntos usando TCDOMail.

Cuando envio un solo mail, funciona bien, pero cuando envio un bloque de mails con sus archivos adjuntos, el cliente del primer mail recibe 1 archivo adjunto, el cliente del segundo mail, recibe 2 archivos adjuntos, (el suyo y el anterior), el tercer cliente recibe 3 archivos adjuntos (el suyo y los anteriores) y asi con todos.

No se porque lo hace, adjunto el codigo que estoy usando de pruebas.

Código: Seleccionar todo

	
	Local aArchivo
	Local cRutaPDF:= "C:\PDF\"
	Local i

	aArchivo:= { {"VF11-220900001.pdf","mailcliente1@hotmail.com"},+;
		 	   {"VF11-220900003.pdf","mailcliente2@hotmail.com"},+;
			   {"VF11-220900004.pdf","mailcliente3@hotmail.com"} }
		
	WITH OBJECT TCDOMail():New():Create()

			// Datos de la conexion
			// --------------------------	

			:cFrom:= "mimail@dominio.com"
			:cServer:= "smtp.dominio.com"
			:cUser:= "mimail@dominio.com"
			:cPassword:= "123456"
			:nPort:= 587
			:lAuthenticate:= .t.
			:cSubject:= "Envio documentacion"
			:cMessage:= "Saludos"

			// Envio de mail/s
			// --------------------------	
			
			FOR i=1 TO Len(aArchivo)

				// Destinatario
				:cTO:= aArchivo[i,2]
				
				// Archivo adjunto
				:aAttachments:= {}
				:aAttachments:= { cRutaPDF+aArchivo[i,1] }
		
				// Enviando
				IF !:Send()
				    	MsgAlert( "No se pudo enviar el mail","Aviso" )
					EXIT
				ENDIF

			NEXT i

			:Destroy() // Elimina el objeto MAIL

		END WITH

		MsgInfo("Proceso terminado","Aviso")
Gracias de antemano por vuestra ayuda
--
Un saludo
Alfonso
Avatar de Usuario
Hurricane
Mensajes: 262
Registrado: Mar Mar 24, 2015 10:21 am
Ubicación: Brasil
Contactar:

Re: Archivo adjunto duplicado en Mail

Mensaje por Hurricane »

Olá,

eu olhei o código fonte da classe.
Troque :destroy() por :free().
após o :create(), adicione :lInstalled e informe se retorna .T. ou .F.
no final do loop, após cada envio, adicione a função sleep(50), apenas para teste.

Qual o domínio de e-mail (remetente) esta usando?
No total, há quantos envios?
O problema aconteceu na segunda tentativa? (mesma seção/execução do aplicativo)
Qual a versão do seu Windows?
Em outro PC o problema também ocorre?
Qual a versão do Xailer? (provavelmente esta usando a última ou penúltima.)

Outra opção de envio é com a class TBlatMail (que usa um pequeno aplicativo externo, gratuito).
Alfonso escribió: Mié Ene 26, 2022 12:05 pm Hola a todos:

Estoy enviando archivos adjuntos usando TCDOMail.

Cuando envio un solo mail, funciona bien, pero cuando envio un bloque de mails con sus archivos adjuntos, el cliente del primer mail recibe 1 archivo adjunto, el cliente del segundo mail, recibe 2 archivos adjuntos, (el suyo y el anterior), el tercer cliente recibe 3 archivos adjuntos (el suyo y los anteriores) y asi con todos.

No se porque lo hace, adjunto el codigo que estoy usando de pruebas.

Código: Seleccionar todo

	
	Local aArchivo
	Local cRutaPDF:= "C:\PDF\"
	Local i

	aArchivo:= { {"VF11-220900001.pdf","mailcliente1@hotmail.com"},+;
		 	   {"VF11-220900003.pdf","mailcliente2@hotmail.com"},+;
			   {"VF11-220900004.pdf","mailcliente3@hotmail.com"} }
		
	WITH OBJECT TCDOMail():New():Create()

			// Datos de la conexion
			// --------------------------	

			:cFrom:= "mimail@dominio.com"
			:cServer:= "smtp.dominio.com"
			:cUser:= "mimail@dominio.com"
			:cPassword:= "123456"
			:nPort:= 587
			:lAuthenticate:= .t.
			:cSubject:= "Envio documentacion"
			:cMessage:= "Saludos"

			// Envio de mail/s
			// --------------------------	
			
			FOR i=1 TO Len(aArchivo)

				// Destinatario
				:cTO:= aArchivo[i,2]
				
				// Archivo adjunto
				:aAttachments:= {}
				:aAttachments:= { cRutaPDF+aArchivo[i,1] }
		
				// Enviando
				IF !:Send()
				    	MsgAlert( "No se pudo enviar el mail","Aviso" )
					EXIT
				ENDIF

			NEXT i

			:Destroy() // Elimina el objeto MAIL

		END WITH

		MsgInfo("Proceso terminado","Aviso")
Gracias de antemano por vuestra ayuda
Developments | Trainings | Projects
Site | E-mail | Messenger | YouTube
Alfonso
Mensajes: 33
Registrado: Lun Dic 14, 2020 10:21 am
Ubicación: Santurtzi
Contactar:

Re: Archivo adjunto duplicado en Mail

Mensaje por Alfonso »

Hurricane, muchas gracias por tu respuesta.

He probado todo lo que me dices y sigue sin funcionar.

Probe la clase TBlat y funciona perfectamente, usando el mismo codigo de prueba pero sustituyendo la clase TCDOMail por TBlat.

Entiendo que hay algo en TCDOMail que no esta bien, espero que el equipo de Xailer pueda probar el codigo y dar alguna respuesta.

Uso Xailer 7.1.0

Gracias de antemano.
--
Un saludo
Alfonso
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Archivo adjunto duplicado en Mail

Mensaje por ignacio »

Hola,

Efectivamente compruebo en la clase y la documentación de Microsoft que la lista de archivos adjuntos no se borra después de cada envío. Existe un método CDOMessage.Attachments.DeleteAll que se debe de ejecutar antes de añadir los archivos adjuntos. Desgraciadamente no se puede llamar desde un objeto CDO instanciado ya que la referencia al objeto CDOMessage tiene ámbito protected y es necesario hacer un pequeño cambio en la clase que estará listo en la próxima revisión de Xailer.

De momento puede optar por crear un objeto CDOMail por cada mensaje a enviar, que no sé si ralentizará mucho el proceso, pero supongo que no y la otra opción es que intente modificar usted mismo la clase con el código que adjunto:

Código: Seleccionar todo

METHOD Send() CLASS XCDOMail

   LOCAL oCfg := WIN_OLECreateObject( "CDO.Configuration" )
   LOCAL lSuccess := .F., nAttach:=1, nTo:=1

   WITH OBJECT oCfg:Fields
      :Item( CdoProp( "smtpserver" ) ):Value       := ::cServer
      :Item( CdoProp( "smtpserverport" ) ):Value   := ::nPort
      :Item( CdoProp( "smtpauthenticate" ) ):Value := IF( ::lAuthenticate, 1, 0 )
      :Item( CdoProp( "smtpusessl" ) ):Value       := IF( ::lSSL, 1, 0 )
      :Item( CdoProp( "sendusername" ) ):Value     := ::cUser
      :Item( CdoProp( "sendpassword" ) ):Value     := ::cPassword
      :Item( CdoProp( "sendusing" ) ):Value        := 2
      :Update()
   END

   WITH OBJECT ::oObj
      :Configuration := oCfg
      :From          := ::cFrom
      :To            := ::cTo
      :Subject       := ::cSubject
      :Cc            := ::cCC
      :Bcc           := ::cBCC
      IF ::lHTML
         :HTMLBody   := ::cMessage
      ELSE
         :TextBody   := ::cMessage
      ENDIF
      
      :Attachments:DeleteAll() //<<<<<<<<<<<<<< NUEVA LINEA

      For nAttach:=1 to Len( ::aAttachments )
         :Addattachment( ::aAttachments[ nAttach ] )
      Next

      TRY
         lSuccess := ( :Send() == Nil )
      CATCH
         lSuccess := .F.
      END
   END

   oCfg := Nil

RETURN lSuccess
Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Alfonso
Mensajes: 33
Registrado: Lun Dic 14, 2020 10:21 am
Ubicación: Santurtzi
Contactar:

Re: Archivo adjunto duplicado en Mail

Mensaje por Alfonso »

Perfecto, lo pruebo gracias
--
Un saludo
Alfonso
Responder