Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 765

/ вопрос открыт /

Добрый день/вечер, уважаемые!
Подскажите, как с помощью Делфи(Д2009) отправить письмо с атачем? И если сервер smtp требует аутентификацию(как например gmail.com)?
Что и где надо прописать? Если можно, то с примером
В объектах TidSMTP и TisMessage вроде нету метода - attachment

Заранее, большое спасибо!

Irbis Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Irbis (статус: Посетитель)
Вопрос отправлен: 12 мая 2009, 00:08
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Ученый

Здравствуйте, Irbis! Попробуйте так:

var
IdMessage:TIdMessage;
sm:idsmtp;
begin
IdMessage:=TIdMessage.create(form1);
IdMessage.From.Text:='test_prog@mail.ru';//от кого
IdMessage.Recipients.Add;
IdMessage.Recipients.Items[0].Text:='<'+decoding(sl[4])+'>';// кому
IdMessage.Subject:='Otchot';// тема
sm:=tidsmtp.Create(form1);
sm.Host:=''; //смтп сервер
sm.Username:='';//логин
sm.Password:='';//пароль
TIdAttachmentFile.Create(IdMessage.MessageParts,'c:\tester\Config\Otchot.txt');// путь к файлу
try
sm.Connect();
if sm.Connected then
begin
sm.Send(IdMessage);
end;
sm.Disconnect();
except
end;
end;

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 12 мая 2009, 13:55
Оценка за ответ: 4

Комментарий к оценке: а как на счет авторизации на смтп сервер с TLS?
кстати, не подскажите, у меня стоит 2009 делфи и Инди10, но там только dcu и нету класса TIdAttachment
пробовал взять Инди10 с ихнего сайта, но не смог поставить, ругается на то, что функции с разными параметрами и типы не соответствуют и т.д.
в чем могут быть проблемы?
ставил пакеты правильные - *120.dpk

Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 13 мая 2009, 15:48; участников в обсуждении: 5.
min@y™

min@y™ (статус: Доктор наук), 12 мая 2009, 08:34 [#1]:

В модуле idMessage.pas есть для этого соответствующий класс:
TIdAttachment = class(TIdMessagePart)
  protected
    FContentDisposition: string;
    FFileIsTempFile: boolean;
    FFileName: TFileName;
    //
    function GetContentDisposition: string;
    procedure SetContentDisposition(const Value: string);
  public
    procedure Assign(Source: TPersistent); override;
    constructor Create(Collection: TIdMessageParts; const AFileName: TFileName = ''); reintroduce;
    destructor Destroy; override;
    procedure Encode(ADest: TStream);
    function SaveToFile(const FileName: TFileName): Boolean;
    //
    property ContentDisposition: string read GetContentDisposition write SetContentDisposition;
    property FileIsTempFile: boolean read FFileIsTempFile write FFileIsTempFile;
    property FileName: TFileName read FFileName write FFileName;
  end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
7Ghost

7Ghost (статус: 1-ый класс), 12 мая 2009, 13:51 [#2]:

Не знаю насчет Delphi 2009! Ибо он мне не очень нравится! А вот в Delphi 7 я писал программу для отправки и получения почты через Маил.ру! У меня получилось! Раньше Маил.ру использовал порт 25 теперь похоже 2525! Если ВЫ хотите я могу опубликовать данный код, но только для Delphi 7 и маил.ру(хотя я с маил.ру отправлял и на гугл и на все остальные)! А если хотите с гугла отправлять, то ищите его порт!
Вадим К

Вадим К (статус: Академик), 12 мая 2009, 14:14 [#3]:

А зачем сколько знаков восклицания?
по поводу порта 2525. Стандартным есть 25, но некоторые провайдеры блокируют его (типа пытаются бороться с рассылкой спама). Поэтому многие почтовые службы открывают на запасных портах.
Галочка "подтверждения прочтения" - вселенское зло.
Ученый

Ученый (статус: 8-ой класс), 12 мая 2009, 14:19 [#4]:

Не знаю как на счет авторизации TLS, но вот этот код точно проверялся в Delphi 2009, более того он взят из рабочего проекта.....достаточно бросить на форму IdMessage
idsmtp и код должен работать....
Irbis

Irbis (статус: Посетитель), 12 мая 2009, 14:53 [#5]:

буду признателен за помощь
у меня еще проблема с авторизацией
я уже демаю, может мои админы на работе закрыли порта. может ли такое быть? и могу ли я как то это проверить?
Ученый

Ученый (статус: 8-ой класс), 12 мая 2009, 14:57 [#6]:

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

Вадим К (статус: Академик), 12 мая 2009, 15:08 [#7]:

Да, могли закрыть, кто им мешает. Но если это гугл, то рекомендую начать внимательно чтение с страницы http://mail.google.com/support/bin/topic.py?hl=ru&topic=12805
Как минимум следует помнит, что у гугла порты другие....(465). И мало того, pop/smpt может быть отключено в настройках. В других почтовых служб может быть похоже.
А у hotamail.com до недавнего времени вообще не было pop/smtp.... А outlook бегал по специальному закрытому протоколу.
Галочка "подтверждения прочтения" - вселенское зло.
Irbis

Irbis (статус: Посетитель), 12 мая 2009, 18:29 [#8]:

за гугл я помню, у меня там есть ящик и я бат на него настраивал, все работает
спасибо за помощь, вечером дома проверю
Irbis

Irbis (статус: Посетитель), 13 мая 2009, 15:30 [#9]:

2 Ученый:
если вам не трудно, можете мне переслать исходники вашего Indy для Д2009
у меня наверное он какой то не полный, там нету модуля IdAttachment
я брал исходники с ихнего сайта, но поставить не смог
вылазат ошибки, что функции не правильно описаны и параметры не совпадают. вот одна из ошибок в функции Stub_WSALookupServiceBegin в модуле IdWinSock2.pas:
IdWinsock2.pas(5558): E2033 Types of actual and formal var parameters must be identical
или в функции TIdStackWindows.HostToNetwork в модуле IdStackWindows:
L := HToNL(LParts.HighPart);
говорит что HighPart метод не найден
я не силен что Indy делает, но сам руками не хочу что то править, так как не уверен что это будет верно
2 All: может ли кто то чем то помочь?
Вадим К

Вадим К (статус: Академик), 13 мая 2009, 15:33 [#10]:

А зачем брать сорцы с ихнего сайта, если они идут с делфи???
К тому же, от версии к версии разрабы инди иногда так перелопачивают исходники, что за голову берёшся.
Поэтому я даже не буду удивляться, если мне скажут, что инди, которая хорошо компилируются под 2007, не хочет под 2009.
Галочка "подтверждения прочтения" - вселенское зло.
Irbis

Irbis (статус: Посетитель), 13 мая 2009, 15:35 [#11]:

проблема с smtp сервером и авторизацией решилась нормально
мне выделили отдельный аккаунт и дали доступ к нашему smtp:)
теперь вот осталась проблема с атачем
я не могу даже написать типа - uses IdAttachment
нету у меня такого модуля:(
Irbis

Irbis (статус: Посетитель), 13 мая 2009, 15:48 [#12]:

еще нашел странное
есть вот такой метод:
IdMessage.DoCreateAttachment
у него 2 параметра. первый типа Tstrings, а второй - TIdAttachments
но вот создать объект типа TIdAttachments, я не могу
говорит нету такого типа...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.03 сек.