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

Вниз

Отправить электронную почту   Найти похожие ветки 

 
Первокласник Вася   (2008-05-23 14:36) [0]

Добрый день, Мастера!

Подскажите пожалуйста, что в коде не правильно. Код из DelphiWorld6
У меня ящик прописан на Rambler.ru


{
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
{
smtp - ip адрес smtp сервера
port - порт smtp сервера, по умолчанию 25
from - адрес отправителя
dest - адрес получателя
subject - тема письма
body - текст писма}

 if mail("127.0.0.1",25,"Mymail@rambler.ru","MyMail@rambler.ru","ПРИВЕТ!!!!!!!!","TE ST TEST TEST!!!") then
    showmessage("TRUE") else
    showmessage("FALSE");
end;


Отправляю сообщение, функция возвращает TRUE, проверяю свой ящик, а отправленного письма нет! Что неправильно?
Может необходимо ещё и получение письма реализовать? Или как?

ПРИМЕЧАНИЕ: MyMail в приведённом коде - для примера


 
TIF ©   (2008-05-23 14:45) [1]

Работаю через TIdSMTP (отправка писем) на mail.ru и yandex.ru
Без всяких проблем

К тому же, там всё значительно легче ;)


 
Palladin ©   (2008-05-23 14:45) [2]


>  Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);

какое странное условие...


 
Первокласник Вася   (2008-05-23 14:47) [3]

Работаю через TIdSMTP (отправка писем) на mail.ru и yandex.ru
Без всяких проблем

К тому же, там всё значительно легче ;)



Это кажется в delphi6 есть, у меня delphi7


 
Palladin ©   (2008-05-23 14:48) [4]


> Это кажется в delphi6 есть, у меня delphi7

тебе не правильно кажется, это вообще сторонние компоненты


 
Первокласник Вася   (2008-05-23 14:51) [5]

Нашёл IdSMTP1, бросил его на форму. Но немного не знаю свойства этого компонента. Подскажите пожалуйста, как пользоваться им. Или маленький пример покажите пожалуйста. Думаю что с примером разберусь.


 
TIF ©   (2008-05-23 14:52) [6]

? Сторонние ?

По-моему, я их к себе в D7 не ставил. они там сразу были! :) Что я делал не так? )))


 
TIF ©   (2008-05-23 14:53) [7]

> Нашёл IdSMTP1, бросил его на форму. Но немного не знаю свойства
> этого компонента. Подскажите пожалуйста, как пользоваться
> им. Или маленький пример покажите пожалуйста. Думаю что
> с примером разберусь.


Лови, сейчас достану исходник своей последней проги-почтовика... Секундочку...


 
Palladin ©   (2008-05-23 14:53) [8]


> TIF ©   (23.05.08 14:52) [6]

то, что они входят в поставку, еще не означает, что они стандартные...


 
TIF ©   (2008-05-23 14:54) [9]

> то, что они входят в поставку, еще не означает, что они
> стандартные...

Как всё сложно :) Ладно, пусть будут "в комплекте"


 
Первокласник Вася   (2008-05-23 14:59) [10]

>Лови, сейчас достану исходник своей последней проги-почтовика... Секундочку...

TIF! Я буду с удовольствием изучать твою программу! Мне очень интересна эта тема в последнее время, но начинающему это очень трудно!
Радует, что Мастера в последнее время стали более серьёзно стали подходить индивидуально к проблеме каждого! Настоящие мастера!!!!


 
TIF ©   (2008-05-23 15:01) [11]

Вот процедурка отправки сообщения. Разобраться несложно. Для кодирования текста письма используются воспомогательные процедуры, сейчас о них тоже расскажу
(в интернете таких примеров, кстати, много)

procedure;
var Msg: TIdMessage;
begin

 {УСТАНАВЛИВАЕМ СОЕДИНЕНИЕ}
 IdSMTP1.Host:="smtp.mail.ru";
 IdSMTP1.Port:=25;
 IdSMTP1.AuthenticationType:=atLogin;
 IdSMTP1.Username:="andrewtishkin";
 IdSMTP1.Password:="*********";
 IdSMTP1.Connect;

 {ГОТОВИМ СООБЩЕНИЕ}
 Msg:=TIdMessage.Create(nil);

 Msg.ContentType := "text/plain";
 Msg.CharSet := "koi8-r";
 Msg.ContentTransferEncoding := "8bit";
 Msg.Encoding:= meMIME;

 Msg.NoEncode:=false;
 Msg.NoDecode:=false;

 {Запросить уведомление о прочтении, если нужно}
 //Msg.ExtraHeaders.Values["Return-Receipt-To"]:="andrewtishkin@mail.ru";

 {Тема сообщения}
 //Msg.Subject:="=?koi8-r?B?8NLP18XSy8Eg09fR2skh?=";
 Msg.Subject:="=?koi8-r?B?"+EncodeBase64(ConvertEncoding("Тема в Base64", cmAnsiToKoi8R))+"?=";

 {Дата отправления письма. может быть любой}
 Msg.Date:=StrToDate("01.12.2004");

 {Адрес получателя}
 Msg.Recipients.EMailAddresses:="andrewtishkin@yandex.ru";
 {Адрес отправителя}
 Msg.From.Address:="andrewtishkin@mail.ru";

 {Текст сообщения}
 Msg.Body.Text:=ConvertEncoding("Проверка связи!", cmAnsiToKoi8R);

 {Отправляем...}
 if IdSMTP1.Connected
   then IdSMTP1.Send(Msg);

 {НЕ ЗАБЫВАЕМ РАЗЪЕДИНИТЬСЯ!}
 IdSMTP1.Disconnect;

end;


 
TIF ©   (2008-05-23 15:05) [12]

function EncodeBase64(const inStr: string): string;

 function Encode_Byte(b: Byte): char;
 const
   Base64Code: string[64]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 begin
   Result:=Base64Code[(b and $3F)+1];
 end;

var i: Integer;
begin

 i:=1;
 Result:="";
 while i<=Length(InStr)
   do
   begin
     Result:=Result+Encode_Byte(Byte(inStr[i]) shr 2);
     Result:=Result+Encode_Byte((Byte(inStr[i]) shl 4) or (Byte(inStr[i+1]) shr 4));

     if i+1<=Length(inStr)
       then Result:=Result+Encode_Byte((Byte(inStr[i+1]) shl 2) or (Byte(inStr[i+2]) shr 6))
       else Result:=Result+"=";

     if i+2<=Length(inStr)
       then Result:=Result+Encode_Byte(Byte(inStr[i+2]))
       else Result:=Result+"=";

     Inc(i, 3);
   end;

end;



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

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

Наверх





Память: 0.49 MB
Время: 0.006 c
9-1171128545
electroman239
2007-02-10 20:29
2008.06.15
Алгоритм удаления шаров


15-1209566817
AlexanderMS
2008-04-30 18:46
2008.06.15
Включить Диспетчер задач и редактирование реестра.


2-1211471659
StiTch
2008-05-22 19:54
2008.06.15
Помогите


15-1209447922
sql
2008-04-29 09:45
2008.06.15
ЦАП


2-1211539949
StiTch
2008-05-23 14:52
2008.06.15
E-Mail





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