PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → WS GMAIL (Webservice de envio de Email para a Comunidade Windev, Webdev e Windev Mobile)
WS GMAIL (Webservice de envio de Email para a Comunidade Windev, Webdev e Windev Mobile)
Débuté par BOLLER, 15 mar. 2018 04:24 - 2 réponses
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mars 2018 - 04:24
Prezados,

Segue aqui a solução das aflições de quem as versões antigas abaixo da versao 22 e para quem precisa enviar email pelo celular com o Windev Mobile sem a necessidade de abrir uma tela de um aplicativo de terceiro.

Video explicativo de como usar o webservice para mandar emails


LINK DE ACESSO
http://wxmagazine.pcscloud.net/WSGMAIL_WEB/awws/index.htm


WSDL
http://wxmagazine.pcscloud.net/WSGMAIL_WEB/awws/WsGmail.awws?wsdl


METODO DE CADASTRO E OBTENCAO DE TOKEN
http://wxmagazine.pcscloud.net/WSGMAIL_WEB/awws/Ws_AddClienteSendMail.htm

USE TOKENBOLLER = ADRIANOBOLLER


METODO DE ENVIO DE EMAIL
http://wxmagazine.pcscloud.net/WSGMAIL_WEB/awws/Ws_SendMail.htm



IMAGENS DO PROJETO





















//Envio do Email e seu retorno
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<nhs:WSID xmlns="urn:WsGmail" xmlns:nhs="urn:WsGmail" xsi:type="xsd:hexBinary" mustUnderstand="1">DD46A1C47D9C5892255F8074AB4AFF00C7FFAA2C</nhs:WSID>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:Ws_SendMailResponse xmlns:ns1="urn:WsGmail">
<Ws_SendMailResult>Retorno: 0 Mensagem: Mensagem enviada com sucesso!</Ws_SendMailResult>
</ns1:Ws_SendMailResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Código Fonte

//GLOBAL DO PROJETO
GLOBAL
gs_email is string = "webservices@wxinformatica.com"
gs_password is string = "abcdefghijklmnopkrqtuv"
gs_Smtp_Server is string = "mail.wxinformatica.com"
gs_Smtp_Port is string = 587 //ok

//TIPO DE SEGURANÇA
gs_Smtp_Tipo is string = "Default" //ok
//gs_Smtp_Tipo is string = "TLS"
//gs_Smtp_Tipo is string = "SSL"

HModifyStructure("*")

HCréationSiInexistant("*","Senha")



//GLOBAL PROCEDURE
//Declara webservice//
arr_Resultados is array of string
gsValorMemorizado is string = 1 //Necessario um valor
DeclareWebserviceContext(gsValorMemorizado) //Principal funcao que declara webservice//
DeclareWebserviceContext(arr_Resultados) //Principal funcao que declara webservice//



// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//[ <Résultat> = ] Ws_AddClienteSendMail (<TokenBoller>, <seuNome>, <seuEmail>, <seuCelular>, <suaFinalidadeUso>)
//
// Paramètres :
// TokenBoller : <indiquez ici le rôle de TokenBoller>
// seuNome : <indiquez ici le rôle de seuNome>
// seuEmail : <indiquez ici le rôle de seuEmail>
// seuCelular : <indiquez ici le rôle de seuCelular>
// suaFinalidadeUso : <indiquez ici le rôle de suaFinalidadeUso>
// Valeur de retour :
// tableau : // Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
Procedure Ws_AddClienteSendMail(TokenBoller, seuNome, seuEmail, seuCelular, suaFinalidadeUso)

ok is boolean

msg_retorno, sHash, seuToken is ANSI string

IF seuNome = "" THEN
msg_retorno += "Nome é Obrigatório"+CRLF
END
IF seuEmail = "" THEN
msg_retorno += "Email é Obrigatório"+CRLF
END
IF seuCelular = "" THEN
msg_retorno += "Celular é Obrigatório"+CRLF
END
IF suaFinalidadeUso = "" THEN
msg_retorno += "Finalidade de Uso é Obrigatório"+CRLF
END

IF msg_retorno = "" THEN

sHash = seuNome + " " + seuEmail + " " + seuCelular
seuToken = Crypt(sHash,"ADRIANOBOLLER",compresseAucun,encodeBASE64)


IF Upper(TokenBoller) = "ADRIANOBOLLER" AND msg_retorno = "" THEN

HConnectionOpen(MyConnHfsqlWsGmail)

HModifyStructure("*")

HCréationSiInexistant("*","Senha")

t001_clientes_wsgmail.t001_nome = seuNome
t001_clientes_wsgmail.t001_email = seuEmail
t001_clientes_wsgmail.t001_celular = seuCelular
t001_clientes_wsgmail.t001_token = seuToken
t001_clientes_wsgmail.t001_finalidade = suaFinalidadeUso
t001_clientes_wsgmail.t001_status = 1

IF HAdd(t001_clientes_wsgmail) = True THEN
ok = True
ELSE
ok = False
END

HConnectionClose(MyConnHfsqlWsGmail)

END

ELSE
msg_retorno += "Campos obrigatórios não preenchidos"+CRLF
END



IF ok = True
msg_retorno += "Mensagem de retorno: Gravou com Sucesso, seu token é: "+ seuToken +CRLF
ELSE
msg_retorno += "Mensagem de retorno: Erro ao gravar dados" +CRLF
END

IF ErrorInfo() <> "" THEN
msg_retorno += "Erro: " + ErrorInfo()
END



arrayResultadoLocal is array of string

Add(arrayResultadoLocal,msg_retorno)

RESULT(arrayResultadoLocal)



// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//[ <Résultat> = ] Ws_SendMail (<sToken>, <sDe>, <sPara>, <sCC>, <sAssunto>, <sMensagem>, <arraybytesAnexo_01>, <arraybytesAnexo_02>, <arraybytesAnexo_03>, <arraybytesAnexo_04>, <arraybytesAnexo_05>, <booleanMsgHtml>, <booleanRecebimento>)
//
// Paramètres :
// sToken : <indiquez ici le rôle de Token>
// sDe : <indiquez ici le rôle de DDe>
// sPara : <indiquez ici le rôle de Para>
// sCC : <indiquez ici le rôle de sCC>
// sAssunto : <indiquez ici le rôle de Assunto>
// sMensagem : <indiquez ici le rôle de Mensagem>
// arraybytesAnexo_01 : <indiquez ici le rôle de Anexo_01>
// arraybytesAnexo_02 : <indiquez ici le rôle de Anexo_02>
// arraybytesAnexo_03 : <indiquez ici le rôle de Anexo_03>
// arraybytesAnexo_04 : <indiquez ici le rôle de Anexo_04>
// arraybytesAnexo_05 : <indiquez ici le rôle de Anexo_05>
// booleanMsgHtml : <indiquez ici le rôle de sHtml>
// booleanRecebimento : <indiquez ici le rôle de sHtml>
// Valeur de retour :
// tableau : // Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
// bReconhecimentoRecebimento (booléen) : <indiquez ici le rôle de bReconhecimentoRecebimento>
Procedure Ws_SendMail(sToken, sDe, sPara, sCC, sAssunto, sMensagem, arraybytesAnexo_01, arraybytesAnexo_02, arraybytesAnexo_03, arraybytesAnexo_04, arraybytesAnexo_05, booleanMsgHtml, booleanRecebimento)

i is int
AdresseTemp is string
clEmail is an Email
stSession is an emailSMTPSession
ok, resultado is boolean = False
msg_retorno is string = ""



IF booleanMsgHtml = "" THEN
booleanMsgHtml = 0
END

IF booleanRecebimento = "" THEN
booleanRecebimento = 0
END





IF gs_Smtp_Server = "" THEN //smtp.gmail.com
msg_retorno += "gs_Smtp_Server inválido!"+CRLF
resultado = False
END
IF gs_Smtp_Port = "" THEN //smtp.gmail.com
msg_retorno += "gs_Smtp_Port inválido!"+CRLF
resultado = False
END
IF gs_Smtp_Tipo = "" THEN //smtp.gmail.com
msg_retorno += "gs_Smtp_Tipo inválido!"+CRLF
resultado = False
END
IF gs_email = "" THEN
msg_retorno += "gs_email inválido!"+CRLF
resultado = False
END
IF gs_password = "" THEN
msg_retorno += "gs_password inválido!"+CRLF
resultado = False
END
IF sDe = "" THEN //adrianoboller@gmail.com
msg_retorno += "sDe inválido!"+CRLF
resultado = False
END
IF sPara = "" THEN //joaowf@gmail.com
msg_retorno += "sPara inválido!"+CRLF
resultado = False
END
IF sAssunto = "" THEN //assunto
msg_retorno += "sAssunto inválido!"+CRLF
resultado = False
END
IF sMensagem = "" THEN //abacaxi
msg_retorno += "sMensagem inválido!"+CRLF
resultado = False
END

IF sToken <> "" AND sDe <> "" AND sPara <> "" AND sAssunto <> "" AND sMensagem <> "" AND msg_retorno = ""

HConnectionOpen(MyConnHfsqlWsGmail)

HModifyStructure("*")

HCréationSiInexistant("*","Senha")

REQ_BuscaToken.Paramt001_token = sToken

IF HExecuteQuery(REQ_BuscaToken,MyConnHfsqlWsGmail,hRequêteDéfaut+hRequêteSansCorrection) = True

FOR EACH REQ_BuscaToken
IF HFound(REQ_BuscaToken) = True THEN
ok = True
END
END


IF ok = True THEN

// Cnt is gglConnection
// Cnt..Email = gs_email // "email_final_user@gmail.com"
// Cnt..ClientID = "387756281032-qffa6dajjd5348iqhi558dkd98xxxxxx.apps.googleusercontent.com"
// Cnt..ClientSecret = "S13DCA6KkYh1EgPv9-jLxxxh"
// IF GglConnect(Cnt) = False THEN
// Error(ErrorInfo())
// END


clEmail..SenderAddress = sDe
clEmail..Sender = sDe
Add(clEmail..Recipient, sPara)
Add(clEmail..Destinataire, sPara)
clEmail..Subject = sAssunto
clEmail..Message = sMensagem
clEmail..DispositionNotification = booleanRecebimento
clEmail..Priority = emailHighPriority

IF booleanMsgHtml = True OR booleanMsgHtml = 1
IF PositionOccurrence(sMensagem,"<",firstRank,DepuisDébut) > 0
clEmail..HTML = sMensagem
ELSE
clEmail..HTML = TextToHTML(sMensagem)
END
END

EmailConfigure(emailParameterMode, 1) // NAO TINHA NO EXEMPLO PADRAO DA FERRAMENTA // AJUSTE AMARILDO ADRIANO

//Traitement des CC
i = 1
LOOP
AdresseTemp = ExtractString(sCC,i,";")
IF AdresseTemp <> EOT THEN
Add(clEmail..Cc,AdresseTemp)
i++
ELSE
BREAK
END
END

//Traitement des attachements
IF arraybytesAnexo_01 <> ""
EmailLoadAttachment(clEmail,arraybytesAnexo_01)
END
IF arraybytesAnexo_02 <> ""
EmailLoadAttachment(clEmail,arraybytesAnexo_02)
END
IF arraybytesAnexo_03 <> ""
EmailLoadAttachment(clEmail,arraybytesAnexo_03)
END
IF arraybytesAnexo_04 <> ""
EmailLoadAttachment(clEmail,arraybytesAnexo_04)
END
IF arraybytesAnexo_05 <> ""
EmailLoadAttachment(clEmail,arraybytesAnexo_05)
END

stSession..ServerAddress = gs_Smtp_Server
stSession..Port = gs_Smtp_Port
stSession..Name = gs_email
stSession..Password = gs_password

//importante o tipo da segurança o padrao é o 2 emailOptionSecuredTLS
IF gs_Smtp_Tipo = "Default" //padrao
stSession..Option = emailOptionDefault
ELSE IF gs_Smtp_Tipo = "TLS"
stSession..Option = emailOptionSecuredTLS
ELSE IF gs_Smtp_Tipo = "SSL"
stSession..Option = optionSSL
ELSE
stSession..Option = emailOptionSécuriséTLS
END

stSession..Asynchronous = True

//Ouverture de session SMTP
EmailChangeTimeOut(60)

IF EmailStartSession(stSession) = True THEN

EmailStartSMTPSession(gs_email,gs_password,gs_Smtp_Server,gs_Smtp_Port,True,emailOptionSécuriséTLS)

//Envoi du message.
IF EmailSendMessage(stSession,clEmail) THEN

t001_wsgmail_log.t001_datahora = DateSys() + TimeSys()
t001_wsgmail_log.t001_token = sToken
t001_wsgmail_log.t001_email_de = sDe
t001_wsgmail_log.t001_email_para = sPara
t001_wsgmail_log.t001_email_cc = sCC
t001_wsgmail_log.t001_emai_assunto = sAssunto
t001_wsgmail_log.t001_email_mensagem = sMensagem

HAdd(t001_wsgmail_log)

HConnectionClose(MyConnHfsqlWsGmail)

IF ErrorInfo() = ""
msg_retorno += "Mensagem enviada com sucesso!"+CRLF
resultado = True
ELSE
msg_retorno += "Não foi possivel enviar a mensagem! Erro: "+ErrorInfo()+CRLF
resultado = False
END

ELSE
msg_retorno += "Não foi possivel enviar a mensagem! Erro: "+ErrorInfo()+CRLF
resultado = False
END
ELSE
msg_retorno += "Não foi possivel enviar a mensagem! Erro: "+ErrorInfo()+CRLF
resultado = False
END

ELSE
msg_retorno += "Token não encontrado! ou "+ErrorInfo()+CRLF

resultado = False
END

ELSE

msg_retorno += "Token inválido! ou "+ErrorInfo()+CRLF

resultado = False

END

IF sDe = "" THEN
msg_retorno += "Sem preenchimento do campo: DE"+CRLF
END
IF sPara = "" THEN
msg_retorno += "Sem preenchimento do campo: PARA"+CRLF
END
IF sAssunto = "" THEN
msg_retorno += "Sem preenchimento do campo: ASSUNTO"+CRLF
END
IF sMensagem = "" THEN
msg_retorno += "Sem preenchimento do campo: MENSAGEM"+CRLF
END

IF sToken = "" THEN
msg_retorno += "Sem preenchimento do campo: TOKEN"
END

resultado = False

END

vErroEmail is Variant = Email.Erreur

IF Val(vErroEmail) > 0 THEN

SWITCH Val(vErroEmail)

CASE 1: msg_retorno += "Cancelamento solicitado pelo usuário"+CRLF
CASE 2: msg_retorno += "Erro desconhecido"+CRLF
CASE 3: msg_retorno += "Incapaz de conectar"+CRLF
CASE 4: msg_retorno += "Disco cheio"+CRLF
CASE 5: msg_retorno += "Fora da memória"+CRLF
CASE 6: msg_retorno += "Acesso negado"+CRLF
CASE 7: msg_retorno += "Muitas sessões abertas"+CRLF
CASE 8: msg_retorno += "Muitas sessões abertas"+CRLF
CASE 9: msg_retorno += "Muitos anexos (até 10 arquivos)"+CRLF
CASE 10: msg_retorno += "Muitos destinatários (até 20 destinatários)"+CRLF
CASE 11: msg_retorno += "Anexo não encontrado"+CRLF
CASE 12: msg_retorno += "Não é possível abrir o anexo"+CRLF
CASE 13: msg_retorno += "Não é possível escrever o anexo"+CRLF
CASE 14: msg_retorno += "Recebedor desconhecido"+CRLF
CASE 15: msg_retorno += "Mensagem inválida"+CRLF
CASE 16: msg_retorno += "Mensagem inválida"+CRLF
CASE 17: msg_retorno += "Mensagem inválida"+CRLF
CASE 18: msg_retorno += "Texto da mensagem muito longo"+CRLF
CASE 19: msg_retorno += "Sessão inválida"+CRLF
CASE 20: msg_retorno += "Cancelamento solicitado pelo usuário"+CRLF
CASE 21: msg_retorno += "Endereço de destinatário ambíguo"+CRLF
CASE 22: msg_retorno += "Cancelamento solicitado pelo usuário"+CRLF
CASE 23: msg_retorno += "Erro de rede"+CRLF

END

END

EmailCloseSession(gs_email)



msg_retorno = "Retorno: "+ resultado +" Mensagem: "+ msg_retorno

arrayResultadoLocal is array of string

Add(arrayResultadoLocal,msg_retorno)

RESULT(arrayResultadoLocal)




BASE DE DADOS
-- Script généré par WEBDEV le 15/03/2018 00:18:58
-- Tables de l'analyse WsGmail.wda
-- pour SQL générique (ANSI 92)

-- Création de la table t001_clientes_wsgmail
CREATE TABLE "t001_clientes_wsgmail" (
"t001_clientes_ID" NUMERIC(19,0) PRIMARY KEY ,
"t001_nome" VARCHAR(50) NOT Null UNIQUE ,
"t001_email" VARCHAR(256) NOT Null ,
"t001_celular" VARCHAR(20) NOT Null ,
"t001_finalidade" VARCHAR(512) NOT Null ,
"t001_token" VARCHAR(512) NOT Null ,
"t001_status" BIT NOT Null );


//EXEMPLO COMO USAR NO WINDEV, WEBDEV E WINDEV MOBILE
//CODE DE UM BOTAO PARA ENVIAR O EMAIL
Envio is a Ws_SendMailResponse

Envio = Ws_SendMail("QWRyaWFubyBKb3NlIEJvbGxlciBhZHJpYW5vYm9sbGVyQGdtYWlsLmNvbSA0MTk5OTQ5MTgwMA==",
"adrianoboller@gmail.com",
"adrianoboller@gmail.com",
"julianaaboller@gmail.com",
"Consumindo o novo webservice da Wx Informatica",
"Resolvido o Abacaxi... Resolvido o Abacaxi... Resolvido o Abacaxi... Resolvido o Abacaxi...",
"",
"",
"",
"",
"",
0,
0)

retorno is string = Envio.Ws_SendMailResult

Info(retorno)


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 15 mars 2018 - 04:59
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 15 mars 2018 - 05:41
Fonte do Projeto para ser modificado pela comunidade

http://repository.windev.com/publish.awp…

http://repository.windev.com/publish.awp?file_id=281474976710710;wsgmail-wssendmail-windev-webdev-windev-mobile


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 06 avril 2018 - 03:29
A última configuração em Login e segurança, deve estar no gmail: ATIVADA













--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 06 avril 2018 - 03:40