Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 621 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.

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
  • Este tópico foi criado há 621 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...