Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Вниз

Контроль отправки письма по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
2-1323074402
gvozdkoff
2011-12-05 12:40
2012.03.18
длина строк в TStringList


15-1322401925
Vyacheslav
2011-11-27 17:52
2012.03.18
Delphi XE2 не работают Break Point


15-1321526211
>|<
2011-11-17 14:36
2012.03.18
Как правильно устаналивать программу в Windows 7?


8-1222416721
roughneck
2008-09-26 12:12
2012.03.18
Усилитель звука


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский