Página 2 de 4
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 14 Jul 2011 16:27
por HASA
:-O
Olá, sygecom, obrigado mais uma vez, vou qurebrando a cabeça por aqui, mas... será que alguma LIB pode estar dando conflito ou coisa parecida, tipo 2 libs do Xharbour que tenham chamadas que possam estar dando esse erro ?
Hasa
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 14 Jul 2011 19:34
por sygecom
Olá Hasa,
Nesse caso segue as LIB que estou usando no meu sistema, talvez alguma ajude nesse caso:
[D:\Devel\xHarbour\contrib\hwgui\lib\hwgui.lib]
[D:\Devel\xHarbour\contrib\sqlrdd\lib\BC5\SQL.lib]
[D:\Devel\xHarbour\contrib\sqlrdd\lib\BC5\libpq.lib]
[D:\Devel\xHarbour\lib\gdlib.lib]
[D:\Devel\xHarbour\lib\libbgd.lib]
[D:\Devel\xHarbour\lib\hbhpdf.lib]
[D:\Devel\xHarbour\lib\pdflib.lib]
[D:\Devel\xHarbour\lib\zlib.lib]
[D:\Devel\xHarbour\lib\hbzip.lib]
[D:\Devel\xHarbour\lib\tip.lib]
[D:\Devel\xHarbour\lib\tipssl.lib]
[D:\Devel\xHarbour\lib\codepage.lib]
[D:\Devel\xHarbour\lib\libfi.lib]
Tente conforme abaixo e veja o que acontece:
Código: Selecionar todos
FUNCTION ENVIA_EMAIL
LOCAL oOutLook,oMailItem,oRecip,oAttach
TRY
oOutLook := GetActiveObject( "Outlook.Application" )
CATCH
TRY
oOutLook := CREATEOBJECT("Outlook.Application")
CATCH
MsgStop("Não foi Possivel Achar o Outlook Instalado, Favor revisar","Aviso do Sistema")
RETURN
END
END
oMailItem := oOutLook:Invoke("CreateItem", 0)
oRecip := oMailItem:Invoke("Recipients")
oRecip:Invoke("Add",'destino@servidor.com.br' )
oMailItem:Set("Subject", 'Asunto' )
oMailItem:Set("Body", 'Corpo do email' )
oAttach := oMailItem:Invoke("Attachments")
FOR x=1 to len(aFiles) //anexos
oAttach:Invoke("Add", aFiles[x] )
NEXT
oMailItem:Invoke("Send")
oOutlook:Quit()
RETURN
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 15 Jul 2011 09:41
por HASA

)
Legal vou testar, dessa lista a que eu uso que não tem ai é hbole.lib, será que é essa ? é a única que tem haver com a história
Hasa

Automatizar um envio de relatorio via email [EDITADO]
Enviado: 15 Jul 2011 10:05
por HASA
:%
Ainda não deu, o erro exato é:
Error BASE/1004 Class: 'NUMERIC' has no exported method: INVOKE
Called from INVOKE(0)
Minigui Ext. Build 95 + Xharbour 1.2.1 (Rev.9371) + Bcc5
Hasa
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 15 Jul 2011 15:29
por glopes2011
Pela mensagem de erro que apresenta, parece
que voce está passando uma variavel numerica ao
inves de uma constante ou character.
Tenta ver se não é isto.
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 15 Jul 2011 16:22
por HASA
:%
Boa tarde na verdade a classe está dizendo que eu deveria passar um valor numerico, eu estou passando o email mesmo.
:(Neg
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 15 Jul 2011 17:40
por glopes2011
Faça o seguinte coloque sua rotina completa para eu testa-la com o meu outlook.
O que o sigecom colocou funcionou para mim.
Ai poderemos ver se é programa no outlook.
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 15 Jul 2011 17:57
por HASA
Ok,ai está :
Código: Selecionar todos
**
* ENVIAR EMAIL ATRAVEZ DO OUTLOOK/2007
**
FUNCTION EMAIL_OUTLOOK_2007( cAssunto, cTexto, cDestAddress, xARQUIVO1, xARQUIVO2 )
LOCAL x
DECLARE aFiles[2]
aFiles[ 1 ] = IIF( EMPTY( xARQUIVO1 ), "", xARQUIVO1 )
aFiles[ 2 ] = IIF( EMPTY( xARQUIVO2 ), "", xARQUIVO2 )
TRY
oOutLook := GetActiveObject("Outlook.Application")
*oOutLook := TOleAuto():New( "Outlook.Application" )
CATCH
TRY
oOutLook := CREATEOBJECT("Outlook.Application")
*oOutLook := TOleAuto():New( "Outlook.Application" )
CATCH
PLAYEXCLAMATION()
MsgStop( "Não encontrei Outlook/2000 ou superior, Verifique" , SISTEMA )
RETURN NIL
END
END
oMailItem := oOutLook:Invoke( "CreateItem", 0 )
oRecip := oMailItem:Invoke("Recipients")
oRecip:Invoke("Add", cDestAddress )
oMailItem:Set("Subject", cAssunto )
oMailItem:Set("Body", cTexto )
oAttach := oMailItem:Invoke("Attachments")
FOR x = 1 to len( aFiles )
oAttach:Invoke("Add", aFiles[ x ] ) // aqui os anexos
NEXT
oMailItem:Invoke("Send") //ENVIA O E-MAIL
oOutlook:Quit()
RETURN NIL

Automatizar um envio de relatorio via email [EDITADO]
Enviado: 15 Jul 2011 18:14
por sygecom
Olá Hassa,
Vamos de novo, tente assim:
Código: Selecionar todos
#define olMailItem 0
FUNCTION EMAIL_OUTLOOK
LOCAL oOutlook, oMail
TRY
oOutlook = CREATEOBJECT( "Outlook.Application" )
CATCH
MsgStop("Não foi Possivel Achar o Outlook Instalado, Favor revisar","Aviso do Sistema")
RETURN
END
oMail = oOutlook:CreateItem( olMailItem )
oMail:Recipients:Add( "destino@servidor.com.br" )
oMail:Subject = "Assunto"
oMail:Body = 'Corpo do E-mail'
FOR x=1 to len(aFiles)
oMail:Attachments:Add( aFiles[x] ) // anexos
NEXT
//oMail:HTMLBody = MEMOREAD( "c:\fundo_email.htm" )
oMail:Send()
oOutlook:Quit()
RETURN
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 18 Jul 2011 03:03
por rochinha
Amiguinhos,
Outlook Express e Outlook Office são duas coisas bem diferentes, tanto em interface quanto em objetos acessiveis via API.
O Outlook chamado por
Outlook.Application chama as propriedades e métodos do Outlook Office ou seja Outlook 2000, 2003, 2007.
Para acessar as propriedades e métodos do Outlook Express deve-se usar
OutlookExpress.Application.
O erro provocado por
INVOKE significa que o método ou propriedade não existe ou não tem o mesmo nome.
O incoveniente de se usar o Outlook para esta tarefa é a chatice do: "
...um aplicativo externo esta tentando acessar o outlook...
Acho ainda que o melhor é integrar o BLAT como motor de emails, seja por aplicativo externo ou acesso as funções de sua .DLL.
Para acessá-lo, bastará criar a string de envio e chamar o BLAT.EXE passando a mesma como parametro ou passar a string como parametro das funções da .DLL.
Código: Selecionar todos
DLL32 FUNCTION SendB( sBlatString AS STRING ) AS LONG PASCAL ;
FROM "SendBlat" LIB "Blat.dll"
DLL32 FUNCTION BlatSend( BlatCMD AS STRING ) AS LONG PASCAL;
FROM "Send" LIB "Blat.dll"
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 18 Jul 2011 13:26
por HASA

)
Olá Leonardo,vou testar e aproveitar essa dica do Rocha, pois teremos clientes com OUTLOOK do XP/7/OFFICE ai fica ruimm, o Blat parece ser a Luz do tunel (ainda não é o fim dele, he he he),
Posto o que deu,
:|<
Hasa
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 20 Jul 2011 17:46
por HASA
:-O
Olá Rochinha, eu tentei no GOOGLE conseguir algum material para estudo da BLAT.DLL mas... não fui muito feliz, tem algum pequeno exemplo em xHarbour, o seu exemplo parece estar em FIVEWin e eu Uso Minigui ai para traduzir de uma para outra me perco (e não é pouco não me perco mesmo

), valeu
:xau
Hasa
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 20 Jul 2011 18:02
por frazato
Boa tarde! ate um tempo atras usada atraves do xharbour, mais nao sei porque não funciona mais ai como tinha uma certa urgencia e nao posso mudar o meu xharbour (99.70) estou usando via Blat.
Tenho um rotina no servidor que fica enviando os Xml/PDF gerado pelo ACbrNfeMonitor, que por sua vez tambem tem o recurso de enviar o email mais nao consegui funcionar ainda.. rs
Este e o arquivo com os dados para o BLAT.
Código: Selecionar todos
-body "08892-SADIA S.A. (39)"
-f usuario@bol.com.br
-to destino1@qq.com.br,destino2@qqq.com.br
-attach F:\JAF_NFE\35110706206061000196550000000000801137733672-nfe.xml
-attach F:\JAF_NFE\35110706206061000196550000000000801137733672.pdf
-subject "SISTEMA JAF ENVIO XML E PDF"
-debug
-log erro.txt
-server smtps.bol.com.br
-u usuario@bol.com.br
-pw suaSenha
-mailfrom usuario@bol.com.br
Este e o arquivo em lote(.bat ) que executo.
e bem simples mais funciona bem.
Frazato
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 21 Jul 2011 09:13
por HASA

)
Bom dia, obriado Frazato, como eu ainda tenho um tempinho vou tentar atravez da DLL, mas... esse fica na manga, valeuuu
:)Pos
Automatizar um envio de relatorio via email [EDITADO]
Enviado: 21 Jul 2011 11:53
por rochinha
Amiguinhos,
Este exemplo é para envio usando BLAT.EXE:
Código: Selecionar todos
function blat( cbody ,;
cserver ,;
cto ,;
cf ,;
csubject ,;
cu ,;
cpw ,;
cattach, lHtml )
/* BLAT.EXE blat.txt
* -server mail.fabricapet.com.br
* -to irochinha@itelefonica.com.br
* -f contato@empresa.com.br
* -subject "**** confirmacao de pedido ****"
* -u usuario@empresa.com.br
* -pw pass123
* -log "email.log"
* -debug
* -attach "EC030017.RTF"
*/
lHtml := .t.
BlatCMD := [ blat.txt] + ;
[ -to ] + alltrim(cto) + ;
[ -server ] + alltrim(cserver) + ;
[ -mailfrom ] + alltrim(CL_Email) + ;
[ -subject "] + alltrim(csubject) + ["] + ;
[ -r ] + ;
[ -replyto ] + alltrim(CL_Email) + ;
[ -returnpath ] + alltrim(CL_Email) + ;
[ -u ] + alltrim(lower(cu)) + ;
[ -pw ] + alltrim(lower(cpw)) + ;
[ -log "email.log" -debug ] + ;
iif( lHtml, [ -html ], [] )
if empty( cAttach )
else
if ValType( cAttach ) == "A"
For nEle := 1 To Len( cAttach )
BlatCMD := BlatCMD + [ -attach "] + alltrim(cAttach[ nEle ]) + ["]
Next
else
BlatCMD := BlatCMD + [ -attach "] + alltrim(cAttach) + ["]
endif
endif
if lHtml
cBody := FormHtml( cSubject, cBody )
endif
rMemoWrit( "blat.txt", cbody + "Enviado via BLAT.EXE" )
rMemoWrit( "blat.bat", BlatCMD )
fErase( "email.log" )
//
cMacro := "BLAT.EXE " + BlatCMD
rMemoWrit( "blat.bat", cMacro )
WinExec( cMacro, 0 )
//
SysWait(2)
if file( "email.log" )
BlatLOG := memoread( "email.log" )
if "ERROR" $ Upper(BlatLOG)
MemoEdit( BlatLOG )
return .f.
endif
if "535" $ Upper(BlatLOG)
? "Erro: Authentication Failed" + CRLF + CRLF + "Senha/Login de autenticacao com erro."
return .f.
endif
endif
RETURN .T.
Function rMemoWrit( _aquivo_, _conteudo_ )
nHandle := fCreate( _aquivo_ )
fWrite( nHandle, _conteudo_, LEN( _conteudo_ ) )
fClose( nHandle )
RETURN .T.
Function WinExec( oque, num )
__Run( oque )
RETURN .T.
Function FormHtml( cSubject, cBody )
Local cOpen
cOpen := '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">' + CRLF
cClose := CRLF + 'Nossa empresa envia email somente para pessoas e empresas cadastradas em nosso sistema.' + CRLF + ;
'Caso tenha duvidas favor entrar em contato com nossa central de atendimento ao cliente.'
cHTML := ;
'<html>' + CRLF + ;
'<head>' + CRLF + ;
' <meta http-equiv="Content-Type"' + CRLF + ;
' content="text/html; charset=iso-8859-1">' + CRLF + ;
'</head>' + CRLF + ;
'<body>' + CRLF + ;
'<pre>' + CRLF + ;
cBody + CRLF + ;
'</pre>' + CRLF + ;
'</body>' + CRLF + ;
'</html>'
Return cOpen + cHTML + cClose