Olá,
Alguém mais experiente com o synapse pode me ajudar? Estou querendo sair do Indy 10 e ir para o Synapse, mas encontro pouca coisa como usá-lo. Eu atualmente uso o Indy 10 para enviar email pela api da SendGrid mas já está dando dor de cabeça com openssl versões mais recentes, mesmo com o Indy mais atualizado. Com o synapse eu consigo autenticar, mas na hora do envio vem uma mensagem de erro conforme descrito abaixo.
//Preenche informações na instancia da classe passando a senha api e parametros de da autenticação.
constructor TSendGrid.Create(sApiKey : String = '');
begin
fContentId := '';
fFilesName := TStringList.Create;
fFileStream:= TList.Create;
fTobcc := TStringList.Create;
if sApiKey <> '' then
fApiKey := Trim(sApiKey);
fHTTPSend := THTTPSend.Create;
fHTTPSend.Clear;
fHTTPSend.Headers.Add('Authorization: Bearer ' + fApiKey);
fHTTPSend.Headers.Add('Content-Type: application/json');
fHTTPSend.Headers.Add('Accept: application/json');
fHTTPSend.Headers.Add('Accept-Encoding: gzip, deflate, br');
fHTTPSend.Protocol := '1.1';
fHTTPSend.Sock.SSL.SSLType := LT_TLSv1_2;
end;
Na hora de enviar eu pego dados montado em Json e jogo pra variável Data que é uma string e jogo no httpsend.Document.Write(), compila e tudo e executa, aí vem o retorno, mas creio que tudo deve ser convertido para base64, enfim, to tentando conhecer essa lib. O Indy é muita coisa para eu usar só um recurso.
function TSendGrid.SendMail: Boolean;
var
Data : string;
begin
if fTobcc.Count > 999+1 then
begin
Application.MessageBox('Cada lote de envio deve ter no máximo 999 emails,'
+ #13#10 + 'faça um loop no seu código para criar lotes nessa ' + #13#10
+ 'quantidade para enviar!', 'Aviso !', MB_OK + MB_ICONSTOP +
MB_DEFBUTTON2);
SysUtils.Abort;
end;
Data := UTF8Encode(GetJsonMail);
fHTTPSend.Document.Clear;
fHTTPSend.Document.Position := 0;
fHTTPSend.Document.Write(Pointer(Data)^, Length(Data) );
fHTTPSend.Sock.OnStatus := OnStatus;
Result := fHTTPSend.HTTPMethod('POST', 'https://api.sendgrid.com/v3/mail/send');
ShowMessage(fHTTPSend.ResultString);
end;
Eu vejo as mensagens no OnStatus, ele retorna o IP, porta que conectou e uns códigos como esse:
667
606
e por último UNSUPPORTED MEDIA TYPE.
Por enquanto eu só envio um texto que está em um Memo.
Segue o link da API https://docs.sendgrid.com/api-reference/how-to-use-the-sendgrid-v3-api/authentication
Com Indy funciona ok, mas ainda estou aprendendo a lib da synapse.