Delphi 使用Sendblue API和TIdHTTP发送电子邮件

Delphi 使用Sendblue API和TIdHTTP发送电子邮件,delphi,indy10,delphi-10.3-rio,Delphi,Indy10,Delphi 10.3 Rio,我正在尝试通过sendblue api发送电子邮件 使用邮递员应用程序,我可以通过以下方式发送电子邮件: curl -X POST \ https://api.sendinblue.com/v3/smtp/email \ -H 'Accept-Encoding: gzip, deflate' \ -H 'Cache-Control: no-cache' \ -H 'Connection: keep-alive' \ -H 'Content-Length: 497' \ -

我正在尝试通过sendblue api发送电子邮件

使用邮递员应用程序,我可以通过以下方式发送电子邮件:

curl -X POST \
  https://api.sendinblue.com/v3/smtp/email \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Length: 497' \
  -H 'Cookie: __cfduid=d49b2d4eb12e019d10adc31e48c2682001573229677' \
  -H 'Host: api.sendinblue.com' \
  -H 'Postman-Token: 79980bf9-b0f5-442d-a93e-0835ef471bac,6653fb5c-29da-4a00-83bc-cecb1c70b0bb' \
  -H 'User-Agent: PostmanRuntime/7.19.0' \
  -H 'accept: application/json' \
  -H 'api-key: xkeysib-728f8759d3fdbasdasdasdasd5asdsq083a48387459eba9cc57f9ad7904e-dqLADTR6vxw4y3GQ' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{  
   "sender":{  
      "name":"Sender Alex",
      "email":"gestaaloud@outlook.com"
   },
   "to":[  
      {  
         "email":"cprmlasasaao@gmail.com",
         "name":"John Doe"
      }
   ],
   "subject":"test mail",
   "htmlContent":"<html><head></head><body><h1>Hello this is a test email from sib</h1></body></html>",
   "headers":{  
      "X-Mailin-custom":"custom_header_1:custom_value_1|custom_header_2:custom_value_2|custom_header_3:custom_value_3",
      "charset":"iso-8859-1"
   }
}'
curl-X POST\
https://api.sendinblue.com/v3/smtp/email \
-H'接受编码:gzip,deflate'\
-H'缓存控制:无缓存'\
-H'连接:保持活力'\
-H'内容长度:497'\
-H'Cookie:uu cfduid=d49b2d4eb12e019d10adc31e48c2682001573229677'\
-H'主机:api.sendinblue.com'\
-H'邮递员代币:79980bf9-b0f5-442d-a93e-0835ef471bac,6653fb5c-29da-4a00-83bc-cecb1c70b0bb'\
-H'用户代理:PostmanRuntime/7.19.0'\
-H'accept:application/json'\
-H'api键:xkeysib-728F8759D3FDBASDASDSD5ASDSQ083A483874559EBA9CC57F9AD7904E-dqLADTR6vxw4y3GQ'\
-H'缓存控制:无缓存'\
-H'内容类型:应用程序/json'\
-d'{
“发件人”:{
“姓名”:“发件人Alex”,
“电子邮件”:gestaaloud@outlook.com"
},
“致”:[
{  
“电子邮件”:cprmlasasaao@gmail.com",
“姓名”:“约翰·多伊”
}
],
“主题”:“测试邮件”,
“htmlContent”:“您好,这是来自sib的测试电子邮件”,
“标题”:{
“X-Mailin-custom”:“custom_header_1:custom_值_1 | custom_header_2:custom_值_2 | custom_header_3:custom_值_3”,
“字符集”:“iso-8859-1”
}
}'
我使用delphi 10.3和indy完成了下一个发送电子邮件的功能,但是我得到了一个404错误。我做错了什么

procedure Test_Email();
var  fIdHTTP : TIdHTTP;
     hdlSocket:TIdSSLIOHandlerSocketOpenSSL;
     RequestUTF8 : TStringStream;
     js,jso : TJSONobject;
     ja :TJsonArray;
     function GetJsonMail: String;
      begin
      js := TJSONobject.Create;
      try
         jso:= TJSONobject.Create;
         jso.AddPair(TJSONPair.Create('name'  , 'Gestan'));
         jso.AddPair(TJSONPair.Create('email'  , 'gestancsadfasd@outlook.com'));
         js.AddPair('sender',jso);

         ja := TJSONArray.Create;
         jso:= TJSONobject.Create;
         jso.AddPair(TJSONPair.Create('email'  , 'cprmlasdaao@gmail.com'));
         jso.AddPair(TJSONPair.Create('name'  , 'Luiz'));
         ja.AddElement(jso);
         js.AddPair(TJSONPair.Create('to'  , ja));


         js.AddPair(TJSONPair.Create('subject'  , 'Teste email'));
         js.AddPair(TJSONPair.Create('htmlContent'  , '<b>Teste email</b>'));

         jso:= TJSONobject.Create;
         jso.AddPair(TJSONPair.Create('X-Mailin-custom'  , 'custom_header_1:custom_value_1|custom_header_2:custom_value_2|custom_header_3:custom_value_3'));
         jso.AddPair(TJSONPair.Create('charset'  , 'iso-8859-1'));
         js.AddPair(TJSONPair.Create('headers'  , jso));
         result:=js.ToJSON;
      finally
          js.Free;
      end;
   end;
begin
  fIdHTTP := TIdHTTP.Create(nil);
  with fIdHTTP do
  begin
    Request.Clear;
    Request.CustomHeaders.AddValue('api-key',API_KEY_BLUE);
    Request.ContentType := 'application/json';
    Request.Accept := 'application/json';
    Request.CharSet := 'iso-8859-1';
    HTTPOptions := [];
    Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
    HandleRedirects := true;
    hdlSocket:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    with hdlSocket do
    begin
      SSLOptions.Method := sslvSSLv23;
      SSLOptions.Mode := sslmUnassigned;
      SSLOptions.VerifyMode := [];
      SSLOptions.VerifyDepth := 2;
    end;
    IOHandler := hdlSocket;
  end;

  RequestUTF8 := TStringStream.Create(GetJsonMail,TEncoding.UTF8);
  try
    fIdHTTP.Post('https://api.sendinblue.com/v3/email', RequestUTF8);
  finally
    RequestUTF8.Free;
    fIdHTTP.Free;
  end;
end;
procedure Test_Email();
var-fIdHTTP:TIdHTTP;
hdlSocket:TIdSSLIOHandlerSocketOpenSSL;
请求utf8:TStringStream;
js,jso:TJSONobject;
ja:TJsonArray;
函数GetJsonMail:String;
开始
js:=TJSONobject.Create;
尝试
jso:=TJSONobject.Create;
AddPair(TJSONPair.Create('name','Gestan');
AddPair(TJSONPair.Create('email','gestancsadfasd@outlook.com'));
js.AddPair('sender',jso);
ja:=TJSONArray.Create;
jso:=TJSONobject.Create;
AddPair(TJSONPair.Create('email','cprmlasdaao@gmail.com'));
AddPair(TJSONPair.Create('name','Luiz');
ja.附录(jso);
AddPair(TJSONPair.Create('to',ja));
AddPair(TJSONPair.Create('subject','Teste-email');
AddPair(TJSONPair.Create('htmlContent','Teste email');
jso:=TJSONobject.Create;
jso.AddPair(TJSONPair.Create('X-Mailin-custom','custom_header_1:custom_value_1 | custom_header_2:custom_value_2 | custom_header_3:custom_value_3');
jso.AddPair(TJSONPair.Create('charset','iso-8859-1');
AddPair(TJSONPair.Create('headers',jso));
结果:=js.ToJSON;
最后
免费;
结束;
结束;
开始
fIdHTTP:=TIdHTTP.Create(nil);
用fiddo
开始
请求。清除;
Request.CustomHeaders.AddValue('api-key',api\u key\u BLUE);
Request.ContentType:=“应用程序/json”;
Request.Accept:='application/json';
Request.CharSet:=“iso-8859-1”;
HTTPOptions:=[];
Request.UserAgent:=“Mozilla/5.0(Windows NT 6.1;WOW64;rv:12.0)Gecko/20100101 Firefox/12.0”;
HandleRedirects:=真;
hdlSocket:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
使用hdlSocket do
开始
方法:=SSLV23;
SSLOptions.Mode:=sslmUnassigned;
SSLOptions.VerifyMode:=[];
SSLOptions.VerifyDepth:=2;
结束;
IOHandler:=hdlSocket;
结束;
RequestUTF8:=TStringStream.Create(GetJsonMail,TEncoding.UTF8);
尝试
fIdHTTP.Post('https://api.sendinblue.com/v3/email,请求UTF8);
最后
请求utf8.Free;
免费;
结束;
结束;

HTTP响应代码404表示您正在发布到一个不存在的URL。查看curl和
TIdHTTP
调用使用的URL。它们是不同的URL。curl代码正在发布到此URL:

但是您的
TIdHTTP
代码正在发布到此URL:

看到区别了吗

您的
TIdHTTP
代码也没有设置与curl代码相同的所有HTTP头。特别是,缺少“邮递员令牌”和“Cookie”头

试试这个:

procedure Test_Email();
变量
fIdHTTP:TIdHTTP;
hdlSocket:TIdSSLIOHandlerSocketOpenSSL;
请求utf8:TStringStream;
函数GetJsonMail:String;
变量
js,jso:TJSONObject;
ja:TJSONArray;
开始
js:=TJSONObject.Create;
尝试
jso:=TJSONObject.Create;
尝试
jso.AddPair('name','Gestan');
jso.AddPair('email','gestancsadfasd@outlook.com');
js.AddPair('sender',jso);
除了
jso.Free;
提高;
结束;
ja:=TJSONArray.Create;
尝试
jso:=TJSONObject.Create;
尝试
jso.AddPair('email','cprmlasdaao@gmail.com');
jso.AddPair('name','Luiz');
ja.附录(jso);
除了
jso.Free;
提高;
结束;
js.AddPair('to',ja);
除了
ja.免费;
提高;
结束;
js.AddPair('subject','Teste email');
js.AddPair('htmlContent','Teste email');
jso:=TJSONObject.Create;
尝试
jso.AddPair('X-Mailin-custom','custom_header_1:custom_value_1 | custom_header_2:custom_value_2 | custom_header_3:custom_value_3');
jso.AddPair('charset','iso-8859-1');
js.AddPair('headers',jso);
除了
jso.Free;
提高;
结束;
结果:=js.ToJSON;
最后
免费;
结束;
结束;
开始
fIdHTTP:=TIdHTTP.Create(nil);
尝试
fIdHTTP.Request.CustomHeaders.AddValue('api-key',api\u key\u BLUE);
AddValue('Postman-Token','…');
fIdHTTP.Request.CustomHeaders.AddValue('Cookie','cfduid=…');
fIdHTTP.Request.ContentType:=“应用程序/json”;
fIdHTTP.Request.Accept:=“应用程序/json”;
fIdHTTP.Request.CacheControl:=“无缓存”;
fIdHTTP.Request.UserAgent:='Mozilla/5.0(Windows NT 6.1;WOW64;rv:12.0)Gecko/2