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

Вниз

Как послать e-mail с машины без единой почтовой программы?   Найти похожие ветки 

 
cosinus ©   (2007-07-26 12:57) [0]

Собственно весь вопрос в теме.
Все примеры, которые я пока нашел используют почтовую программу по умолчанию, а это не то. Как правило на серверы не ставят Outlook или Bat )))
Необходимо при определенных условиях посылать сообщение с алертом на ящик. Предпологается, что прога мониторит некоторые события и по достижении оных, посылает сообщение по внутренней почте об этом. Почтовый сервер - Exchange, если это имеет какое-нибудь значение )


 
umbra ©   (2007-07-26 13:04) [1]


> Собственно весь вопрос в теме.

ответ - никак. Хоть какая-нибудь программа должна быть.


 
DVM ©   (2007-07-26 13:05) [2]

Очень просто - через сокеты.

WsaStartUp()
socket()
connect()
recv()
send()
closesocket()
WsaCleanUp()

что должно приниматься и предаваться см описание протокола SMTP


 
cosinus ©   (2007-07-26 13:10) [3]


> DVM ©   (26.07.07 13:05) [2]

Позвольте я все же уточню....
То есть используя сокеты, я могу подключиться к Exchange к существующему ящику, отправить с него почту, и "отвалиться обратно" от почтового сервера, правильно?
И еще один вопросик, чтобы просто я знал, чего ждать... Насколько трудна реализация необходимой мне задачи, с учетом того, что я никогда не работал с сокетами? То есть придется ли мне перечитать 200 страниц о сокетах и смежных областях для этого или же достаточно будет пару статей и хелп?


 
Сергей М. ©   (2007-07-26 13:19) [4]


> используя сокеты, я могу подключиться к Exchange к существующему
> ящику, отправить с него почту, и "отвалиться обратно" от
> почтового сервера, правильно?


Да.


> Как правило на серверы не ставят Outlook или Bat


Но это отнюдь не говорит о том, что на сервере заведомо не установлен ни один mail-клиент.


> Насколько трудна реализация


Все относительно в сравнении.


 
DVM ©   (2007-07-26 13:21) [5]


> То есть используя сокеты, я могу подключиться к Exchange
> к существующему ящику, отправить с него почту, и "отвалиться
> обратно" от почтового сервера, правильно?

Да. Так же как это делает почтовая программа. Можно даже через telnet из командной строки это сделать.


> Насколько трудна реализация необходимой мне задачи, с учетом
> того, что я никогда не работал с сокетами?

Не трудна эта задача вовсе. Особенно если для отправки использовать готовые компоненты. Типа TIdSmtp


 
DVM ©   (2007-07-26 13:24) [6]


> cosinus ©  


function SendEMail(SmtpServer: string;
                  Port: integer;
                  Login, Password: string;
                  From,
                  Dest,
                  Subject,
                  Body,
                  FileName: string): boolean;
const
 CRLF = #13#10;
 Boundary = "myboundary";
var
 WSAData: TWSAData;
 WsaErr: integer;
 SAddr: TSockAddrIn;
 Sock: TSocket;
 SmtpHost: PHostEnt;
 SmtpIP: PChar;
 Rcv: string;
 Attach: string;
 
 procedure SendData(Str: string);
 var
   i: integer;
 begin
   for i := 1 to Length(str) do
     if send(Sock, str[i], 1, 0) = SOCKET_ERROR then exit;
 end;

{ procedure SendData(Str: string);
 begin
   if send(Sock, Str[1], Length(Str), 0) = SOCKET_ERROR then exit;
 end;}

 function RecvCode: string;
 var
   buff: array[0..1024] of Char;
   Res: integer;
 begin
   Result := "";
   ZeroMemory(@buff, SizeOf(buff));
   res := recv(Sock, buff, SizeOf(buff), 0);
   if res <> SOCKET_ERROR then
     begin
       Result := Copy(buff, 1, 3);
     end;
 end;

begin
 result := false;
 try
   WsaErr := WSAStartUp($101, WSAData);
   if WsaErr <> 0 then exit;
   SmtpHost := GetHostByName(PChar(SmtpServer));
   if SmtpHost = nil then exit;
   SmtpIP := inet_ntoa(PInAddr(SmtpHost.h_addr_list^)^);
   if SmtpIP = nil then exit;
   ZeroMemory(@SAddr, SizeOf(SAddr));
   with SAddr do
     begin
       sin_family := AF_INET;
       sin_port := htons(Port);
       sin_addr.S_addr := Inet_Addr(SmtpIP);
     end;
   Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);  
   if Sock = INVALID_SOCKET then exit;
   if Connect(Sock, SAddr, SizeOf(SAddr)) > 0 then exit;
   
   if RecvCode <> "220" then exit;
   SendData("EHLO " + SmtpServer + CRLF);
   if RecvCode <> "250" then exit;

   SendData("AUTH LOGIN " + EncodeBase64(Login) + CRLF);
   Rcv := RecvCode;
   if  Rcv <> "334" then
     begin
       if Rcv <> "403" then exit;
     end
   else
     begin
       SendData(EncodeBase64(Password) + CRLF);
       if RecvCode <> "235" then exit;
     end;

   senddata("MAIL FROM:" + From + CRLF);
   if RecvCode <> "250" then exit;

   senddata("RCPT TO:" + Dest + CRLF);
   if RecvCode <> "250" then exit;

   senddata("DATA" + CRLF);
   if RecvCode <> "354" then exit;

   senddata("Subject: =?Windows-1251?B?" + EncodeBase64(From) + "?=" + CRLF);
   senddata("To: " + Dest + CRLF);

   senddata("Subject: =?Windows-1251?B?" + EncodeBase64(Subject) + "?=" + CRLF);

   senddata("MIME-Version: 1.0" + CRLF);
   senddata("Content-Type: multipart/mixed; boundary="" + Boundary + """ + CRLF);
   senddata(CRLF);

   if Body <> "" then
   begin
     senddata("--" + Boundary + CRLF);
     senddata("Content-Type: text/plain; charset=Windows-1251" + CRLF);
     senddata("Content-transfer-encoding: base64" + CRLF + CRLF);
     Body := EncodeBase64(Body);
     senddata(Body + CRLF);
   end;

   if FileName <> "" then
     if FileExists(FileName) then
       begin
         senddata("--" + Boundary + CRLF);
         senddata("Content-Type: " + GetMIMEType(FileName) + "; name="" + ExtractFileName(FileName) + """ + CRLF);
         senddata("Content-transfer-encoding: base64" + CRLF);
         senddata("Content-Disposition: attachment; filename="" + ExtractFileName(FileName) + """ + CRLF + CRLF);
         Attach := EncodeFile(FileName);
         senddata(Attach);
       end;

   senddata(CRLF + "." + CRLF);
   if RecvCode <> "250" then exit;
   senddata("QUIT" + CRLF);
   result := true;
 finally
   CloseSocket(Sock);
   WSACleanup;
 end;
end;


 
ShyricK ©   (2007-07-29 13:47) [7]

То ест как я понял при помощи это можно отослать письмо невидимо для пользователя?


 
VirEx ©   (2007-07-30 13:21) [8]


>  [7] ShyricK ©   (29.07.07 13:47)
> То ест как я понял при помощи это можно отослать письмо
> невидимо для пользователя?

ога! попался. троянописатель)


 
Anatoly Podgoretsky ©   (2007-07-30 19:21) [9]

> VirEx  (30.07.2007 13:21:08)  [8]

И спаммер.



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

Форум: "Сети";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
6-1185955434
VeryVeryLongInteger
2007-08-01 12:03
2008.05.04
ReceiveLength


15-1206368870
asdf2
2008-03-24 17:27
2008.05.04
Беспроводная связь.


15-1205919660
Empleado
2008-03-19 12:41
2008.05.04
Три закона А. Кларка


2-1207178467
Johnnnnnn
2008-04-03 03:21
2008.05.04
Save Target AS?


15-1206382954
oxffff
2008-03-24 21:22
2008.05.04
The Unicode Shift





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский