【发布时间】:2013-01-29 01:30:24
【问题描述】:
我正在使用 Indy TIdHTTP 组件,并且能够使用以下函数通过 sendgrid API 成功发送电子邮件。 sendgrid api 文档可以在here找到。
现在我的任务是包含文件附件。在 API 文档中它指出:文件内容必须是多部分 HTTP POST 的一部分
我尝试修改我的函数以包含 TIdMultipartFormDataStream,但没有成功。
我应该如何修改代码以支持文件附件?
procedure SendGridEmailProc;
var
IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocketOpenSSL;
mString: string;
mParams: TStringList;
i: Integer;
begin
try
mParams := TStringList.Create;
IdHTTP1 := TIdHTTP.create(nil);
IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocketOpenSSL.create(nil);
with IdSSLIOHandlerSocket1 do begin
SSLOptions.Method := sslvSSLv3;
SSLOptions.Mode := sslmUnassigned;
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 2;
end;
with IdHTTP1 do begin
IOHandler := IdSSLIOHandlerSocket1;
end;
mParams.Add('api_user=xxxxx');
mParams.Add('api_key=xxxxx');
mParams.Add('to=xxxxxx');
mParams.Add('from=xxxxx');
mParams.Add('subject=test:'+datetimetostr(now));
mParams.Add('text=this is a test');
IdHTTP1.Post('https://sendgrid.com/api/mail.send.xml',mParams);
finally
mParams.Free;
idhttp1.free;
IdSSLIOHandlerSocket1.Free;
end;
end;
【问题讨论】:
-
无论如何,SendGrid has SMTP support,所以我很想知道,你为什么要尝试使用网络请求。
-
好点。具有讽刺意味的是,我是从 TIdSMTP 移植这个的。知道他们有一个 SMTP 组件后,我需要做的就是替换一些服务器值和凭据!无论如何,我希望其他人觉得这很有用。