Главная страница
    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
15-1322045600
aka
2011-11-23 14:53
2012.03.18
Пишу программу.


15-1322221527
И. Павел
2011-11-25 15:45
2012.03.18
Они убили Beep()!


2-1322726859
Faceless
2011-12-01 12:07
2012.03.18
TBucketList


2-1323137562
norecoi1
2011-12-06 06:12
2012.03.18
Как добратся до переменноый в другом класе?


15-1322338591
SQLEX
2011-11-27 00:16
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский