olá pessoal boa tarde!
é a primeira vez que entro neste ou noutros tópicos a respeito de envio/recebimento de email via clipper/harbour.
é uma coisa que deixaria mais para frente, mas, como adiantei aqui uma alteração no meu sistema e hoje é feriado do "festival da carne", estou aqui, a trabalhar.
Bom, como nunca tinha feito algum tipo de procedimento de envio/recebimento de emails dentro do meu sistema. Aliás, nunca, "nunquinha" mesmo mexi com email, a não ser via provedores gratuitos.
Para um futuro (espero ser bem próximo) pretendo colocar no meu sistema (que já está no meu site), atualizações automáticas que todos os futuros clientes possam baixar.
Mas, como o cliente saberá que tem atualizações?
R= são várias as respostas que quero implantar. vejam:
R1 = através de nós enviarmos um email para cada um desses futuros clientes saberem que tem algo para atualizar;
R2 = o nosso próprio sistema (lá no cliente se tiver internet banda lagar) estar sempre de tempos em tempos "pingando" em nosso site e aparecer uma mensagem no "rodapé" do sistema, para que o cliente/usuário ative/atualize para uma nova versão do nosso sistema;
R3 = etc...
Mas, isso é depois que eu aprender o básico do básico.
Bom, vi, aqui os códigos exemplos que os prezados professores implantaram e estão funcionando em seus respectivos aplicativos.
Estou usando o harbour 3.4 e mingW para compilar/linkar o meu sistema, em conjunto com 2 libs gráficas GTWV"g" e "w".
Então, quero que no meu sistema, quando aparecer uma mensagem de erro lá no cliente "fulano de tal" ele tenha a opção de enviar para mim o email com o arquivo HB_OUT.LOG.
Não testei ainda, mas 2 dos códigos que vi aqui repito logo abaixo, os achei bem interessantes. Um mais simples e outro mais complexo:
1 - código simples:
Código: Selecionar todos
Function envia_email_pos
local cSubject := hb_oemtoansi("PàS VENDA - ")+usuario
local aTo := { endereco@provedor.com.br }
local cServerIp := smtp.gmail.com
local cFrom := fulanodetal@gmail.com
local cUser := fulanodetal@gmail.com
local cMsg := memoread("carta1.txt")
cPass := alltrim(cdpar000->mpswd)
porta := 25
pop3 := imap.gmail.com:993
// if hb_SendMail(cServerIP,porta,cFrom,aTo,,,cMsg,cSubject,,cUser,cPass,pop3,1,.F.,.T.,.T.,.F.)=.T.
if Tip_MailSend(cServerIP,porta,cFrom,aTo,,,cMsg,cSubject,,cUser,cPass,pop3,1,.F.,.T.,.T.,.F.)=.T.
2 - código mais complexo:
Código: Selecionar todos
FUNCTION envia_email(yarq)
Local yyarq:= curdrive()+":\"+curdir()+"\"+yarq // yarq no meu caso é um arquivo que mando em anexo
aFiles := {yyarq} // pode ser uma matriz com vários endereços
cSubject := alltrim(assunto)
aQuem := alltrim(destino)
cMsg := alltrim(obs)
cServerIp:= alltrim(cdpar000->msmtp) // servidor smtp
cFrom := alltrim(cdpar000->mfrom)
cUser := alltrim(cdpar000->muser)
cPass := hb_decrypt(alltrim(cdpar000->mpswd),"lkjhlkhdlkjhkjh") // senha, eu pego de um dbf criptografado
vPORTSMTP:= val(alltrim(cdpar000->mport))
aCC := "" // caracteres entre aspas
aBCC := "" // caracteres entre aspas
lCONF := .F.
lSSL := cdpar000->mssl // variável lógica
CONFIG_MAIL(aFiles,cSubject,aQuem,cMsg,cServerIp,cFrom,cUser,cPass,vPORTSMTP,aCC,aBCC,lCONF,lSSL)
deletefile(yyarq)
RETURN
**********************************************************************************************************
FUNCTION CONFIG_MAIL(aFiles,cSubject,aQuem,cMsg,cServerIp,cFrom,cUser,cPass,vPORTSMTP,aCC,aBCC,lCONF,lSSL)
**********************************************************************************************************
local lRet:= .f.
local oCfg, oError
local lAut:= cdpar000->mauth
TRY
oCfg := CREATEOBJECT( "CDO.Configuration" )
WITH OBJECT oCfg:Fields
:Item("http://schemas.microsoft.com/cdo/configuration/smtpserver"):Value:= cServerIp
:Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport"):Value:= vPORTSMTP
: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:= alltrim(cUser)
:Item("http://schemas.microsoft.com/cdo/configuration/sendpassword"):Value:= alltrim(cPass)
:Update()
END WITH
lRet := .t.
CATCH oError
MsgInfo( "Não Foi possível Enviar o e-Mail!" +HB_OsNewLine()+ ;
"Error: " + Transform(oError:GenCode, nil) + ";" +HB_OsNewLine()+ ;
"SubC: " + Transform(oError:SubCode, nil) + ";" +HB_OsNewLine()+ ;
"OSCode: " + Transform(oError:OsCode, nil) + ";" +HB_OsNewLine()+ ;
"SubSystem: " + Transform(oError:SubSystem, nil) + ";" +HB_OsNewLine()+ ;
"Mensaje: " + oError:Description, "Atenção" )
END
//--> FIM DAS CONFIGURAÇOES.
if lRet
lRet:= Envia_Mail(oCfg,cFrom,aQuem,aFiles,cSubject,cMsg,aCC,aBCC,lCONF)
endif
Return lRet
********************************************************************************
Function Envia_Mail(oCfg,cFrom,cDest,aFiles,cSubject,cMsg,aCC,aBCC,vEMAIL_CONF)
********************************************************************************
local aTo:= {}
local lRet:= .f.
local nEle, oError
aTo:= { cDest } //--> PARA
nEle:= 1
for i:=1 to len(aTo)
TRY
oMsg:= CREATEOBJECT ( "CDO.Message" )
WITH OBJECT oMsg
:Configuration = oCfg
:From = cFrom
:To = aTo[i]
:Cc = aCC
:BCC = aBCC
:Subject = cSubject
//:TextBody = cMsg
:HTMLBody = cMsg
For x := 1 To Len( aFiles )
:AddAttachment(AllTrim(aFiles[x]))
Next
IF vEMAIL_CONF
:Fields("urn:schemas:mailheader:disposition-notification-to"):Value:= cFrom
:Fields:update()
ENDIF
:Send()
END WITH
lRet:= .t.
MsgInfo( "E-mail enviado com sucesso" , " EMAIL " )
CATCH oError
MsgInfo("Não Foi Possível Enviar," +HB_OsNewLine()+;
"a Mensagem: " +HB_OsNewLine()+;
cSubject +HB_OsNewLine()+;
"p/ o eMail: " + aTo[i] +HB_OsNewLine()+;
" - Erro: " + + oError:Description , "Atenção" )
lRet := .f.
END
next
oCfg:= nil
oMsg:= nil
Return lRet
Me perdoem a inocência! ...
mas tenho perguntas que mesmo lendo as 6 páginas deste tópico, não foram perguntadas por alguém (não consegui compreender os códigos). Ou porque todos já sabem fazer ou porque ninguém pensou nelas.
Vamos às dúvidas:
digamos que no cliente "fulano de tal" o email dele (remetente) seja:
remetente:
fulano@yahoo.com.br
digamos que no cliente "ciclano de tal" o email dele (remetente) seja:
remetente:
ciclano@gmail.com
e outro cliente "beltrano de tal" o email dele (remetente) seja:
remetente:
beltrano@hotmail.com
e assim sucessivamente...
o destinatário somos nós mesmos:
destinatário:
microvolution@hotmail.com
Então, no exemplo acima, temos as seguintes variáveis/matrizes que recebem as informações de remetente/senha/provedor, etc:
Então professores, acho que as perguntas são as mesmas, para os 2 códigos-exemplo àcima, ou qualquer outro:
local aTo := {
endereco@provedor.com.br } // como cada cliente é individual e tem seus próprios emails (como coloquei acima), como é preenchido esta variável?
local cServerIp := smtp.gmail.com // e esta aqui como preencher para cada tipo de email?
local cFrom :=
fulanodetal@gmail.com // como fazer para pegar o email do cliente automaticamente, ou terei que ter outra conta minha aqui para ser genérico a todos os clientes?
local cUser :=
fulanodetal@gmail.com // no caso aqui é o destinatário (que sou eu mesmo) e, no caso
MICROVOLUTION@hotmail.com
local cMsg := memoread("carta1.txt") // aqui quero enviar além do corpo padrão (genérico) a todos os meus clientes, como, fazer para anexar o arquivo HB_OUT.LOG e informações do cliente e no caso de ter vários computadores em rede, especificar o nome do computador em que aconteceu o problema (ex: MCR01, ou MCR11, etc)?
cPass := alltrim(cdpar000->mpswd) // como pegar a senha do email do cliente? ou como no email remetente terá que ser um outro email meu e senha minha para todos os clientes (ex: digamos que eu tenha
MICROVOLUTION@GMAIL.COM e usá-lo para remetente)?
porta := 25 // se o email do cliente for em qualquer dos provedores de email mais comuns (hotmail, yahoo, gmail, ig, etc) ou caso ele tenha email próprio (ex:
contato@empresafulano.com.br)???
pop3 := imap.gmail.com:993 // nesse caso, como fica essa linha em conjunto com as anteriores?
Bom, prezados professores, acho que as dúvidas iniciais são essas, mas, outras podem surgir....
E, agora, quem poderá me defender ?