Jump to content
Fivewin Brasil

Mala direta por email


aferra

Recommended Posts

Bom dia.

Como vcs estão fazendo esse função?

utilizando CDO as vezes me retorna erro e depois não envia mais, precisa reiniciar a maquina ou somente sair do sistema e entrar novamente, mas não deveria ser assim.

Segue como estou fazendo.

	TRY
	 oCfg := CREATEOBJECT( "CDO.Configuration" )
	   WITH OBJECT oCfg:Fields
	        :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver"       ):Value := cSmtp
	        :Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport"   ):Value := 25
	        :Item( "http://schemas.microsoft.com/cdo/configuration/sendusing"        ):Value := 2
	        :Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := .T.
	        :Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl"       ):Value := .F.
	        :Item( "http://schemas.microsoft.com/cdo/configuration/sendusername"     ):Value := cEmail
	        :Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword"     ):Value := cSenha
	        :Item( "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout")   :Value = 30
			  :Update()
	      END WITH
	CATCH oError
	 MsgInfo( "Não Foi possível Enviar o e-Mail!"  +CRLF+ ;
	          "Error: "     + Transform(oError:GenCode,   nil) + ";" +CRLF+ ;
	          "SubC: "      + Transform(oError:SubCode,   nil) + ";" +CRLF+ ;
	          "OSCode: "    + Transform(oError:OsCode,    nil) + ";" +CRLF+ ;
	          "SubSystem: " + Transform(oError:SubSystem, nil) + ";" +CRLF+ ;
	          "Mensaje: "   + oError:Description, "CDO.Configuração" )
	
	END

	TRY
		oMsg := CREATEOBJECT ( "CDO.Message" )
		WITH OBJECT oMsg
			:Configuration = oCfg
			:From = CHR(34) + cEmpApe + CHR(34)+ cEmail
			:To = cTodosEmail
			:Subject = "Envio Automático da Tabela"
			:MDNRequested = .F.
			:TextBody = cTexto
			:AddAttachment(cArquivoAnexo)
			:Send()
		END WITH
		MsgInfo("Mensagem Enviada com Sucesso!","Atençao")
	CATCH oError
		 MsgInfo( "Não Foi possível Enviar o e-Mail!"  +CRLF+ ;
		          "Error: "     + Transform(oError:GenCode,   nil) + ";" +CRLF+ ;
		          "SubC: "      + Transform(oError:SubCode,   nil) + ";" +CRLF+ ;
		          "OSCode: "    + Transform(oError:OsCode,    nil) + ";" +CRLF+ ;
		          "SubSystem: " + Transform(oError:SubSystem, nil) + ";" +CRLF+ ;
		          "Mensaje: "   + oError:Description, "CDO.Message" )
	END TRY

Link to comment
Share on other sites

Bom dia Alessandro

Já tentou utilizar a classe TMail ?

Aqui onde trabalho, utilizamos esta classe e( até onde sei ) nunca tivemos um problema desse tipo

Se for o caso, dê uma olhada também nos samples, lá terá os arquivos tpop3.prg e testpop3.prg que também são interessantes, pode ser que te ajudem de alguma forma

Link to comment
Share on other sites

Usamos a RMAIL.PRG do Ricardo Marques e funciona a 1000.



FUNCTION Config_Mail(_cUser,cPass,_cRemt,cDest, cCC, cCCO, cTxt, cSubject)

LOCAL lRet := .F., nConta, lExiste, cAlias, oDlg, cMsg, cTexto, oEnviar
LOCAL oCfg, oError, oDlgEnvia, oBrush, oFont, oFnt, oGroup
LOCAL cServPOP3 := aServs[nServ][1] //--> SERVIDOR POP3 - "@servidor.com.br"
LOCAL cServSMTP := aServs[nServ][2] //--> SERVIDOR SMTP - "smtp.servidor.com.br"
LOCAL nPort := aServs[nServ][3]
LOCAL lAut := .T.
LOCAL lSSL := aServs[nServ][4]

PUBLIC NewAnexo, lNewAnexoVemdaNFe, lVoltaVariosEmails, ;
lEnvAutoVariosEmails, lLigaBtnAuto

// Envia o email

IF Empty( cPass ) .OR. ;
Empty( _cRemt ) .OR. ;
( Empty( cDest ) .AND. ;
Empty( cCC ) .AND. ;
Empty( cCCO ) )

MsgStop( OemToAnsi( "Preencha Todos os Campos " )+CRLF+ ;
OemToAnsi( "Verifique o Remetente. " )+CRLF+ ;
OemToAnsi( "Verifique o Destin rio. " ), ;
OemToAnsi( "Aten‡Æo, Falha no Envio. " ) )

RETURN( .F. )

ELSE

/* // era assim - nao e +
cUser := ALLTRIM( _cUser ) + aDomin[nServ]
cRemt := ALLTRIM( _cRemt ) + aDomin[nServ]
*/
cUser := ALLTRIM( _cUser ) + ALLTRIM( cServPOP3 )
cRemt := ALLTRIM( _cRemt ) + ALLTRIM( cServPOP3 )

ENDIF

TRY

oCfg := CREATEOBJECT( "CDO.Configuration" )

WITH OBJECT oCfg:Fields

:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserver" ):Value := cServSMTP // Servidor SMTP
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpserverport" ):Value := nPort
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusing" ):Value := 2
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" ):Value := lAut
:Item( "http://schemas.microsoft.com/cdo/configuration/smtpusessl" ):Value := lSSL
:Item( "http://schemas.microsoft.com/cdo/configuration/sendusername" ):Value := cUser
:Item( "http://schemas.microsoft.com/cdo/configuration/sendpassword" ):Value := cPass

:Update()

END WITH

lRet := .T.

CATCH oError

MsgInfo( "Não Foi Possível Enviar o E-Mail!" +CRLF+ ;
"Verifique o Remetente " +CRLF+ ;
"Verifique o Destinatário " +CRLF+ ;
"Error: " + Transform(oError:GenCode, nil) + ";" +CRLF+ ;
"SubC: " + Transform(oError:SubCode, nil) + ";" +CRLF+ ;
"OSCode: " + Transform(oError:OsCode, nil) + ";" +CRLF+ ;
"SubSystem: " + Transform(oError:SubSystem, nil) + ";" +CRLF+ ;
"Mensajem: " + oError:Description, "Atenção " )

END

//--> FIM DAS CONFIGURACOES.
IF lRet

IF lNewAnexoVemdaNFe // VEM DA NF-E, ENVIAR EMAIL +- LINHA 14192/200

IF LEN( NewAnexo ) >= 1 // ? [TEM ANEXO]

cTexto := cSubject

MsgRun( "Email com Anexo da "+ALLTRIM( cTexto ), ;
"Favor Esperar, Pode Demorar um Pouco - "+ ;
"Tentando Enviar Email - Não Tecle <ESC>", ;
{ || lRet := Envia_Mail(oCfg, cRemt, cDest, cCC, cCCO, cTxt, cSubject) } )

ELSE // ? [NAO TEM AXEXO]

cTexto := cSubject

MsgRun( "Email Sem Anexo da "+ALLTRIM( cTexto ), ;
"Favor Esperar, Pode Demorar um Pouco - "+ ;
"Tentando Enviar Email - Não Tecle <ESC> ", ;
{ || lRet := Envia_Mail(oCfg, cRemt, cDest, cCC, cCCO, cTxt, cSubject) } )

ENDIF

ELSE // VEM DAQUI MESMO: RMAIL.PRG - INICIO

IF LEN( aAttach ) >= 1 // ? [TEM ANEXO]

MsgRun( "Tentando Enviar o Email com Anexo(s) ", ;
"Favor Esperar, Pode Demorar! ", ;
{ || lRet := Envia_Mail(oCfg, cRemt, cDest, cCC, cCCO, cTxt, cSubject) } )

ELSE // ? [NAO TEM AXEXO]

// Era assim
//lRet := Envia_Mail(oCfg,cRemt,cDest, cCC, cCCO, cTxt, cSubject)
MsgRun( "Tentando Enviar o Email sem Anexo(s) ", ;
"Favor Esperar, Pode Demorar! ", ;
{ || lRet := Envia_Mail(oCfg, cRemt, cDest, cCC, cCCO, cTxt, cSubject) } )

ENDIF

ENDIF

ENDIF

RETURN( lRet )

FUNCTION Envia_Mail( oCfg, cFROM, cTo, cCC, cBCC, cMsg, cSubject )

LOCAL cToken, lRet := .F.
LOCAL oIco, oFnt, oFont, oDlgConf, oConfigura, oSaida, IDCor, oGroup, TRAB
LOCAL aGet := ARRAY(10), oScreenShot, oBmpEmail, lAppend, DeOndeVem

PUBLIC lNewAnexoVemdaNFe

cTo := Destinatarios( cTo ) //-> PARA
cCC := Destinatarios( cCC ) //-> COM COPIA
cBCC := Destinatarios( cBCC ) //-> COM COPIA OCULTA

TRY
oMsg := CREATEOBJECT ( "CDO.Message" )

WITH OBJECT oMsg

:Configuration = oCfg
:FROM = cFROM
:To = cTo
:CC = cCC
:BCC = cBCC

:Subject = cSubject
:TextBody = cMsg

IF lNewAnexoVemdaNFe // VEM DA NF-E, ENVIAR EMAIL +- LINHA 14192/200

FOR x := 1 To Len( NewAnexo ) // Anexos dos Email aqui - NF-e

SYSREFRESH()

IF NewAnexo[x] <> NIL
:AddAttachment(ALLTRIM(NewAnexo[x]))
ENDIF

NEXT

// Para Incorporar uma imagem no corpo do email. 26/03/2013
// Se precisar, ligar e criar o pegador de .bmp/jpg
// http://alanart.net/fivewin/index.php?/topic/20914-imagem-no-corpo-do-email/
/*
:HTMLBody = "<p><img src='cid:id_imagen10'></p>" +"<p>A Imagem Acima Esta Incorporada a Mensajem.</p>"

loBP:=:AddRelatedBodyPart("c:\plenocbx\silco.bmp", "id_imagen10", 1)

WITH OBJECT loBP:Fields
:Item("urn:schemas:mailheader:Content-ID") = "id_imagen10"
:Update()
END WITH
*/

// Solicitando confirmación de lectura
// Assim funcionou..
/*
IF IPFIXO->IPFIXO3 = UPPER[S]
:Fields( "urn:schemas:mailheader:disposition-notification-to" ):Value := cFrom
:Fields:UpDate()
//cFrom=Conta de saida. Quem envia o email
ENDIF
*/

SELECT IPFIXO
GOTO 1

// Solicitando confirmación de lectura
// Assim funcionou..
IF IPFIXO3 = "S" // pede confirmacao do envio do email

:Fields( "urn:schemas:mailheader:disposition-notification-to" ):Value := cFrom
:Fields:UpDate()
//cFrom=Conta de saida. Quem envia o email

ENDIF

SELECT( DbServidor:cAlias )

ELSE // VEM DAQUI MESMO - RMAIL.PRG - INICIO

FOR x := 1 To Len( aAttach ) // Anexos dos Email aqui - LOCAL

SYSREFRESH()

IF aAttach[x] <> NIL
:AddAttachment(ALLTRIM(aAttach[x]))
ENDIF

NEXT

// Para Incorporar uma imagem no corpo do email. 26/03/2013
// Se precisar, ligar e criar o pegador de .bmp/jpg
/*
:HTMLBody = "<p><img src='cid:id_imagen10'></p>" +"<p>A Imagem Acima Esta Incorporada a Mensajem.</p>"

loBP:=:AddRelatedBodyPart("c:\plenocbx\silco.bmp", "id_imagen10", 1)

WITH OBJECT loBP:Fields
:Item("urn:schemas:mailheader:Content-ID") = "id_imagen10"
:Update()
END WITH
*/

SELECT IPFIXO
GOTO 1

// Solicitando confirmación de lectura
// Assim funcionou..
IF IPFIXO3 = "S"

:Fields( "urn:schemas:mailheader:disposition-notification-to" ):Value := cFrom
:Fields:UpDate()
//cFrom=Conta de saida. Quem envia o email

ENDIF

SELECT( DbServidor:cAlias )

ENDIF

:Send()

END WITH

lRet := .T.

CATCH

IF lVemdeVariosEmails .AND. ; // := .F. // Para Checar Status do Email se Errado
lTemEmaiLErrado // := .F.

MsgStop( OemToAnsi( "ATEN€ÇO USUµRIO: " )+CRLF+;
OemToAnsi( "O PROGRAMA Jµ NÇO AVISOU QUE TEM EMAIL" )+CRLF+;
OemToAnsi( "ERRADO NO CADASTRO DE CLIENTES? " )+CRLF+;
OemToAnsi( "RETORNE PARA A LISTBOX DOS EMAILS E " )+CRLF+;
OemToAnsi( "ANOTE OS CLIENTES COM EMAILS ERRADOS. " )+CRLF+;
OemToAnsi( "SAIA DA NOTA FISCAL ELETRâNICA E ENTRE" )+CRLF+;
OemToAnsi( "NO PLENO E CORRIJA OS EMAILS COM ERRO." )+CRLF+;
OemToAnsi( "PARA IMPRIMIR UMA LISTAGEM DOS EMAILS " )+CRLF+;
OemToAnsi( "DOS CLIENTES, ENTRE NO BOTÇO: " )+CRLF+;
OemToAnsi( "<Alterar Email do Cliente> e Imprima. " ), ;
OemToAnsi( "Cadastro de Clientes Com Email Errado." ) )

ELSE

IF .NOT. IsInternet()

MsgStop( OemToAnsi( "ATEN€ÇO USUµRIO: NÇO Hµ CONEXÇO COM A INTERNET " )+CRLF+;
OemToAnsi( "SAIA DO PROGRAMA E VERIFIQUE SUAS CONEXåES " )+CRLF+;
OemToAnsi( "DE INTERNET. ENQUANTO PERMANECER ESTA MENSAGEM " )+CRLF+;
OemToAnsi( "NÇO TENTE ENVIAR NADA VIA INTERNET. " )+CRLF+;
OemtoAnsi( "FALHA NO MODEM DE INTERNET, NÇO ESTµ ATIVO. " )+CRLF+;
OemToAnsi( "VERIFIQUE SUAS CONEXåES DE INTERNET. ERRO!" ), ;
OemToAnsi( "ALERTA MµXIMO, COMPUTADOR SEM INTERNET ATIVA. " ) )

ELSE // EMAIL DESCONFIGURADO, ALTERADO EM: 24/09/2013
// Graciele(Silco) Nao conseguiu entender a mensagem de jeito nenhum

// FECHO OS BANCOS DOS EMAILS PARA NAO QUEBRAR
CLOSE EMAILENV
CLOSE SERVIDOR
CLOSE CODIGOS
CLOSE CABGRUPO
CLOSE GRUPOS
CLOSE CONTATOS

TRAB := OemToAnsi( "ENVIADOR DE EMAILS DA NF-e ESTµ DESCONFIGURADO - ATEN€ÇO!" )

DEFINE ICON oIco NAME "ICONE"
DEFINE FONT oFnt NAME "Ms Sans Serif" SIZE 00, -12 BOLD
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD
// ESTA EM: EMAIL.RES
DEFINE DIALOG oDlgConf RESOURCE "DLG_ENVIADOR_DESCONFIGURADO" ;
COLORS CLR_BLACK, CLR_WHITE TRANSPARENT ICON oIco

oDlgConf:lHelpIcon := .F.

For IDCor = 401 To 406 // Os ID's dos TEXTOS na DIALOG.
REDEFINE SAY ID IDCor OF oDlgConf ;
COLORS CLR_BLUE, CLR_WHITE UPDATE FONT oFont TRANSPARENT
Next IDCor

REDEFINE SAY ID 410 OF oDlgConf COLORS CLR_BLACK, CLR_WHITE UPDATE FONT oFnt TRANSPARENT

REDEFINE GROUP oGroup ID 501 OF oDlgConf FONT oFnt TRANSPARENT

REDEFINE GET aGet[10] VAR TRAB ID 30 PICTURE "@" OF oDlgConf UPDATE;
WHEN( .F. ) FONT oFont COLORS CLR_BLUE, CLR_WHITE

REDEFINE BITMAP oBmpEmail ID 125 RESOURCE "EMAIL" OF oDlgConf ADJUST TRANSPARENT

oBmpEmail:cToolTip := OemToAnsi( "Configure o Seu Enviador de Email Antes Leia as Instru‡äes")

REDEFINE BUTTONBMP oConfigura ID 301 OF oDlgConf ;
ACTION( RMAIL( lAppend := .F., DeOndeVem := [NFE] ) )

oConfigura:cToolTip := "Configurar o Enviador de Emails"

REDEFINE BUTTONBMP oScreenShot ID 302 OF oDlgConf ;
ACTION( ( MOSTRA_SCREENSHOT() ), XFOCUS( oConfigura ) )

oScreenShot:cToolTip := OemToAnsi( "SCREENSHOT: Modelo de Tela do Cadastro do Provedor" )

// By Rossine, modificado na WINDOW.PRG - Cuidado.
oScreenShot:lToolTipBallon := .T.
oScreenShot:nTooltipWidth := 200
oScreenShot:nTooltipTexColor := CLR_BLACK
oScreenShot:nTooltipBKColor := nRGB( 250, 250, 250 )
oScreenShot:cTooltipTitle := OemToAnsi( "SCREENSHOT: Modelo de Tela do Cadastro do Provedor" )
oScreenShot:nTooltipIcon := 1 && 0=NONE / 1=TTI_INFO / 2=TTI_WARNING / 3=TTI_ERROR
//-> 0=TTDT_AUTOMATIC / 1=TTDT_RESHOW / 2=TTDT_AUTOPOP / 3=TTDT_INITIAL
oScreenShot:nSetDelayType := 2
oScreenShot:nSetDelayTime := 32767 //-> Velocidade do TOOLTIP-> +- 1:30 Secs

REDEFINE BUTTONBMP oSaida ID 303 OF oDlgConf ;
ACTION( oDlgConf:End() ) CANCEL

oSaida:cToolTip := "Saida - Exit - Cancelar"

SET FONT OF oConfigura TO oFont
SET FONT OF oScreenShot TO oFont
SET FONT OF oSaida TO oFont

ACTIVATE DIALOG oDlgConf CENTERED

oFnt:End()
oFont:End()

// ABRO OS BANCOS NOVAMENTE PARA NAO QUEBRAR
ArqsDBF() // Criacao e abertura dos DBFS

/*
MsgInfo( "Não Foi Possível Enviar o E-Mail. ERRO! "+CRLF+ ;
"Anote o Número da NF-e e Tente Enviar Novamente. "+CRLF+ ;
"Veja Com Seu Cliente, Se a Caixa de Mensagens "+CRLF+ ;
"Dele, Não Está Lotada(Cheia), Se Estiver, o "+CRLF+ ;
"Programa Retornará Falso Para o Envio. "+CRLF+ ;
"Persistindo o Erro, Verifique o Que Segue Abaixo:"+CRLF+ ;
"Verifique o Remetente. "+CRLF+ ;
"Verifique o Destinatário. "+CRLF+ ;
"Verifique o Nº. da Porta do Servidor. "+CRLF+ ;
"Se o Provedor For gmail, a Porta a Ser "+CRLF+ ;
"Usada: Use a Porta 465 Para gmail.com. "+CRLF+ ;
"Verifique se o Provedor é Https. "+CRLF+ ;
"Verifique a Sua Senha do Email. "+CRLF+ ;
"Sua Senha Tem Que Ser Igual a Senha "+CRLF+ ;
"Que Esta Cadastrada no Provedor. "+CRLF+ ;
"Se Trocaram a Sua Senha no Provedor: "+CRLF+ ;
"Verifique se o Seu Provedor Nao Esta OFF LLINE. "+CRLF+ ;
"Botão: "+CRLF+ ;
"<Configurar Enviador de Email da NF-e > "+CRLF+ ;
"<Ferramentas> / <Provedores> / <Alterar> "+CRLF+ ;
"Cadastre a Senha Igual a do Provedor. ", ;
"Não Foi Possível Enviar a Mensagem... Off Line? " )
*/

ENDIF

ENDIF

lRet := .F.

END

RETURN( lRet )


Link to comment
Share on other sites

  • 1 year later...

João,

Quando eu faço um looping para enviar um email para cada registro do meu arquivo de clientes, usando os schemas da microsoft do mesmo modo que o rmail utiliza, depois de uns 50 envios aproximadamente, ele diz que não foi possível enviar o próximo e só desligando o computador para continuar.

Link to comment
Share on other sites

ainda não resolvi esse problema, o POG foi coloca na linha de comando e chamar o outlook e colar os endereços de email usando o shellexecute....mas não é legal, como somente um cliente utiliza direto do sistema deixei assim por enquanto, mas quero ver de usar a classe tmail nativa, já li no forum inter que funciona....

Link to comment
Share on other sites

Olá Oscar, sempre tem no samples, dei uma pesquisada e achei esses dois bem legais...

james.prg

testmail.prg

mas tem alguns melhores no forum mesmo mas não encontrei pela pressa, qdo eu fizer e der certo eu posto aqui.

Link to comment
Share on other sites

Outra forma fácil de enviar email. Testado e aprovado em: FWH1306 e xHarbour última versão.



#Include "FiveWin.ch"

Function ENVIA_ERRO()

LOCAL oSmtp, oEMail
LOCAL cSmtpUrl
LOCAL cSubject, cFrom, cTo, cBody, cFile

/*
cSmtpUrl := "smtp://meuemail:senha@smtp.mail.yahoo.com.br"
cFrom := "meuemail@yahoo.com.br"
cTo := "meuemail@ymail.com"
*/

cSmtpUrl := "smtp://meuemail@dominio.com.br:senha@smtp.dominio.com.br"
cFrom := "joao@pleno.com.br"
cTo := "joao@pleno.com.br"

cSubject := [Envio de erro do programa]

cFile := "COMP.LOG" //cNOME

cBody := [Envio de erro do programa]

oEMail := TIpMail():new()
oEMail:setHeader( cSubject, cFrom, cTo )
oEMail:setBody( cBody )
oEMail:attachFile( cFile )

//oEMail:hHeaders[ "Disposition-Notification-To" ] := cFrom // solicita confirmacao

oSmtp := TIpClientSmtp():new( cSmtpUrl )

IF oSmtp:open()

oSmtp:sendMail( oEMail )

oSmtp:close()

MSGINFO( [Email enviado com sucesso], [Aviso-Uhuuuu abestado!] )

ELSE

MSGINFO( "Erro:", oSmtp:lastErrorMessage() )

ENDIF

RETURN Nil

// FIM DO PROGRAMA


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...