Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Контроль отправки письма по Email [D7, XP]


Laguna ©   (2011-12-01 13:23:00) 

Для отправки письма есть такая процедура

procedure SendReport(Pol : TStringList; Sub, Bod : String; Attach : TStringList);
const
 olMailItem = 0;
 olByValue = 1;
 StrGood  = 'Письмо отправлено.';
 StrBad   = 'Письмо поставлено в очередь на отправку.' + #13#10 +
                'Запустите почтовую программу и оно будет отправлено.';
var
 OutlookApp,
 MailItem,
 MyAttachments : OLEVariant;
 Otp    : Boolean;
 ifSend : Boolean;
 i : Integer;
begin
 ifSend := False;
 try
   OutlookApp := GetActiveOleObject('Outlook.Application');
   Otp := True;
 except
   OutlookApp := CreateOleObject('Outlook.Application');
   Otp := False;
 end;
 try
   try
     MailItem := OutlookApp.CreateItem(olMailItem);
     for i := 0 to Pred(Pol.Count) do
      MailItem.Recipients.Add(Pol.Strings[i]);
     MailItem.Subject := Sub;
     MailItem.Body    := Bod;
     MyAttachments    := MailItem.Attachments;
     for i := 0 to Pred(Pol.Count) do
      MyAttachments.Add(Attach[i], olByValue, 1, '');
     MailItem.Send;
     ifSend := True;
   except
     InfMsg('','Отмена отправки');
   end;
 finally
   MyAttachments := VarNull;
   OutlookApp    := VarNull;
   if ifSend then
    InfMsg('', IIF(Otp, StrGood, StrBad));
 end;
end;

первый блок try.. except..  end;проверяет открыт ли аутлук или нет. Если открыт - отправляем письмо. Если закрыт - ставим в очередь. Затем при отправке аутлук трижды переспрашивает разрешения на отправк, дабы не вирус отправляет. тАк вот если нажать на кнопку отмена, то отправка просто обрывается и не заходит в нижний блок finally. Что не правильно сделано? Может блоки tryне так сопоставил?


Медвежонок Пятачок   (2011-12-01 19:35:00) [1]

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


Laguna   (2011-12-01 19:14:00) [2]


> Вирусу равно как и не-вирусу ничего не стоит подавить эти
> самые "переспросы" - достаточно перед отправкой сообщений
> программно воткнуть в Аутглюк Add-In с соответствующей давилкой.
>

Ну всем не повтыкаешь, да и не ставилась такая цель.


> Еще раз.Ты стомиллионный пациент, который здесь утверждает,
>  что зайдя в трай, не попадает в его файнали. А если точек
> останова там нет, то значит они выброшены оптимизатором.

Я в подсознании я полностью согласен, но когда реальные факты...
Касаемо этой переменной OutlookApp    := VarNullЕе то обязательно нужно обнулить?


Сергей М.   (2011-12-01 16:20:00) [3]

Вирусу равно как и не-вирусу ничего не стоит подавить эти самые "переспросы" - достаточно перед отправкой сообщений программно воткнуть в Аутглюк Add-In с соответствующей давилкой.


Медвежонок Пятачок   (2011-12-01 16:13:00) [4]

Еще раз.
Ты стомиллионный пациент, который здесь утверждает, что зайдя в трай, не попадает в его файнали.

А если точек останова там нет, то значит они выброшены оптимизатором.


OW   (2011-12-01 16:11:00) [5]

на потом, sleep(1) я обычно ставлю при отладке. Этот оператор не оптимизируется никогда :)


Laguna   (2011-12-01 15:27:00) [6]

Походу строчка потерялась. В финале нужно вот это сделать OutlookApp    := VarNull

> а нафига вирусу отправлять почту через оутлук? lol

А я почем знаю? Кто работал с аутглюком и отправлял через него письма, тот в курсе о его переспросах.


Laguna   (2011-12-01 15:22:00) [7]

Я полагаю для обнудения значений, хотя действительно может и лишнее. Хорошо, закоменнтил я их и оставил только одну строку, чтобы проверить вход в финализацию. Так вот после компиляции на этой строке синие точки не появились, куда я мог бы установить точку останова. http://s017.radikal.ru/i408/1112/b2/8e3a6802d90d.jpgПолучается не считает он нужным заходить в этот блок.


QAZ   (2011-12-01 15:12:00) [8]


> дабы не вирус отправляет.

а нафига вирусу отправлять почту через оутлук? lol


Сергей М.   (2011-12-01 14:53:00) [9]

А накой шиш вообще эти строчки

   MyAttachments := VarNull;
   OutlookApp    := VarNull;

?

Компилятор сделает это неявно...


Laguna   (2011-12-01 14:50:00) [10]


> где "здесь" ?в этом блоке целых 4 строки..

выделена жирным


Сергей М.   (2011-12-01 14:35:00) [11]


> Точку ствлю здесь


где "здесь" ?
в этом блоке целых 4 строки..


Laguna   (2011-12-01 13:54:00) [12]


> в файнали ты попадаешь всегда. даже если у тебя нет денег,
>  тебя бросила жена и ты пьяный.а будет ли оптимизатором
>  прилинкован код внутри файналли - это уже другой вопрос.
>

Хорошо, токда почему я в него не захожу в режиме отладки? Точку ствлю здесь

finally
   MyAttachments := VarNull;
   OutlookApp    := VarNull;
   if ifSend then
    InfMsg('', IIF(Otp, StrGood, StrBad));
 end;
end;


Медвежонок Пятачок   (2011-12-01 13:48:00) [13]

не путай теплое и мягкое.
в файнали ты попадаешь всегда. даже если у тебя нет денег, тебя бросила жена и ты пьяный.

а будет ли оптимизатором  прилинкован код внутри файналли - это уже другой вопрос.


Laguna   (2011-12-01 13:44:00) [14]

Аааа... походу умный компилятор не пошел вниз, поскольку невыполняемое условие стояло в  финальной части. Изменил на такое и прошло

     ...
     ifSend := True;
   except
//      InfMsg('','Отмена отправки');
   end;
 finally
   MyAttachments := VarNull;
   OutlookApp    := VarNull;
   if ifSend then
    InfMsg('', IIF(Otp, StrGood, StrBad))
    else
     InfMsg('','Отмена отправки');
 end;
end;


Медвежонок Пятачок   (2011-12-01 13:41:00) [15]

Ты примерно стомиллионный посетитель, который говорит, что не попадает в файнали.

PS Если из под среды, то F9 после всех исключений.


Laguna   (2011-12-01 13:40:00) [16]

Так в том и дело, что он не проходит, точнее срабатывает except вложенного try и срабатывает InfMsg('','Отмена отправки');. А в finally не заходит(ставил точки в трассировке)


Медвежонок Пятачок   (2011-12-01 13:36:00) [17]

это оптический обман.
если второй сверху трай пройден, то в файнали попадаешь гарантировано.


Наверх

Титульная страница Поиск, карта сайта Написать письмо