Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 1202 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Olá pessoal.

Estou tentando usar essa API : https://painel.mailgrid.com.br/api/api_smtp.pdf

Tentei de várias maneiras, todas recebo que falta algum parâmetro.

Com o Indy:

procedure TForm2.SpeedButton4Click(Sender: TObject);
var
   sResponse: string;
   JsonToSend: TStringStream;
   _idHttp : TIdHTTP;
   _SSLHandler : TIdSSLIOHandlerSocketOpenSSL;
   Params: TIdMultipartFormDataStream;

begin
   try
      try
         _idHttp := TIdHTTP.Create;
         _SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
         _SSLHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
         _idHttp.IOHandler := _SSLHandler;
         _idHttp.HandleRedirects := True;
         _idHttp.Request.Clear;
         _idHttp.ProtocolVersion := pv1_1;
         _idHttp.ConnectTimeout := 15000;
         _idHttp.HandleRedirects := True;
         _idHttp.Request.AcceptEncoding := 'application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
         _idHttp.Request.Connection := 'keep-alive';
         _idHttp.Request.Accept := '*/*';
         _idHttp.Request.ContentType := 'application/json';

         Params := TIdMultipartFormDataStream.Create;
         Params.AddFormField('host_smtp',vHost.Text);
         Params.AddFormField('usuario_smtp',vUser.Text);
         Params.AddFormField('senha_smtp',vSenhaSMTP.Text);
         Params.AddFormField('emailRemetente', vEmailRemet.Text);
         Params.AddFormField('emailDestino', '['+vEmailDest.Text+']');
         Params.AddFormField('assunto', vAssunto.Text);
         Params.AddFormField('mensagem', mMsg.Lines.Text);

         _idHttp.Request.CustomHeaders.Add('Content-Type: application/json');
         sResponse := _idHttp.Post('https://painel.mailgrid.com.br/api', Params);
      except
            on e: Exception  do
            begin
                 ShowMessage(E.Message);
            end;
      end;
   finally
          Params.Free;
          _SSLHandler.Free;
          _idHttp.Free;
   end;
   Memo2.Lines.Clear;
   Memo2.Lines.Text := sResponse;
end;

 

E com o REST:

function TForm2.ExecuteWSTokenExemplo02: WideString;
var
   Json: string;
   restClient: TRESTClient;
   restRequest: TRESTRequest;
   restResponse: TRESTResponse;
   JsonToSend: TStringStream;

begin
    restClient := TRESTClient.Create('https://painel.mailgrid.com.br/api/');
    restRequest := TRESTRequest.Create(restClient);
    restResponse := TRESTResponse.Create(restClient);

    Json := AnsiReplaceText(Memo1.Lines.Text, #13#10, '');
    JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);

    Memo2.Lines.Clear;

    Memo2.Lines.Add(JsonToSend.ToString);

    Memo2.Lines.Add(' ');
    Memo2.Lines.Add(' ');

    try
      try
        restClient.BaseURL := 'https://painel.mailgrid.com.br/api/';
        restClient.AcceptCharset := 'UTF-8';
        restClient.ContentType := 'application/json';
        restResponse.ContentType := 'application/json';
        restRequest.Client := restClient;
        restRequest.Method := rmPOST;
        restRequest.AcceptCharset := 'UTF-8';
        restRequest.Response := restResponse;

        restRequest.Params.Clear;
        restRequest.AddParameter('Content-Type','application/json',pkHTTPHEADER);

        restRequest.AddBody(JsonToSend);

        restRequest.Execute;

        result := restResponse.Content;
      except
        on e: Exception do
        begin
          result := 'Erro: ' + e.Message + ' JSON/TEXT: ' + restResponse.Content;
        end
      end;
    finally
      restRequest.Free;
      restResponse.Free;
      restClient.Free;
      JsonToSend.Free;
    end;
end;

 

Alguém pode dar uma luz?

Desde já agradeço.

 

 

Editado por OldProgramer
Postado
1 hora atrás, Juliomar Marchetti disse:

Testou lá com o postman?

Opa Juliomar, blz?

Já sim. Foi Ok.

Por isso mandei com Indy inicialmente pra gerar o json por um memo a título de teste. Agora tentei assim e tbm deu 'faltam parâmetros'.

procedure TForm2.SpeedButton3Click(Sender: TObject);
var
   Json: string;
   sResponse: string;
   JsonToSend: TStringStream;
   _idHttp : TIdHTTP;
   _SSLHandler : TIdSSLIOHandlerSocketOpenSSL;
   aBody: TStringList;
   aResponse: TMemoryStream;

begin
   try
      try
         _idHttp := TIdHTTP.Create;
         aResponse := TMemoryStream.Create;
         aBody := TStringList.Create;
         _SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
         _SSLHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
         _idHttp.IOHandler := _SSLHandler;
         _idHttp.HandleRedirects := True;
         _idHttp.Request.Clear;
         _idHttp.ProtocolVersion := pv1_1;
         _idHttp.ConnectTimeout := 15000;
         _idHttp.HandleRedirects := True;
         _idHttp.Request.AcceptEncoding := 'application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
         _idHttp.Request.Connection := 'keep-alive';
         _idHttp.Request.Accept := '*/*';
         _idHttp.Request.ContentType := 'application/json';
         Json := AnsiReplaceText(Memo1.Lines.Text, #13#10, '');
         JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);
         _idHttp.Request.CustomHeaders.Add('Content-Type: application/json');
         sResponse := _idHttp.Post('https://painel.mailgrid.com.br/api', JsonToSend);
      except
            on e: Exception  do
            begin
                 ShowMessage(E.Message);
            end;
      end;
   finally
          JsonToSend.Free;
          aBody.Free;
          aResponse.Free;
          _SSLHandler.Free;
          _idHttp.Free;
   end;
   Memo2.Lines.Clear;
   Memo2.Lines.Text := sResponse;
end;

 

Mail.JPG

Postado (editado)
16 minutos atrás, OldProgramer disse:

Opa Juliomar, blz?

Já sim. Foi Ok.

Por isso mandei com Indy inicialmente pra gerar o json por um memo a título de teste. Agora tentei assim e tbm deu 'faltam parâmetros'.

procedure TForm2.SpeedButton3Click(Sender: TObject);
var
   Json: string;
   sResponse: string;
   JsonToSend: TStringStream;
   _idHttp : TIdHTTP;
   _SSLHandler : TIdSSLIOHandlerSocketOpenSSL;
   aBody: TStringList;
   aResponse: TMemoryStream;

begin
   try
      try
         _idHttp := TIdHTTP.Create;
         aResponse := TMemoryStream.Create;
         aBody := TStringList.Create;
         _SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
         _SSLHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
         _idHttp.IOHandler := _SSLHandler;
         _idHttp.HandleRedirects := True;
         _idHttp.Request.Clear;
         _idHttp.ProtocolVersion := pv1_1;
         _idHttp.ConnectTimeout := 15000;
         _idHttp.HandleRedirects := True;
         _idHttp.Request.AcceptEncoding := 'application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
         _idHttp.Request.Connection := 'keep-alive';
         _idHttp.Request.Accept := '*/*';
         _idHttp.Request.ContentType := 'application/json';
         Json := AnsiReplaceText(Memo1.Lines.Text, #13#10, '');
         JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);
         _idHttp.Request.CustomHeaders.Add('Content-Type: application/json');
         sResponse := _idHttp.Post('https://painel.mailgrid.com.br/api', JsonToSend);
      except
            on e: Exception  do
            begin
                 ShowMessage(E.Message);
            end;
      end;
   finally
          JsonToSend.Free;
          aBody.Free;
          aResponse.Free;
          _SSLHandler.Free;
          _idHttp.Free;
   end;
   Memo2.Lines.Clear;
   Memo2.Lines.Text := sResponse;
end;

 

Mail.JPG

Aliás, com esse código aí agora enviou, mas complica pra enviar anexos.

No guia da API apenas informam:

anexoContent -  arquivo codificado em base64 (Data URI) - Opcional

anexoFileName - nome do arquivo a ser enviado - Opcional

anexoType tipo Mime - do arquivo a ser anexado (ex: image/jpeg) - Opcional

 

Editado por OldProgramer
Errata
Postado

Para registrar, adicionei:

vFile := TFileStream.Create('NF16335.pdf', fmOpenRead);

// e adicionei no stringlist de envio

stEnvio.Add(EncodeBase64(ReadStrFromStream(vFile, vFile.Size)));
stEnvio.Add(',"anexoFileName":"NF16335.pdf"');
stEnvio.Add(',"anexoType":"application/octet-stream;base64"');
stEnvio.Add(',"anexoContent":"'+Memo3.Lines.Text+'"');

E o anexo seguiu normalmente.

  • Moderadores
Postado (editado)
1 hora atrás, OldProgramer disse:

Para registrar, adicionei:

vFile := TFileStream.Create('NF16335.pdf', fmOpenRead);

// e adicionei no stringlist de envio

stEnvio.Add(EncodeBase64(ReadStrFromStream(vFile, vFile.Size)));
stEnvio.Add(',"anexoFileName":"NF16335.pdf"');
stEnvio.Add(',"anexoType":"application/octet-stream;base64"');
stEnvio.Add(',"anexoContent":"'+Memo3.Lines.Text+'"');

E o anexo seguiu normalmente.

não seria melhor stEnvio.Add(',"anexoType":"application/pdf;base64"'); ?

para quem usar e-mail em navegador poder ver um resumo ou todo ele sem a necessidade de baixar.

pois os navegadores reconhecem tipos específicos para tarefas especificas.

mas o importante é que esta funcionando.

foi só uma dica.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

Editado por datilas
  • Curtir 1
  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 1202 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...