Перейти к содержимому

Фотография

Delphi и OutlookНужен совет


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1
Cometis

Cometis

    Lovely mammal

  • В доску свой
  • 4 776 сообщений
Необходимо написать программу на Делфи для отсылки сообщений через Аутлук. Проблемка следующая, при отправке аутлук ругается, мол неизвестно что, через меня пытается что-то отправить. Как лечить?
  • 0

#2
|imp|

|imp|
  • Постоялец
  • 476 сообщений

Необходимо написать программу на Делфи для отсылки сообщений через Аутлук. Проблемка следующая, при отправке аутлук ругается, мол неизвестно что, через меня пытается что-то отправить. Как лечить?

Обязательно через Outlook, надо?
Стандартные компоненты Delphi, для отправки почты не устроят?
  • 0

#3
Cometis

Cometis

    Lovely mammal

  • В доску свой
  • 4 776 сообщений
Да, обязательно через аутлук. У нас свой exchange стоит ну и почта естесно корпоративная.
  • 0

#4
softrise

softrise
  • Гость
  • 22 сообщений
брендмауэр включен?
  • 0

#5
Vaio

Vaio
  • В доску свой
  • 3 177 сообщений
Проще всё таки воспользоваться протоколами SMTP/POP3, при помощи обычных компонентов. На мой взгляд это красивее, чем возня с OLE. К тому же на моей памяти - при переходе с офиса одной версии на другую - иногда код использующий OLE перестает корректно работать.
А вообще яндекс фарева:
http://www.sources.r...ttachment.shtml

Отправка E-mail с прикреплённым файлом из Delphi через Outlook.
Автор: Eddie Shipman

Пример использует VB Script для Outlook, который позволяет произвести такую операцию. Создаётся OLE-объект - 'Outlook.Application' и в него передаётся скрипт.

Совместимость: все версии Delphi

Измените recipientaddress@recipienthost.com на Ваш собственный e-mail
адресс. У Вас должен быть проинсталирован Outlook,

{Я не уверен, что это будет работать в Outlook Express.}

uses ComObj; {Delphi 5}

procedure TForm1.Button1Click(Sender: TObject);
const
// константы OlItemType
olMailItem = 0;
olAppointmentItem = 1;
olContactItem = 2;
olTaskItem = 3;
olJournalItem = 4;
olNoteItem = 5;
olPostItem = 6;
// константы OlAttachmentType
olByValue = 1;
olByReference = 4;
olEmbeddedItem = 5;
olOLE = 6;

var
myOlApp, myItem, myRecipient, myAttachments: OleVariant;
begin
// файл VBScript для создания почтового сообщения и прикрепления к нему файла
myOlApp := CreateOLEObject('Outlook.Application');
myItem := myOlApp.CreateItem(olMailItem);
myItem.Subject := 'This is the Subject';
myRecipient := myItem.Recipients.Add('recipientaddress@recipienthost.com');
myItem.Body := #13;
myItem.Body := myItem.Body + #13;
myItem.Body := myItem.Body + 'Hello,' + #13;
myItem.Body := myItem.Body + 'This code created this message and '+
' sent it and I didn''t even have' + #13;
myItem.Body := myItem.Body + 'to click the send button!!!' + #13;
myItem.Body := myItem.Body + #13;
myItem.Body := myItem.Body + 'If you have any more problems, let me know' +
#13;
myItem.Body := myItem.Body + 'rename to blah.vbs and run like this:' + #13;
myItem.Body := myItem.Body + 'wscript c:\blah.vbs' + #13;
myItem.Body := myItem.Body + #13;
myItem.Body := myItem.Body + 'Eddie' + #13;
myItem.Body := myItem.Body + #13;
myItem.Body := myItem.Body + #13;
myItem.Body := myItem.Body + 'const'+ #13;
myItem.Body := myItem.Body + ' // константы OlItemType'+ #13;
myItem.Body := myItem.Body + ' olMailItem = 0;'+ #13;
myItem.Body := myItem.Body + ' olAppointmentItem = 1;'+ #13;
myItem.Body := myItem.Body + ' olContactItem = 2;'+ #13;
myItem.Body := myItem.Body + ' olTaskItem = 3;'+ #13;
myItem.Body := myItem.Body + ' olJournalItem = 4;'+ #13;
myItem.Body := myItem.Body + ' olNoteItem = 5;'+ #13;
myItem.Body := myItem.Body + ' olPostItem = 6;'+ #13;
myItem.Body := myItem.Body + ' // OlAttachmentType constants'+ #13;
myItem.Body := myItem.Body + ' olByValue = 1;'+ #13;
myItem.Body := myItem.Body + ' olByReference = 4;'+ #13;
myItem.Body := myItem.Body + ' olEmbeddedItem = 5;'+ #13;
myItem.Body := myItem.Body + ' olOLE = 6;'+ #13;
myItem.Body := myItem.Body + #13;
myItem.Body := myItem.Body + 'var'+ #13;
myItem.Body := myItem.Body + ' myOlApp, myItem, myRecipient, myAttachments:
OleVariant;'+ #13;
myItem.Body := myItem.Body + 'begin'+ #13;
myItem.Body := myItem.Body + ' myOlApp :=
CreateObject(''Outlook.Application'')' + #13;
myItem.Body := myItem.Body + ' myItem := myOlApp.CreateItem(olMailItem)' +
#13;
myItem.Body := myItem.Body + ' myItem.Subject := ''This is the Subject''' +
#13;
myItem.Body := myItem.Body + ' myItem.Body := ''This is the body''' + #13;
myItem.Body := myItem.Body + ' myRecipient := myItem.Recipients.Add
('recipientaddress@recipienthost.com')' + #13;
myItem.Body := myItem.Body + ' myAttachments := myItem.Attachments' + #13;
myItem.Body := myItem.Body + ' // Теперь прикрепим файлы...' + #13;
myItem.Body := myItem.Body + ' myAttachments.Add ''C:\blah.txt'', olByValue,
1, ''Blah.txt Attachment''' + #13;
myItem.Body := myItem.Body + ' myItem.Send' + #13;
myItem.Body := myItem.Body + ' myOlApp := VarNull;' + #13;
myItem.Body := myItem.Body + ' myItem := VarNull;' + #13;
myItem.Body := myItem.Body + ' myRecipient := VarNull;' + #13;
myItem.Body := myItem.Body + ' myAttachments := VarNull;' + #13;
myItem.Body := myItem.Body + 'end;' + #13;
// Теперь прикрепим файлы...
myAttachments := myItem.Attachments;
myAttachments.Add('C:\blah.txt', olByValue, 1, 'Blah.txt Attachment');
myItem.Send
myOlApp := VarNull;
myItem := VarNull;
myRecipient := VarNull;
myAttachments := VarNull;
end;


  • 0

#6
Kommunarsk

Kommunarsk
  • Гость
  • 7 сообщений
Используй компоненты из пакета Indy.
  • 0

#7
GrayFox

GrayFox
  • Завсегдатай
  • 259 сообщений
Не в коем случае НЕ используйте компоненты Indy.

Замучитесь выгребать глюки в этой поделке индусов-недопрогеров.
  • 0

#8
Иксилимьюз

Иксилимьюз
  • Свой человек
  • 966 сообщений
Тоже занимался данной задачей. Сделал, программа работает, сделал 2 потока, один из поток поочерёдно рассылает письма на адреса из таблицы, второй переодически совершает клик по кнопке "да" в окошке Аутлука, которое предупреждает пользователя о попытки отправить письмо от его имени...
Но вот беда, несмотря на то что кнопка реально кликается, аутлук на это не реагирует, и в резульатате получается что пользователям при любом раскладе приходится каждые 7-9 секунд кликать по данной кнопке... Если удасться найти решение данной проблемы, обязательно отпишусь.

Вот собственно мой код нажатия кнопки:

////////////////////////////////////////////////////////////////////////////////
// Процедура которая средствами API находит окно подтверждения для
// отправки письма и нажимает кнопку подтверждения отправки.
procedure TMyThread.ClickOnForm;//(wnd: HWND; caption: string);
var
  TheChildHandle: HWND;
begin
  TheChildHandle := FindWindowEx(FindWindow(nil, 'Microsoft Office Outlook'), 0, nil, PChar('Да'));
  SetFocus(FindWindow(nil, 'Microsoft Office Outlook'));
  SendMessage(TheChildHandle, WM_LBUTTONDOWN, mrOk{MK_LBUTTON}, 1);
  Sleep(300);
  SendMessage(TheChildHandle, WM_LBUTTONUP, mrOk {MK_LBUTTON}, 1);
end;

Сообщение отредактировал XIO: 29.05.2008, 11:36:39

  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.