Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отправка письма из Delphi используя Winsock

31K
26 января 2008 года
Yarosl@w
18 / / 23.01.2008
Написал вот такую вот программу, а она не работает. Подскажыте плз в чем ошыбка. ПС.Использовал диалог с сервером.

Код:
program MySendMail;
uses Winsock;
var
 wsadata: TWSADATA;
 Addr: TSockAddrIn;
 sock: TSocket;
 Buf_r: array[0..255] of char;
 f : TextFile;
const
 MailFrom ='delphi@mail.ru';
 MailTo = 'mymail@inbox.ru';
 CRLF = #13+#10;
 Title = 'Test Title';
 Body = 'Test Body';
 MySmtp = 'smtp.mail.ru';

procedure init;
begin
AssignFile(f,'History.txt');
Rewrite(f);
end;

procedure Sends(str : String);
var
i: integer;
begin
for i:=1 to Length(str) do if send(sock,str,1,0)=SOCKET_ERROR then exit;
end;

procedure CheckAnswer(str : String);
var
Answer : integer;
begin
Answer:=Recv(sock,Buf_r,sizeof(Buf_r),0);
if (Answer=SOCKET_ERROR) or (Answer=0) then
begin
WriteLn(f,str);
CloseFile(f);
Halt;
end else WriteLn(f,'Server:'+Buf_r);
end;


begin
init;
WSAStartUp($0101, wsadata);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);

Addr.sin_family:=PF_Inet;
Addr.sin_port:=HtoNS(25);
Addr.sin_addr.S_addr:=Inet_Addr(PChar(MySmtp));
FillChar(Addr.sin_zero,SizeOf(Addr.sin_zero),0);

Connect(sock,Addr,sizeof(Addr));
CheckAnswer('Error: Connection!');

// HELLO
Sends('HELO Yaroslaw'+CRLF);
CheckAnswer('Error: Hello!');

// MAIL FROM:
Sends('MAIL FROM:'+MailFrom+CRLF);
CheckAnswer('Error: Mail From!');

// RCPT TO:
Sends('RCPT TO:'+MailTo+CRLF);
CheckAnswer('Error: Mail To!');

// DATA
Sends('DATA'+CRLF);
CheckAnswer('Error: Data!');

// Send Body
Sends(Title+CRLF);
Sends(Body+CRLF);

// <CRLF>.<CRLF>  End of Body
Sends(CRLF+'.'+CRLF);
CheckAnswer('Error: End of Body!');

// QUIT
Sends('QUIT'+#13+#10);
CheckAnswer('Error: Quit!');

Shutdown(sock, SD_Both);
CloseSocket(sock);
WSACleanup;
CloseFile(f);
end.
31K
26 января 2008 года
Yarosl@w
18 / / 23.01.2008
Проблема решена!!!
Вместо
Цитата:

MySmtp = 'smtp.mail.ru';


должно быть

Цитата:

MySmtp = '194.67.23.111';



MySmtp должно быть ip-адресом, посколько Addr.sin_addr.S_addr имеет тип integer.
ПС.Чтобы узнать ip-адрес зная доменное имя нужно в cmd набрать:

 
Код:
ping -a имя (пример: ping -a smtp.mail.ru)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог