Delphi 使用Sendblue API和TIdHTTP发送电子邮件
我正在尝试通过sendblue api发送电子邮件 使用邮递员应用程序,我可以通过以下方式发送电子邮件: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' \ -
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