Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.18;
Скачать: CL | DM;

Вниз

Контроль отправки письма по Email   Найти похожие ветки 

 
Laguna ©   (2011-12-01 13:23) [0]

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

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 13:36) [1]

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


 
Laguna ©   (2011-12-01 13:40) [2]

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


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

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

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


 
Laguna ©   (2011-12-01 13:44) [4]

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

     ...
     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:48) [5]

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

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


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


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

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

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


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


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


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


 
Laguna ©   (2011-12-01 14:50) [8]


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

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


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

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

   MyAttachments := VarNull;
   OutlookApp    := VarNull;

?

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


 
QAZ   (2011-12-01 15:12) [10]


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

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


 
Laguna ©   (2011-12-01 15:22) [11]

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


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

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

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

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


 
OW ©   (2011-12-01 16:11) [13]

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


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

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

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


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

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


 
Laguna ©   (2011-12-01 19:14) [16]


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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2012.03.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
2-1322731427
Laguna
2011-12-01 13:23
2012.03.18
Контроль отправки письма по Email


2-1323244056
Дмитрий_
2011-12-07 11:47
2012.03.18
восстановить курсор если найдена запись


15-1322370665
Валера
2011-11-27 09:11
2012.03.18
Как научиться верстать?


2-1323077597
LDV
2011-12-05 13:33
2012.03.18
создание таблиц бд в классе


15-1322389998
FormResize
2011-11-27 14:33
2012.03.18
Изменение размера формы