Отсылка письма средствами nnCron

Обсуждение программ nnCron и nnCron LITE

Отсылка письма средствами nnCron

Postby D.Ilyin » Tue, 03 Aug 2004, 09:18

Как можно отправить письмо с помошью nnCron не используя сторонние утилиты?
Если в данный момент это не возможно, то планируется ли создание подобного плагина или же набора внутренних команд?
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby VK » Tue, 03 Aug 2004, 10:44

Без сторонних утилит - никак. Плагин не планируется. Зачем тебе плагин, когда есть, например, Postie ( http://www.infradig.com/ )?
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17

Postby D.Ilyin » Tue, 03 Aug 2004, 11:15

Согласен....
Cторонних утилит много, но они все практически sharaware. :(
Одна из тех которая мне понравилась это "http://www.febooti.com/" Command Line Email 1.2

Этот вопрос был интересен так как возникла задача отправки письма с вложением log'ов nnBackUP'a.
За посказку спасибо!
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby vrs » Fri, 06 Aug 2004, 09:34

посмори кстати на http://www.eserv.ru/[/url]
vrs
 
Posts: 15
Joined: Fri, 06 Aug 2004, 09:28

smtpsend

Postby D.Ilyin » Fri, 06 Aug 2004, 11:54

vrs это была одна и самых первых из тех которые я пробовал :). Всего их перебрал около 10 штук.

ЗЫ все равно спасибо. Меня больше интересовал вопрос который указан в названии топика.
D.Ilyin
 
Posts: 41
Joined: Mon, 02 Aug 2004, 13:07

Postby Игорь » Tue, 17 Aug 2004, 02:51

Можно и без сторонних утилит. В папке system32 есть чудная cdosys.dll

Code: Select all
#( test_cdo_mail
NoActive
Action:
 <VBScript>
 Dim omail
 On Error Resume Next
 Set omail = CreateObject("CDO.Message")
     omail.From = "Vasya Pupkin <pupkin@mail.ru>"
     omail.To = "Vasya Nepupkin <nepupkin@mail.ru>"
     omail.Subject = "Test cdo-mail with nnbackup.log"
     omail.Textbody = "It's first line of test mail" & vbCrLf &_
                      "It's second line of test mail" & vbCrLf &_
                      "-- " & vbCrLf & "WBR, your nnCron" & vbCrLf & Now
     omail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
     omail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "mail.yourprovider.ru"
     omail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     omail.Configuration.Fields.Update
     omail.AddAttachment "C:\Progra~1\nnBackup\log\nnbackup.log"
     omail.Send
 if Err<>0 Then Err.Clear
 Set omail = Nothing
 Wscript.Quit
 </SCRIPT>
)#


Вместо pupkin@mail.ru и nepupkin@mail.ru соответственно адреса от кого и кому, вместо mail.youprovider.ru - smtp своего провайдера
Игорь
 
Posts: 36
Joined: Tue, 17 Aug 2004, 02:25

Postby Andrey V. Shtukaturov » Wed, 25 Aug 2004, 17:02

а я использую для этого blat.exe
Andrey V. Shtukaturov
 
Posts: 21
Joined: Mon, 12 Jul 2004, 10:42

Модернизируем скрипт?

Postby vetal_l » Wed, 02 Aug 2006, 11:27

Игорь wrote:Можно и без сторонних утилит. В папке system32 есть чудная cdosys.dll

Code: Select all
#( test_cdo_mail
NoActive
Action:
 <VBScript>
...
     omail.AddAttachment "C:\Progra~1\nnBackup\log\nnbackup.log"
...
 </SCRIPT>
)#



Вопрос - как в этом скрипте приаттачить все файлы из определенного каталога (не рекурсивно)? Если не известно ни имен файлов, ни их количества, а архивировать или как то еще их модифицировать нельзя.
vetal_l
 
Posts: 6
Joined: Wed, 02 Aug 2006, 11:20
Location: Saint-Petersburg, Russia

Postby Nicholas_Nemtsev » Wed, 02 Aug 2006, 15:00

Видимо надо генерировать текст VB скрипта и его-то и запускать через cscript.
Nicholas Nemtsev
User avatar
Nicholas_Nemtsev
Site Admin
 
Posts: 857
Joined: Thu, 01 Jul 2004, 22:25
Location: Псков

Postby zenik » Thu, 03 Aug 2006, 10:18

Nicholas_Nemtsev wrote:Видимо надо генерировать текст VB скрипта и его-то и запускать через cscript.

Хм... Вообщето в VB тоже циклы есть :D . Генерировать - ИМХО сильно мудрено.

to All Я, к примеру, исполью такой метод для отправки: Консольная утилита на Дельфях (нашел готовую, немного поправил). В кроне процесс отправки реализован так:
Code: Select all
SET DT="%DD%.%MM%.%YYYY%-%hh%:%mm%"
SET MailParam="/server:*.*.*.* /from:nncron@mail.ru /to:pupkin@mail.ru"
SET MAILFILE="%ModuleDirName%%CUR-NODE CRON-NAME @ COUNT%.mail"

<%
CREATE FILE 256 ALLOT
CREATE SUBJ 256 ALLOT
CREATE BODY 256 ALLOT

CREATE MAILFILE 256 ALLOT
: SENDMAIL ( a u -- ) EVAL-SUBST MAILFILE PLACE
   S" " MAILFILE COUNT COMPARE 0= IF
      S" %ModuleDirName%%CUR-NODE CRON-NAME @ COUNT%.mail" EVAL-SUBST FILE PLACE
   ELSE
      S" %MAILFILE COUNT%" EVAL-SUBST FILE PLACE
   THEN
   S" /subj:%COMPUTERNAME% -- %CUR-NODE CRON-NAME @ COUNT%" EVAL-SUBST SUBJ PLACE
   S" /body:%FILE COUNT%" EVAL-SUBST BODY PLACE
   SWHide
   START-APPW: "%QUOTE%%ModuleDirName%cmdmail.exe%QUOTE% %MailParam% %QUOTE%%SUBJ COUNT%%QUOTE% %QUOTE%%BODY COUNT%%QUOTE%"
   FILE-DELETE: "%FILE COUNT%"
;

CREATE MAILLOGStr 256 ALLOT
: MAILLOG ( a u -- ) EVAL-SUBST MAILLOGStr PLACE
   GET-CUR-TIME
   LOG: "%CUR-NODE CRON-NAME @ COUNT%.mail" "%DT% - %MAILLOGStr COUNT%"
;
%>

А в задачах, где нужно отослать сообщения пишу следующее:
1-й вариант:
\ Запись сообщений в файл
S"Текст сообщения" MAILLOG
\ Отправка
S" " SENDMAIL

2-й вариант:
\ Отправить сформированный сторонней прогой файл
S" file.txt" SENDMAIL

Приходит письмо: тема: имя_компа - имя_задачи
Текст сообщения: содержимое текстового файла.

Ну и кому интересно, исходник cmdmail.exe:
Code: Select all
program cmdmail;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  idSMTP,
  idMessage,
  Classes;
const
 CRLF=#13#10;
 help='Program for send e-mail from command line.'+CRLF+
      'Parameters:'+CRLF+
      '/server:<SMTP server name>'+CRLF+
      '[/port:<number SMTP port>] (Default: 25)'+CRLF+
      '/from:<e-mail address of sender>'+CRLF+
      '/to:<e-mail address of recipient>'+CRLF+
      '/subj:<subject of e-mail'+CRLF+
      '/body:<body of e-mail> (Text file or Text)'+CRLF+
      '/atfile:<file name of attachment>';

var
 t: TidSMTP;
 m: TidMessage;
 server: string;
 port: integer;
 from,recipient,subject,body,atfile: string;
 i: integer;
begin
  server:='';
  port:=0;
  from:='';
  recipient:='';
  subject:='';
  body:='';
  atfile:='';
  if ParamCount<=1 then
  begin
    writeln(help);
    exit;
  end;
  try
  for i:=1 to ParamCount do
  begin
    if (AnsiLowerCase(ParamStr(i))='/help') or (AnsiLowerCase(ParamStr(i))='/?') then
    begin
      writeln(help);
      exit;
    end;
    if Copy(AnsiLowerCase(ParamStr(i)),1,8)='/server:' then server:=Copy(AnsiLowerCase(ParamStr(i)),9,Length(ParamStr(i))-1);
    if Copy(AnsiLowerCase(ParamStr(i)),1,6)='/port:' then port:=StrToInt(Copy(AnsiLowerCase(ParamStr(i)),7,Length(ParamStr(i))-1));
    if Copy(AnsiLowerCase(ParamStr(i)),1,6)='/from:' then from:=Copy(AnsiLowerCase(ParamStr(i)),7,Length(ParamStr(i))-1);
    if Copy(AnsiLowerCase(ParamStr(i)),1,4)='/to:' then recipient:=Copy(AnsiLowerCase(ParamStr(i)),5,Length(ParamStr(i))-1);
    if Copy(AnsiLowerCase(ParamStr(i)),1,6)='/subj:' then subject:=Copy(AnsiLowerCase(ParamStr(i)),7,Length(ParamStr(i))-1);
    if Copy(AnsiLowerCase(ParamStr(i)),1,8)='/atfile:' then atfile:=Copy(AnsiLowerCase(ParamStr(i)),9,Length(ParamStr(i))-1);
    if Copy(AnsiLowerCase(ParamStr(i)),1,6)='/body:' then body:=Copy(AnsiLowerCase(ParamStr(i)),7,Length(ParamStr(i))-1);
  end;
  if server='' then raise Exception.Create('invalid server name');
  if port<=0 then port:=25;
  if from='' then raise Exception.Create('invalid sender name');
  if recipient='' then raise Exception.Create('invalid recipient name');
  m:=TidMessage.Create(nil);
  t:=TidSMTP.Create(nil);
  t.Host:=server;
  t.Port:=port;
  t.Connect();
  m.ContentType:='text/plain';
  m.CharSet:='windows-1251';
  m.From.Address:=from;
  m.Recipients.Add.Address:=recipient;
  m.Subject:=subject;
  if atfile<>'' then TidAttachment.Create(m.MessageParts,atfile);
  if body<>'' then
  begin
    if FileExists(body)=false then  m.Body.Insert(0,body)
    else                            m.Body.LoadFromFile(body);
  end;
  t.Send(m);
  t.Free;
  m.Free;
  except
    on e: Exception do writeln(E.Message);
  end
end.
zenik
 
Posts: 30
Joined: Thu, 25 May 2006, 12:23

Postby vetal_l » Thu, 03 Aug 2006, 10:24

Я как бы немножко не программист. =)

Могу заюзать готовые решения или примеры разобрать. Не подскажите на пальцах? Как не профессионалу?

Условия - сторонних программ быть не должно. Желательно все в nncron реализовать (вот как тот VBSrcipt)
vetal_l
 
Posts: 6
Joined: Wed, 02 Aug 2006, 11:20
Location: Saint-Petersburg, Russia

Postby zenik » Thu, 03 Aug 2006, 13:50

vetal_l wrote:Условия - сторонних программ быть не должно. Желательно все в nncron реализовать (вот как тот VBSrcipt)


Хех. А VB - это часом ли не сторонняя программа? Ты хоть знаешь как крон отрабатывает? Сохраняет текст в файл и на исполнение его. Так что условие о сторонней программе уже не выполняется.

Сам nncron отослать почту не может. Все остальное (даже VB и JS) - сторонние проги.

И почему так категорично относишься к дополнителной программе?
zenik
 
Posts: 30
Joined: Thu, 25 May 2006, 12:23

Postby vetal_l » Thu, 03 Aug 2006, 13:53

zenik wrote:
vetal_l wrote:Условия - сторонних программ быть не должно. Желательно все в nncron реализовать (вот как тот VBSrcipt)


Хех. А VB - это часом ли не сторонняя программа? Ты хоть знаешь как крон отрабатывает? Сохраняет текст в файл и на исполнение его. Так что условие о сторонней программе уже не выполняется.

Сам nncron отослать почту не может. Все остальное (даже VB и JS) - сторонние проги.

И почему так категорично относишься к дополнителной программе?

Будем считать VB фишкой операционки. Категорично - потому как эта задача обрастает этими сторонними программами прям на ходу. Поэтому я сейчас от всех от них пытаюсь уйти. =)
vetal_l
 
Posts: 6
Joined: Wed, 02 Aug 2006, 11:20
Location: Saint-Petersburg, Russia

Postby zenik » Thu, 03 Aug 2006, 14:03

Положи стороний софт в каталог c:\windows\system32 и считай его фишкой операционки. :D

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

Что хоть делаешь то, а то может решений есть куча?

з.ы. Кстати, логи на е-майл слать... Специально, кстати, для этого убил неделю. Настругал выше описанные кронтаб и утилиту. Научил крон слать письма. До сих пор почта успешно приходит. Каждое утро приходиться разбирать кучу писем. Надоело. Я их уже и не читаю. ИМХО слать надо не успешно отработанные данные, а данные об ошибках.
zenik
 
Posts: 30
Joined: Thu, 25 May 2006, 12:23

Postby vetal_l » Thu, 03 Aug 2006, 14:10

zenik wrote:...
Ну а если серьезно, и для решения твоей тривиальной задачи необходимо много разного софта, то может ты решаешь ее не так как надо... или поискать другой софт...

Что хоть делаешь то, а то может решений есть куча?
...

Очень дурацкая задача. В том месте где работаю бардак редкостный. Очень долго объяснять. В общем менять этот бардак никто не хочет, а вот автоматизировать сборку результатов этого бардака я им зачем то предложил. В итоге надо из кучи всяких разных файлов сделаных в разных программах собрать солянку из html, их приаттачить к письму и все это отправить. На той стороне сидит пень, который ничего не умеет делать - кроме как смотреть на пришедшее письмо. Сколько файлов и когда они уйдут - никто не знает. Так же - как и то - как эти файлы будут называться. В общем шиза. Я уже жалею что взялся. Сделал почти все =) Кроме аттача этой массы файликов.
vetal_l
 
Posts: 6
Joined: Wed, 02 Aug 2006, 11:20
Location: Saint-Petersburg, Russia

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests