Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
письмо по SMTP из консоли. Delphi. |

03.08.2009, 21:44
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
письмо по SMTP из консоли. Delphi.
сабж.
требуется отправить письмо на ящик reciever@yandex.ru
сожержащее в body кое-какие данные.
"отпраивтель" - без разницы, главное - содержание письма и его доставка по назначению.
smtp ya.ru: 213.180.204.3 , port: 25.
нарыл код, который вроде реализует через сокеты (не работал с ними раньше)
(нарыл здась: http://forum.antichat.ru/showthread.php?p=671692)
после небольшой редакции компилица, трассируеца... сниффаеца.
Код:
TCP
192.168.0.100 2652
205.188.12.134 5190
132 байт
и, соответственно, нифига не работает так, как должен =\
код:
Код:
program Project1;
uses
SysUtils,
Winsock,
Windows;
{
smtp - ip адрес smtp сервера
port - порт smtp сервера, по умолчанию 25
from - адрес отправителя
dest - адрес получателя
subject - тема письма
body - текст писма
Возвращает True если письмо было успешно отправленно...
}
function mail(smtp: string; port: integer; from, dest, subject, body: string): bool;
const
cl = #13#10;
var
WSAData: TWSAData;
Host: TSockAddrIn;
Sock: TSocket;
res: Integer;
buff: array[1..255] of Char;
{ отправляем данные через сокет }
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;
{ получаем ответ от команды }
function recvdata(accept: string): bool;
var
buff: array[1..255] of Char;
begin
res := recv(Sock, buff, SizeOf(buff), 0);
Result := ((Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept));
end;
begin
try
result := false;
{ инициализация сокета }
WSAStartUp(257, WSAData);
Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if Sock = INVALID_SOCKET then
Exit;
{ устанавливаем хост и порт сервера }
res := inet_addr(PChar(smtp));
if res <= 0 then
exit;
Host.sin_family := AF_INET;
Host.sin_port := htons(port);
Host.sin_addr.S_addr := res;
{ подключаемся к серверу }
if connect(Sock, Host, SizeOf(Host)) > 0 then
Exit;
{ приветствие сервера }
if not recvdata('220') then
Exit;
{ EHLO }
senddata('EHLO' + cl);
if not recvdata('250') then
Exit;
{ MAIL FROM: }
senddata('MAIL FROM:' + from + cl);
if not recvdata('250') then
Exit;
{ RCPT TO: }
senddata('RCPT TO:' + dest + cl);
if not recvdata('250') then
Exit;
{ DATA }
senddata('DATA' + cl);
if not recvdata('354') then
Exit;
{ отправляем текст сообщения }
senddata('Subject:' + subject + cl + cl + body + cl + '.');
if not recvdata('250') then
Exit;
{ отключаемся от сервера }
senddata('QUIT' + cl);
result := true;
finally
{ убиваем сокет }
closesocket(sock);
WSACleanup;
end;
end;
//----------------------------------------------
begin
mail('213.180.204.3',25,'reciever@yandex.ru' ,'admin@company.mail', 'subj', 'body text');
end.
сабж мне как бэ нужен, так что разбирусь и сам..
но за любую помощь буду признателен.
Как по данному коду, так и по любому другому, _рабочему_ методу отправки e-mail на заранее заданный адрес на заранее заданном почтовике, содержащему в body (или как альтернатива - аттачменте) те или иные "данные" (текстовый файл)
Последний раз редактировалось ErrorNeo; 03.08.2009 в 22:09..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|