Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки доступа при отправке электронных писем с вложениями в Indy и Delphi

Delphi , Интернет и Сети , E-mail

Введение

При работе с библиотекой Indy в среде разработки Delphi может возникнуть проблема с ошибкой доступа при попытке отправить электронное письмо с вложениями. Indy - это мощный набор компонентов для работы с протоколами интернета, который часто используется в проектах на Delphi для реализации функционала по работе с электронной почтой.

Описание проблемы

Разработчик столкнулся с ошибкой "access violation" при попытке добавить вложение к электронному письму. Ошибка возникает после добавления следующих трех строк кода:

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

При этом отправка письма без вложений проходит успешно.

Анализ проблемы

Проблема заключается в неправильном создании экземпляра TIdAttachmentFile. Разработчик пытается установить свойство ContentType для объекта, который не был правильно инициализирован.

Исправление

Для корректной работы с вложениями необходимо создать экземпляр TIdAttachmentFile и присвоить его результат переменной, после чего уже можно устанавливать свойства этого объекта:

var
  Attachment: TIdAttachmentFile;
  IdEnviar: TIdMessage;
begin
  // Другие операции...

  Attachment := TIdAttachmentFile.Create(IdEnviar.MessageParts, 'c:\file.png');
  Attachment.ContentType := 'multipart/mixed';
  // Продолжение работы с письмом...
end;

Пример кода

Далее представлен полный пример кода, который демонстрирует корректное создание и отправку электронного письма с вложением:

program SendEmailWithAttachment;

{$APPTYPE CONSOLE}

uses
  IdGlobal,
  IdMessage,
  IdAttachmentFile,
  IdSMTP,
  IdSSLIOHandlerSocketOpenSSL;

var
  IdSMTP1: TIdSMTP;
  IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
  IdEnviar: TIdMessage;
  Attachment: TIdAttachmentFile;

begin
  IdSMTP1 := TIdSMTP.Create(nil);
  try
    IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      IdSSLIOHandlerSocketOpenSSL1.IOHandler := TIdIOHandlerSocket.Create(nil);
      IdSSLIOHandlerSocketOpenSSL1.SSLVersion := sslvTLSv1_2;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions := [soAutoCheckPeer];
      IdSSLIOHandlerSocketOpenSSL1.Host := 'smtp.gmail.com';
      IdSSLIOHandlerSocketOpenSSL1.Port := 587;
      IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
      IdSMTP1.OnLogging := OnSendEmail;
      IdSMTP1.TLS := True;
      IdSMTP1.Username := 'your_email@gmail.com';
      IdSMTP1.Password := 'your_password';

      IdEnviar := TIdMessage.Create(nil);
      try
        IdEnviar.Recipients.EMailAddresses := 'recipient_email@example.com';
        IdEnviar.Subject := 'Test Subject';
        IdEnviar.Body.TextType := 'text/plain';
        IdEnviar.Body.Text := 'This is a sample email with an attachment.';
        IdEnviar.MessageParts.Clear;
        Attachment := TIdAttachmentFile.Create(IdEnviar.MessageParts, 'c:\file.png');
        Attachment.ContentType := 'application/octet-stream';
        Attachment.ContentDisposition := 'attachment; filename="file.png"';
        IdSMTP1.AuthMode := smtpoAuthAuto;
        IdSMTP1.Send(IdEnviar);
      finally
        IdEnviar.Free;
      end;
    finally
      IdSSLIOHandlerSocketOpenSSL1.Free;
    end;
  finally
    IdSMTP1.Free;
  end;

  {$IFNDEF UNIX}Readln;{$ENDIF}
end.

Заключение

При работе с вложениями в Indy важно правильно создавать экземпляры компонентов и корректно управлять их свойствами. Исправление, предложенное в данной статье, поможет избежать ошибок доступа и успешно отправить электронное письмо с вложениями.

Создано по материалам из источника по ссылке.

Устранение ошибки доступа при отправке электронного письма с вложением в среде Delphi с использованием библиотеки Indy.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: E-mail ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 16:58:57/0.0034990310668945/0