Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Отправка E-Mail


Автор: Vex 13.11.2002, 08:01
Пример отправки письма через COM Interface Outlook не работает, т.к. нет Outlook_TLB - где его можно достать? И можно ли так отправлять письмо, если Аутлуку неизвестен SMTP сервер? (пример взял из фака)

Код

uses  Outlook_TLB;
var outlook : _application;

Procedure Init;
begin  
outlook := Coapplication_.Create;
end;

procedure SendEmail;
begin  with Outlook.CreateItem(olMailItem) as mailitem do
   begin
     To_ := '[email protected]';
     cc:='[email protected]';
     Subject := 'This is subject line';
     Attachments.Add('FileName',1,1,'This is attachment');
     Body :='This is email body';
     Send;
   end;
end;

Автор: Vit 13.11.2002, 08:06
Цитата
нет Outlook_TLB - где его можно достать?


Outlook_TLB получается путём экспортирования COM интерфейсов Outlook.exe.

Main Menu -> Project -> Import Type Library -> Add -> найти файл Outlook.exe -> Create Unit

Именно этот файл и будет создан.


Цитата
И можно ли так отправлять письмо, если Аутлуку неизвестен SMTP сервер?


Нет, сам outlook ничего не отправляет, он "засовывает" письма в SMTP сервер, а реально их отправляет SMTP сервер.

Автор: Vex 13.11.2002, 08:19
Цитата
Нет, сам outlook ничего не отправляет, он "засовывает" письма в SMTP сервер, а реально их отправляет SMTP сервер.


Тогда вариант с Outlook отпадает.

А если использовать SMTP (как в FAQ), то он будет отправляться непосредственно на сервер получателя? можно ли этот метод использовать на Dial-Up? (глупый наверное вопрос :) )

Автор: Vit 13.11.2002, 08:20
Нет, SMTP тоже не отсылает письмо на сервер получателя, на сервер отправителя.

Автор: Vit 13.11.2002, 08:23
Предвижу вопрос: "а как тогда отослать?"

Вот я уже отвечал - http://www.forum.vingrad.ru/cgi-bin/newforum/ikonboard.cgi?act=ST;f=3;t=4274


Я писал такую программу, сразу скажу: по хорошему, без настройки производительности, многопоточности и т.п. писать её минимум месяц... В общем работа ещё та!


Автор: Vex 13.11.2002, 08:41
Вопрос угадан, и спасибо за полученый ответ! Скоро так до телепатии дойдем :)

А есть что-то типа шаровых SMTP серверов, можно же их указать?

Автор: Vit 13.11.2002, 09:53
Да, конечно. Попробуй разные email сервисы - возможно что есть те, которые разрешают обращение через SMTP. Вот еmail которые я знаю - проверь, дают ли они SMTP доступ: www.yahoo.com, www.mail.ru, www.lenta.ru, www.hotmail.com, www.operamail.com, www.pisem.net


Автор: Vit 13.11.2002, 10:08
Цитата(Vit @ 12.11.2002, 15:23)
писать её минимум месяц... В общем работа ещё та!

Кстати, забыл сказать, вообще-то это смотря для чего пишешь. Если рассылать письма только для себя - например обратная связь с автором программы - то может это не так страшно. Собственно не проблема в том чтобы это написать - там как раз всё ясно, проблема заставить работать программу в 100% случаев - вот примеры тех проблем которые встречались у меня и моего друга (теперь он дорабатывает этот проект):

1) Отсылка в многопоточном режиме
2) Отложенная отсылка, так как ты связываешься с конечным пользователем то могут быть проблемы - у него сервер сейчас занят, перезагружается, линия барахлит и т.п. Настоящие SMTP сервера делают до нескольких сотен попыток переслать письмо в течение суток (иногда больше) - следовательно нужен буффер, некоторая очередь и т.п.
3) DNS сервер не работает, барахлит, даёт устаревшие сведения, поменял свой адрес и т.п.
4) Прервалась связь с интернетом - диагностика, обработка ошибок и т.п.
5) Разный софт серверов получателей имеет некоторые различия в форматах запросов (собственно стандартам RFC строго не следует ни один), иногда у некоторых клиентов наредкость дегенеративный самопальный софт и нам даже приходилось звонить их сисадминам и выяснять какого... их сервер не хочет принимать наши письма
6) У клиентов срабатывают различные антивирусные и антиспамерские фильтры
7) NT убивает программу по совершенно не понятной причине
8) Настройка производительности, timeout, размеров очередей, количество потоков, количества попыток и т.д.
и т.п.

Если ты пишешь программу которая должна изредка послать письмо по одному и тому же адресу, то ты с этими проблемами не сталкнёшься и написать ее не так сложно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)