【问题标题】:Access violation on send email with attachment发送带附件的电子邮件时访问冲突
【发布时间】:2015-01-01 22:10:23
【问题描述】:
var
  IdEnviar: TIdMessage;

如果我发送电子邮件,它可以正常工作

IdSSLIOHandlerSocketOpenSSL1.Host :=  'smtp.gmail.com';
IdSSLIOHandlerSocketOpenSSL1.Port := 587;

但如果我尝试添加附件添加这 3 行:

IdEnviar.MessageParts.Clear;
IdAttachmentFile1.Create(IdEnviar.MessageParts, 'c:\file.png');
IdAttachmentFile1.ContentType := 'multipart/mixed';

我收到访问冲突错误。

我正在使用最后的 indy10 文件

【问题讨论】:

  • 你知道如何创建实例吗? MyFoo := TFoo.Create;
  • 我想我有所有对象的实例 IdSMTP1:=TIdSmtp.Create(nil); IdSSLIOHandlerSocketOpenSSL1:=TIdSSLIOHandlerSocketOpenSSL.Create(nil); IdEnviar:=TIdMessage.Create(nil);代码编译正确,如果我不使用附件,电子邮件发送正常,我的问题是附件
  • 那么IdAttachmentFile1.Create(IdEnviar.MessageParts, 'c:\file.png');呢?
  • 你的意思是把它添加到var中吗?我也这样做了 var IdAttachmentFile1:TIdAttachmentfile;
  • 我的意思是你应该用TIdAttachmentFile.Create(...)创建一个实例,这就是你必须创建一个实例的方式

标签: delphi smtp gmail delphi-7 indy


【解决方案1】:

您的代码包含严重错误:

IdAttachmentFile1.ContentType := 'multipart/mixed';

您未能正确创建 TIdAttachmentFile,因此您尝试在不存在的对象上设置属性,从而获取 AV。

完成此操作的正确方法是将TIdAttachmentFile.Create 的结果分配给一个变量,然后设置该变量的ContentType

var
  Attachment: TIdAttachmentFile;

Attachment := TIdAttachmentFile.Create(IdEnviar.MessageParts, 'c:\file.png');
Attachment.ContentType := 'multipart/mixed';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 2018-06-13
    • 2020-01-17
    • 2014-04-23
    • 2019-03-09
    • 2015-09-09
    相关资源
    最近更新 更多