Página 1 de 1
metodo post com json x matriz
Enviado: 16 Ago 2020 17:11
por Abel
ola pessoal, to tentando conectar a uma API para mandar email mas to com dificuldade na parte da matriz
se alguem puder me ajudar.
Exemplo de corpo de solicitação - manual
{
"from": "email address",
"to": "recipient email address",
"subject": "subject in string format",
"content": "plain / text content",
"html_content": "html content",
"attachments": [
{
"name": "test.gif",
"type": "image/gif",
"content": "The Base64 encoded content of the attachment."
},
{
"name": "test.pdf",
"type": "application/pdf",
"content": "The Base64 encoded content of the attachment."
}
]
}
minha rotina - nao consigo anexar o arquivo no email
ahash["from"] := "
xxxxx@xxxxx.com.br" // de
ahash["to"] := "
destino@gmail.com" // para
ahash["subject"] := "assunto do email "
ahash["content"] := "vamos la"
ahash["html_content"]:= "ola este é um teste "
ahash["attachments"] := {"name:aulas.prn.pdf","type:application/pdf","content:The Base64 encoded content of the attachment."}
//
cJson := hb_jsonEncode(ahash, .t.)
Try
oOle := CreateObject("MSXML2.XMLHTTP")
Catch
oOle := CreateObject("Microsoft.XMLHTTP")
END
oOle:Open( "POST", "
https://api.turbo-smtp.com/api/mail/send", .t. )
oOle:SetRequestHeader( "content-type", "application/json; charset=utf-8")
oOle:SetRequestHeader( "Authorization", rA_SMTP )
//
oOle:Send(cJson)
metodo post com json x matriz
Enviado: 16 Ago 2020 18:09
por JoséQuintas
Apenas se descuidou da parte onde entra array numérico, e não por nome.
Usando a cabeça.... anexos são array, ok, fez isso... mas....
Isso significa que x[ "attachments" ] é o hash, e vai conter um array {}
Código: Selecionar todos
aHash[ "attachments" ] := {}
UmAnexo := hb_hash()
UmAnexo[ "name" ] :=
UmAnexo[ "type" ] :=
UmAnexo[ "content" ] :=
AAdd( aHash[ "attachments" ], UmAnexo )
Aproveitando....
Uma função que postei por aqui, ShowJason() é pra ajudar isso.
metodo post com json x matriz
Enviado: 16 Ago 2020 18:52
por JoséQuintas
Tä mais enxuta agora.
Código: Selecionar todos
PROCEDURE Main
LOCAL aHash
LOCAL x := [{ "from": "email address",] + ;
[ "to": "recipient email address",] + ;
[ "subject": "subject in string format",] + ;
[ "content": "plain / text content",] + ;
[ "html_content": "html content",] + ;
[ "attachments": ] + ;
"[" + ;
[ { "name": "test.gif",] + ;
[ "type": "image/gif",] + ;
[ "content": "The Base64 encoded content of the attachment."] + ;
[ },] + ;
[ { ] + ;
[ "name": "test.pdf",] + ;
[ "type": "application/pdf",] + ;
[ "content": "The Base64 encoded content of the attachment."] + ;
[ }] + ;
"]" + ;
[ }]
SetMode( 25, 80 )
CLS
aHash := hb_JsonDecode( x )
ShowJSon( aHash, "" )
Inkey(0)
RETURN
FUNCTION ShowJson( aHash, cTxt )
LOCAL oElement
IF ValType( aHash ) $ "NCDL" .OR. aHash == NIL
? cTxt, aHash
ELSEIF ValType( aHash ) == "A"
FOR EACH oElement IN aHash
ShowJson( oElement, cTxt + "[ " + Ltrim( Str( oElement:__EnumIndex ) ) + " ]" )
NEXT
ELSEIF ValType( aHash ) == "H"
FOR EACH oElement IN aHash
ShowJson( oElement, cTxt + '[ "' + hb_hKeyAt( aHash, oElement:__EnumIndex ) + '" ]' )
NEXT
ELSE
? cTxt, "***** nao identificado ***"
ENDIF
RETURN NIL
metodo post com json x matriz
Enviado: 16 Ago 2020 20:48
por Abel
Muito obrigado, Quintas !!!
deu certo envio, ainda não entendo muito bem de hash
mas usando a cada dia, vou aos poucos dominando esse assunto.
Att
ABEL
metodo post com json x matriz
Enviado: 16 Ago 2020 22:04
por Abel
pessoal, o arquivo PDF esta chegando corrompido,
como eu converto ele para base64 ?
Obrigado desde já.
Abel
metodo post com json x matriz
Enviado: 16 Ago 2020 22:36
por Vlademiro
Use hb_base64encode
metodo post com json x matriz
Enviado: 22 Ago 2020 15:31
por Abel
Pessoal, continuo com dificuldades de mandar email usando API
agora estou testando smt2go.com
isso esta no exemplo de envio deles, e dizem para usar JSON
{
"api_key": "api-40246460336B11E6AA53F23C91285F72",
"to": ["Test Person <
test@example.com>"],
"sender": "Test Persons Friend <
test2@example.com>",
"subject": "Hello Test Person",
"text_body": "You're my favorite test person ever",
"html_body": "<h1>You're my favorite test person ever</h1>",
"custom_headers": [
{
"header": "Reply-To",
"value": "Actual Person <
test3@example.com>"
}
],
"attachments": [
{
"filename": "test.pdf",
"fileblob": "--base64-data--",
"mimetype": "application/pdf"
},
{
"filename": "test.txt",
"fileblob": "--base64-data--",
"mimetype": "text/plain"
}
]
}
O Email estou conseguindo enviar, nao consigo enviar o anexo.
ele esta acusando erro no conteudo de fileblob, lendo vi que tenho que enviar arquivos codificados base64,
meu pdf abre normal na minha maquina, o que devo colocar nessa variavel ?
Obrigado mais uma vez.
Abel
metodo post com json x matriz
Enviado: 22 Ago 2020 17:11
por Vlademiro
Abel,
Coloca o trecho do seu código de envio para a gente ver se acha a causa do problema.
metodo post com json x matriz
Enviado: 22 Ago 2020 17:43
por Abel
vlademiro, descobri,
como estou usando uma API para enviar email, tenho que criar uma string criptografada pelo hb_base64encode e mandar ela no parametro da API
exemplos:
cString:=memoread("carro.pdf")
cString64:=Hb_base64encode(cString,len(cString))
aHash[ "attachments" ] := {}
UmAnexo := hb_hash()
UmAnexo[ "filename" ] := "carro.pdf" // nao consegui fazer enviar o anexo sem corromper.
UmAnexo[ "mimetype" ] := "application/pdf"
UmAnexo[ "fileblob" ] := "&cString64" // --base64-data--"
AAdd( aHash[ "attachments" ], UmAnexo )
//
cJson := hb_jsonEncode(ahash, .T.)
é como se esse codigo gerado fosse uma criptografia para o arquivo ser enviado por email.
o arquivo enviado é o mesmo que na minha maquina abre normalmente (pdf).
a dica acima serve para alguem que queira usar algo parecido.
Att
ABEL
metodo post com json x matriz
Enviado: 22 Ago 2020 22:39
por Vlademiro
Valeu. Assim já fica aqui a dica.
metodo post com json x matriz
Enviado: 22 Ago 2020 23:54
por JoséQuintas
metodo post com json x matriz
Enviado: 23 Ago 2020 15:05
por Abel
Jose Quintas,
tenho um costume de usar macro,
e sei que nao é aconselhavel,
preciso mudar esse habito.
Obrigado pela dica.
Att
ABEL
metodo post com json x matriz
Enviado: 23 Ago 2020 20:44
por JoséQuintas
Tem muitos casos aonde os parênteses resolvem.
Código: Selecionar todos
use ( cPath + cFileName )
SET ALTERNATE TO ( cFileName )
SET PRINTER TO ( cFileName )
RUN ( "notepad.exe" + " " + "arquivo.txt" )
É questão de ir se acostumando e ver aonde realmente é necessário, ou se tem alternativa.
metodo post com json x matriz
Enviado: 25 Ago 2020 23:38
por Abel
Jose Quintas,
realmente nao tinha esse costume SET PRINTER TO ( cFileName )
é a mesma coisa que SET PRINTER TO &cFileName
e eu usando apenas macro
Valeu pela dica.
obrigado,
att,
ABEL