使用Indy TidHttp组件通过sendgrid发送电子邮件文件附件

编程入门 行业动态 更新时间:2024-10-21 16:06:58
本文介绍了使用Indy TidHttp组件通过sendgrid发送电子邮件文件附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用Indy TIdHTTP 组件,并且能够使用以下功能通过sendgrid API成功发送电子邮件。您可以在此处找到。

现在我的任务是包括文件附件。在API文档中,它指出:文件内容必须是多部分HTTP POST的一部分

我试图修改函数以包括 TIdMultipartFormDataStream 失败。

我应该如何修改代码以支持文件附件?

过程SendGridEmailProc; var IdHTTP1:TIdHTTP; IdSSLIOHandlerSocket1:TIdSSLIOHandlerSocketOpenSSL; mString:字符串; mParams:TStringList; i:整数; 开始尝试 mParams:= TStringList.Create; IdHTTP1:= TIdHTTP.create(nil); IdSSLIOHandlerSocket1:= TIdSSLIOHandlerSocketOpenSSL.create(nil); 与IdSSLIOHandlerSocket1开始 SSLOptions.Method:= sslvSSLv3; SSLOptions.Mode:= sslmUnassigned; SSLOptions.VerifyMode:= []; SSLOptions.VerifyDepth:= 2; 结尾; 与IdHTTP1一起开始 IOHandler:= IdSSLIOHandlerSocket1; 结尾; 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(’sendgrid/api/mail.send.xml’,mParams); 最终个mParams。 idhttp1.free; IdSSLIOHandlerSocket1.Free; 结尾; 结尾;

解决方案

尝试以这种方式进行操作(请注意,未经测试):

使用 IdException,IdHTTP,IdSSLOpenSSL,IdMultipartFormData; 过程SendGridEmailProc; var HTTPClient:TIdHTTP; 参数:TIdMultiPartFormDataStream; SSLHandler:TIdSSLIOHandlerSocketOpenSSL; 开始 HTTPClient:= TIdHTTP.Create(nil); 试试 SSLHandler:= TIdSSLIOHandlerSocketOpenSSL.Create(nil); 试试 SSLHandler.SSLOptions.Method:= sslvSSLv3; SSLHandler.SSLOptions.Mode:= sslmUnassigned; SSLHandler.SSLOptions.VerifyMode:= []; SSLHandler.SSLOptions.VerifyDepth:= 2; HTTPClient.IOHandler:= SSLHandler; 参数:= TIdMultiPartFormDataStream.Create; 试试 Parameters.AddFormField('api_user','xxxxx'); Parameters.AddFormField('api_key','xxxxx'); Parameters.AddFormField('to','xxxxxx'); Parameters.AddFormField('from','xxxxx'); Parameters.AddFormField('subject','test:'+ DateTimeToStr(Now)); Parameters.AddFormField('text','this is a test'); //注意,您需要为文件使用相同的文件名[] //标识符,并且应显式指定 //类型的内容满足帮助 Parameters.AddFile('files [file.jpg]','c:\file.jpg','application / octet-stream')中显示的HTTP转储的文件字段; 试试 HTTPClient.Post(’sendgrid/api/mail.send.xml’,参数); ,但E:EIdException上的除外$ do $$ ShowMessage(E.ClassName +’:’+ E.Message); 结尾; 最终 Parameters.Free; 结尾; 最后 SSLHandler.Free; 结尾; 最终 HTTPClient.free; 结尾; 结尾;

I am using the Indy TIdHTTP component and am successfully able to send emails via the sendgrid API using the following function. The sendgrid api documentation can be found here.

Now I am tasked with including file attachments. In the API documentation it states: The file contents must be part of the multipart HTTP POST

I have attempted to modify my function to include the TIdMultipartFormDataStream with no success.

How should I modify the code to support file attachments?

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('sendgrid/api/mail.send.xml',mParams); finally mParams.Free; idhttp1.free; IdSSLIOHandlerSocket1.Free; end; end;

解决方案

Try to do it this way (note, that it's untested):

uses IdException, IdHTTP, IdSSLOpenSSL, IdMultipartFormData; procedure SendGridEmailProc; var HTTPClient: TIdHTTP; Parameters: TIdMultiPartFormDataStream; SSLHandler: TIdSSLIOHandlerSocketOpenSSL; begin HTTPClient := TIdHTTP.Create(nil); try SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); try SSLHandler.SSLOptions.Method := sslvSSLv3; SSLHandler.SSLOptions.Mode := sslmUnassigned; SSLHandler.SSLOptions.VerifyMode := []; SSLHandler.SSLOptions.VerifyDepth := 2; HTTPClient.IOHandler := SSLHandler; Parameters := TIdMultiPartFormDataStream.Create; try Parameters.AddFormField('api_user', 'xxxxx'); Parameters.AddFormField('api_key', 'xxxxx'); Parameters.AddFormField('to', 'xxxxxx'); Parameters.AddFormField('from', 'xxxxx'); Parameters.AddFormField('subject', 'test:' + DateTimeToStr(Now)); Parameters.AddFormField('text', 'this is a test'); // note, that you need to use the same file name for the files[] // identifier and that you should explicitly specify the content // type for a file field to meet the HTTP dump shown in the help Parameters.AddFile('files[file.jpg]', 'c:\file.jpg', 'application/octet-stream'); try HTTPClient.Post('sendgrid/api/mail.send.xml', Parameters); except on E: EIdException do ShowMessage(E.ClassName + ': ' + E.Message); end; finally Parameters.Free; end; finally SSLHandler.Free; end; finally HTTPClient.free; end; end;

更多推荐

使用Indy TidHttp组件通过sendgrid发送电子邮件文件附件

本文发布于:2023-11-06 06:37:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1562961.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组件   发送电子邮件   附件   文件   Indy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!