Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SMTP-отправка писем через IdSMTP [D7, WinXP]


ALF ©   (2004-02-29 02:42:00) 

Здравствуйте! Хочу сделать простой e-mail клиент для ОТПРАВКИ почты (текст без форматирования) с аутентификацией (указанием имени пользователя и пароля). Для этого использую IdSMTP-client клиент (Indy). C помощью IdSmtp1.QuickSend(...) удается отправить только через open-relay (без аутентификации) SMTP серверы. Покажите как правильно связываться с SMTP сервером для отправки? Никаких вложений, форматирования текста не надо! Просто отправить текст на ящик? И обязательно с "залогиниванием" перед отправкой! Заранее благодарен!


ALF   (2004-03-01 22:39:00) [1]

Есть! Приходят письма! Странно как-то, вроде бы так и делал... Наверное мне должен был кто-то сказать все же, чтобы получилось :-) ! Спасибо всем! Программа думаю выйдет полезная - SMS через E-mail.


Anatoly Podgoretsky   (2004-03-01 21:43:00) [2]

Для начала попробуй

From: you@rambler.ru
To: you@rambler.ru


Verg   (2004-03-01 21:09:00) [3]


> Ведь включил я аутентификацию!


Так. Что значит включил?
Ты имеешь аккаунт на rambler-е? Так и отправляй письма с этого аккаунта, а не с <кто-то там>@mail.ru.


ALF   (2004-03-01 20:55:00) [4]

From: alfwap@mail.ru
To: 79053118534@sms.beemail.ru
Host: pop3.rambler.ru
Port: 25


Verg   (2004-03-01 18:55:00) [5]


> [7] ALF   (01.03.04 18:50)
> combobox3 - список SMTP серверов
>
> Edit3 - email отправителя
>
> precode+combobox2.Text+Edit1.Text+'@'+prefix - это сам адрес
> получателя, не особо важно из чего состоит...
>
> Edit4 - тема письма
>
> Edit6 - Логин
>
> Edit7 - Пароль
>
> Memo1 - текст сообщения


Это и так понятно.
Лучше ответь:
Кому отправляешь?
от имени кого отправляешь?
и к какому SMTP серверу коннектишься?
На эти вопросы достаточно ответить примерно так:

From: somebody@mail.ru
To:   somebody@yandex.ru
Host: mail.ru
Port: 25

т.е. важен Host и то, что после @ в адресах From, To.


ALF   (2004-03-01 18:50:00) [6]

combobox3 - список SMTP серверов

Edit3 - email отправителя

precode+combobox2.Text+Edit1.Text+'@'+prefix - это сам адрес получателя, не особо важно из чего состоит...

Edit4 - тема письма

Edit6 - Логин

Edit7 - Пароль

Memo1 - текст сообщения

----------------------------
Что все-таки не так? Ведь включил я аутентификацию!


AloneAli   (2004-03-01 15:17:00) [7]

>sendmail(combobox3.Text, Edit3.Text, >precode+combobox2.Text+Edit1.Text+'@'+prefix, Edit3.Text, >Edit4.Text, Edit6.Text, Edit7.Text, 1, '', '', Memo1.Text, True);
Напиши поконкретнее, что скрывается за Edit'ами и ComboBox'ами! Тогда тебе скажу, в чем твоя ошибка, потому что функция SendMail csr(c) отлично и без каких-либо проблем работает( за что ему большое спасибо!)


ALF   (2004-03-01 02:47:00) [8]

Вот предположим я добавил аутентификацию (разкомментировал строки). Получилось вот что:

procedure SendMail(ASMTPHost, AFrom, ATo, AReplyTo, ASubject, SmtpServerUser, SmtpServerPassword: string;
APriority: Integer; ACc, ABcc, Content: string; AWithRecipient: Boolean);
var
MsgSend: TIdMessage;
SMTP: TIdSMTP;

begin
MsgSend := TIdMessage.Create(nil);
SMTP := TIdSMTP.Create(nil);
try
 with MsgSend do
 begin

   Body.Text := Content;
   From.Text := AFrom;
   ReplyTo.EMailAddresses := AReplyTo;
   Recipients.EMailAddresses := ATo; { To: header }
   Subject := ASubject; { Subject: header }
   Priority := TIdMessagePriority(APriority); { Message Priority }
   CCList.EMailAddresses := ACc; {CC}
   BccList.EMailAddresses := ABcc; {BBC}
   if AWithRecipient then
     ReceiptRecipient.Text := From.Text {We set the recipient to the From E-Mail address }
   else
     ReceiptRecipient.Text := ''; {indicate that there is no receipt recipiant}
 end;

 SMTP.AuthenticationType := atLogin;

 SMTP.Username := SmtpServerUser;
 SMTP.Password := SmtpServerPassword;

 {General setup}
 SMTP.Host := ASMTPHost;
 SMTP.Port := 25;

 {now we send the message}
 SMTP.Connect;
 try
   SMTP.Send(MsgSend);
 finally
   SMTP.Disconnect;
 end;
finally
 MsgSend.Free();
 SMTP.Free();
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
sendmail(combobox3.Text, Edit3.Text, precode+combobox2.Text+Edit1.Text+'@'+prefix, Edit3.Text, Edit4.Text, Edit6.Text, Edit7.Text, 1, '', '', Memo1.Text, True);
end;

------------
На Mail.ru отправляется - без проблем! А вот хотя бы Rambler - беда! Пишет 5.7.0 Authentification Required! Блин!!! Я уже не могу больше!!! Что не так?!?!?!?


ALF   (2004-03-01 00:24:00) [9]

Ммм... Спасибо, но смотрю эти строки тут по методу копи-пейст из других веток конференции... Я всю облазил, несколько раз встретил. Можно пожалуйста поподробнее немного, а желательно код всего pas-файла, а то я пока что в Дельфи новичок :(


csr   (2004-02-29 14:23:00) [10]

ИМХО паршивый код :). Юзай лучше это.

uses
IdSMTP, IdMessage;

procedure SendMail(ASMTPHost, AFrom, ATo, AReplyTo, ASubject: string;
APriority: Integer; ACc, ABcc, Content: string; AWithRecipient: Boolean);
var
MsgSend: TIdMessage;
SMTP: TIdSMTP;

begin
MsgSend := TIdMessage.Create(nil);
SMTP := TIdSMTP.Create(nil);
try
  with MsgSend do
  begin
    Body.Text := Content;
    From.Text := AFrom;
    ReplyTo.EMailAddresses := AReplyTo;
    Recipients.EMailAddresses := ATo; { To: header }
    Subject := ASubject; { Subject: header }
    Priority := TIdMessagePriority(APriority); { Message Priority }
    CCList.EMailAddresses := ACc; {CC}
    BccList.EMailAddresses := ABcc; {BBC}
    if AWithRecipient then
      ReceiptRecipient.Text := From.Text {We set the recipient to the From E-Mail address }
    else
      ReceiptRecipient.Text := ''; {indicate that there is no receipt recipiant}
  end;

  SMTP.AuthenticationType := atNone;

  //SMTP.Username := SmtpServerUser;
  //SMTP.Password := SmtpServerPassword;

  {General setup}
  SMTP.Host := ASMTPHost;
  SMTP.Port := 25;

  {now we send the message}
  SMTP.Connect;
  try
    SMTP.Send(MsgSend);
  finally
    SMTP.Disconnect;
  end;
finally
  MsgSend.Free();
  SMTP.Free();
end;
end;


DelphiN!   (2004-02-29 13:01:00) [11]

Это что за жалкое породие :-)


Delphin   (2004-02-29 12:43:00) [12]

procedure TForm1.ConnectExecute(Sender: TObject);
begin
IdSmtp1.Host:=Form2.Edit1.Text;
IdSmtp1.Username:=Form2.Edit2.Text;
IdSmtp1.Password:=Form2.Edit3.Text;
IF Form2.RbCheckBox1.Checked Then
Begin
IF Form2.ComboBox1.Text='None' Then
Idsmtp1.AuthenticationType:=AtNone;
IF Form2.ComboBox1.Text='Login' Then
Idsmtp1.AuthenticationType:=AtLogin;
End;
Try
IdSmtp1.Connect();
Except
End;

procedure TForm1.SendExecute(Sender: TObject);
begin
IF not IdSmtp1.Connected Then
Connect.Execute;
Try
IdMessage1.From.Name:=Edit1.Text;
IdMessage1.From.Address:=Edit2.Text;
IdMessage1.Recipients.Add.Address:=Edit3.Text;
IdMessage1.Subject:=Edit4.Text;
IdMessage1.Body.Add(M);
IdSmtp1.Send(IdMessage1);
Finally
IdMessage1.Clear;
IdSmtp1.Disconnect;
End;

Ну всё делается примерно так :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо