Lotus и Embeddedobject в Delphi

  • Автор темы unx
  • Дата начала
U

unx

Я понимаю, что немного не в тот раздел написал, но, на мой взгляд здесь лучше в этом разбераются.

Проблема следующая:

Необходимо в Delphi проходить по входящим письмам и если они с определенной темой, то вытаскивать из них прикрепленные файлы и дальше обрабатывать их.

Процесс "хождения" по письмам реализован примерно следующим образом:


Код:
var
db: IDatabase;
Mail: IDocument;
id:IViewEntryCollection;
x, i: integer;
View: NotesView;
rtitem : Variant;
begin
db := Form1.NotesSession.GetDatabase(Form1.NotesSession.GetEnvironmentString('MailServer', true),
Form1.NotesSession.GetEnvironmentString('MailFile', true), False) ;
Views :=  db.Views;
for y := 0 to VarArrayHighBound(Views, 1) -
VarArrayLowBound(Views, 1) do
begin
View := NotesView(IUnknown(Views[y]));

if View.Name='($Inbox)' then
begin
id:=view.AllEntries;
mail:=id.Parent.GetFirstDocument;
iv:=id.GetFirstEntry;
for i:=1 to id.Count-1 do
begin
mail:=id.Parent.GetNextDocument(mail);
try
rtItem:=mail.GetFirstItem('body');
________________________________________
далее обработка письма

Файл можно вытащить таким образом:
Код:
mail.GetAttachment('ИМЯ_ФАЙЛА').Name
- но это если знать его имя.
Мне же необходимо взять прикрепленный объект из письма, при условии, что я не знаю его имени.

Далее, у mail (Mail: IDocument;) есть свойство mail.EmbeddedObjects , но оно возвращает тип OleVariant и как его обрабатывать я не знаю. Есть ли какой-нибудь пример (не обязательно на delphi), который бы наглядно показывал как обращаться к прикрепленным документам не зная их количества и названия.

Пример кода, содержащий
Код:
...............
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) _
...............
я смотрел, но адаптировать к Delphi не смог.
 
M

morpheus

<!--QuoteBegin-unx+3:08:2007, 14:49 -->
<span class="vbquote">(unx @ 3:08:2007, 14:49 )</span><!--QuoteEBegin-->я смотрел, но адаптировать к Delphi не смог.
[snapback]74377" rel="nofollow" target="_blank[/snapback]​
[/quote]
Проще простого rtitem.EmbeddedObjects - это Olevariant который на самом деле массив, но не просто а вариатный массив - вот с им и работайте

VarArrayLowBound/VarArrayHighBound - нижняя / верхняя границы
 
U

unx

Для: Morpheus

Можно хоть какой-то пример. Я не врубаюсь, как ходить по этому массиву.
Получается что-то типа:
Код:
if mail.HasEmbedded then
begin
for z:=0 to VarArrayHighBound(mail.EmbeddedObjects, 1) do
......................
Но это неправильно.
 
R

Ronchik

Для: unx
Если не секрет зачем такие сложности???........делаете блок на почту? :D ....
Код:
To get: name$ = notesEmbeddedObject.Name
далее как и писали
Код:
mail.GetAttachment('ИМЯ_ФАЙЛА').Name
или вот из хелпа
Код:
Forall o In doc.EmbeddedObjects
Messagebox( o.Name )
End Forall
 
U

unx

<!--QuoteBegin-Ronchik+3:08:2007, 16:29 -->
<span class="vbquote">(Ronchik @ 3:08:2007, 16:29 )</span><!--QuoteEBegin-->Если не секрет зачем такие сложности?
[snapback]74393" rel="nofollow" target="_blank[/snapback]​
[/quote]

Нужно будет взять файл, зашифровать его и отправить уже с помощью The Bat. Вариант, с указанием имени файла(ов) уже рассматривался, но был отклонен (не мной). Дописать отстается 1-2 строки, но как сделать хождение по массиву EmbeddedObjects я не догоняю

пример
<!--QuoteBegin-Ronchik+3:08:2007, 16:29 -->
<span class="vbquote">(Ronchik @ 3:08:2007, 16:29 )</span><!--QuoteEBegin-->Forall o In doc.EmbeddedObjects
Messagebox( o.Name )
End Forall
[snapback]74393" rel="nofollow" target="_blank[/snapback]​
[/quote]
не подходит
 
S

Sandr

Нужно будет взять файл, зашифровать его и отправить уже с помощью The Bat.


Что мешает отправлять с лотуса? Написать нужный агентик и отправлять с лотуса... Или что мешает из того же делфи работать через XML?
 
U

unx

<!--QuoteBegin-Sandr+4:08:2007, 13:44 -->
<span class="vbquote">(Sandr @ 4:08:2007, 13:44 )</span><!--QuoteEBegin-->Что мешает отправлять с лотуса? Написать нужный агентик и отправлять с лотуса... Или что мешает из того же делфи работать через XML?
[snapback]74437" rel="nofollow" target="_blank[/snapback]​
[/quote]

Зачем еще XML, когда доступ к письмам и без него есть. Если бы можно было бы отправлять с Лотуса, так отправлял бы.
 
R

Ronchik

<!--QuoteBegin-unx+3:08:2007, 16:49 -->
<span class="vbquote">(unx @ 3:08:2007, 16:49 )</span><!--QuoteEBegin-->не подходит
[snapback]74397" rel="nofollow" target="_blank[/snapback]​
[/quote]
и чем не подходит налицо хождение по массиву и вместо
<!--QuoteBegin-unx+3:08:2007, 16:49 -->
<span class="vbquote">(unx @ 3:08:2007, 16:49 )</span><!--QuoteEBegin-->Messagebox( o.Name )
[snapback]74397" rel="nofollow" target="_blank[/snapback]​
[/quote]
может быть и другой вариант я же только пример привел

если конечно хочеться сделать конструкцию через FOR тогда смотрите пост Morpheus он все правильно изложил
 
M

morpheus

Для: unx
Проверяйте
VarIsArray function - ваша переменная должна быть массивом
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!