C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TIdSMTP и TIdMessage, аутентификация при отсылке письма ...
creater
  Отправлено: 09.12.2003, 15:43


Станционный диспетчер

Группа: Участник
Сообщений: 120



Народ, если не жалко и не в лом то, запостите пример работы с Indy компонентами — TIdSMTP и TIdMessage.

Очень срочно необходимо отослать письмо с аутентификацией, а у компонента NMSMTP из Fast Net нет Properties — Password. Что крайне необходимо.

Заранее большое спасибо :-)
Admin
Отправлено: 09.12.2003, 20:13


Владимир

Группа: Администратор
Сообщений: 1190



Не жалко, вот полностью рабочий пример
(конечно правильно укажите свое
имя, пароль, имя почтового сервера)
CODE

void __fastcall TForm1::Button2Click(TObject *Sender)
{
TIdMessage* M = new TIdMessage(Form1);

M->Body->Add(" First string body");
M->Body->Add(" Second string body");
M->From->Text = "\"Владимир\" <support@cbuilder.ru>"; //отправитель
M->Recipients->Add();
M->Recipients->Items[0]->Text = "\"Вера\" <klassiks@cnt.ru>";//получатель
M->Subject = "Тема письма"; //Тема письма

IdSMTP1->AuthenticationType = atLogin;
IdSMTP1->Host = "post.cnt.ru"; // имя почтового сервера
IdSMTP1->UserId = "klassiks"; // имя
IdSMTP1->Password = "*****"; // Здесь пароль вместо *****
IdSMTP1->Connect();
if(IdSMTP1->Connected()){
IdSMTP1->Send(M);
IdSMTP1->Disconnect();
}
delete M;
}


Отредактировано Admin — 09/12/2003, 21:37
Admin
Отправлено: 09.12.2003, 20:34


Владимир

Группа: Администратор
Сообщений: 1190



Не знаю, но возможно и есть способ указать пароль
для NMSMTP. не уверен, но посмотрите интресный пример
у китайцев (или кто там они) не разбирался:

http://www.china-askpro.com/msg42/qa51.shtml

creater
Отправлено: 09.12.2003, 21:22


Станционный диспетчер

Группа: Участник
Сообщений: 120



QUOTE (Admin @ 09/12/2003, 21:15)
Не жалко, вот полностью рабочий пример
(конечно правильно укажите свое
имя, пароль, имя почтового сервера)

Большое спасибо за ответ!
Правда к тому времени когда Я увидел Ваш ответ уже отсылал письмо :-))

Но у меня осталась еще одна проблема. Ни как не могу прикрепить файл к письму. sad.gif
Nick
Отправлено: 10.12.2003, 08:53


Машинист паровоза

Группа: Участник
Сообщений: 247



Я не делал TIdMessage


if ( !NMSMTP1->Connected ) NMSMTP1->Connect();
if ( NMSMTP1->Connected )
{
NMSMTP1->PostMessage->FromAddress = ini->ReadString( "Mail", "FromAdress", "" );
NMSMTP1->PostMessage->FromName = ini->ReadString( "Mail", "FromName", "" );
NMSMTP1->PostMessage->Subject = "Order from other Filial";
NMSMTP1->PostMessage->ToAddress->Clear();
NMSMTP1->PostMessage->ToAddress->Add(IBQ_FilialsWEMAIL->AsString);
/* присоединение файла asFileName к письму */
NMSMTP1->PostMessage->Attachments->Add(asFileName);

NMSMTP1->PostMessage->Body->Clear();
NMSMTP1->PostMessage->Body->Add("See attachment.");
NMSMTP1->SendMail();
NMSMTP1->Disconnect();
ShowMessage(("Заявка ушла по адресу "+IBQ_FilialsWEMAIL->AsString+". Файл — "+asFileName).c_str());
} else ShowMessage("Ошибка соединения с SMTP сервером.");
Admin
Отправлено: 10.12.2003, 12:14


Владимир

Группа: Администратор
Сообщений: 1190



Вставьте между
M->Subject = "Тема письма"; //Тема письма
и
IdSMTP1->AuthenticationType = atLogin;

CODE

M->Subject = "Тема письма"; //Тема письма

// прикладываем файл myFile.txt
TIdAttachment* att = new TIdAttachment(M->MessageParts,"c:\\myFile.txt");
M->MessageParts->Add();
M->MessageParts->Items[0] = att;

IdSMTP1->AuthenticationType = atLogin;


Для Nick:
А пароль где указать ??? В NMSMTP1 его нет.


Отредактировано Admin — 10/12/2003, 13:20
Nick
Отправлено: 10.12.2003, 13:05


Машинист паровоза

Группа: Участник
Сообщений: 247



При отправке писем, мне кажется, он и не нужен.
Я не совсем уверен в этом т.к. видел на форуме вопросы типа:
NMSMTP не работает с платными серверами.

Пример WinRoute Pro.
Ставишь SMTP server smtp.yandex.ru и все.
Письма отправляются без проблем, то есть проблемы бывают но не из-за этого.

У меня проблема с кодировкой может в IdSMTP решено это дело.




FoxVID
Отправлено: 02.03.2004, 19:33


Ученик-кочегар

Группа: Участник
Сообщений: 29



CODE
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TIdMessage* M = new TIdMessage(Form1);

M->Body->Add(" First string body");
M->Body->Add(" Second string body");
M->From->Text = "\"Владимир\" <support@cbuilder.ru>"; //отправитель
M->Recipients->Add();
M->Recipients->Items[0]->Text = "\"Вера\" <klassiks@cnt.ru>";//получатель
M->Subject = "Тема письма"; //Тема письма

IdSMTP1->AuthenticationType = atLogin;
IdSMTP1->Host = "post.cnt.ru"; // имя почтового сервера
IdSMTP1->UserId = "klassiks";  // имя
IdSMTP1->Password = "*****"; // Здесь пароль вместо *****
IdSMTP1->Connect();
if(IdSMTP1->Connected()){
   IdSMTP1->Send(M);
   IdSMTP1->Disconnect();
   }
delete M;
}

В результате выполнения получаю ошибку:
CODE
Точка входа в процедуру @Idwinsock@initialization$qqrv не найдена в библиотеке DLL indy60.bpl

Кто подскажет, в чем причина?

Вернуться в Вопросы программирования в C++Builder