04 декабря 2010

Как отправить письмо

Самый простой способ отправить письмо при помощи С++ Builder - воспользоваться стандартными компонентами idSMTP (Indy Clients), IdMessage (На вкладке Indy Misc).






Создадим новый проект VCL Forms Apllication, на форму добавим несколько компонентов как показано на рисунку, три Edit'a, idSMTP (На вкладке Indy Clients), IdMessage (Indy Misc), Memo и Button. Создим событие для Form1 - OnCreate
void __fastcall TForm1::FormCreate(TObject *Sender) {
/*
Yandex.ru - smtp.yandex.ru - работает
Mail.ru - smtp.mail.ru - не проверял
Google.com - smtp.gmail.com - уже не работает
*/
 IdSMTP1->Host = "smtp.yandex.ru"; // Адрес почтового сервера
/*
Yandex.ru -25
Mail.ru - 25
Google.com - 465
*/
 IdSMTP1->Port = 25; //Используемый порт
 IdSMTP1->Username = "test"; // Пишем  логин от почты
 IdSMTP1->Password = "123321"; // и пароль к нему
}
Создаем событие для Button1 - OnClick
void __fastcall TForm1::Button1Click(TObject *Sender) {
 IdMessage1->From->Text = Edit1->Text;
 IdMessage1->Recipients->EMailAddresses = Edit2->Text;
 IdMessage1->Subject = Edit3->Text;
 IdMessage1->Body->Text = Memo1->Text;

 IdSMTP1->Connect();
 if (IdSMTP1->Connected())
  IdSMTP1->Send(IdMessage1);
 else
  IdSMTP1->Disconnect();
}





Вот так просто можно отправлять письма используя Builder C++

28 комментариев:

  1. Спасибо хорошая статья)))Полезная очень)

    ОтветитьУдалить
  2. мне пишет ошибки:
    Undefined sumbol "idSMTP1"
    Undefined sumbol "idMessage1"
    Undefined sumbol "memo1"
    Undefined sumbol "idSMTP1"
    ПОЧЕМУ!?

    ОтветитьУдалить
  3. 1. Не забывай что C++ чувствительный к регистру
    2. Ты не забыл компоненты на форму кинуть?

    ОтветитьУдалить
  4. кстати, у меня такиеже ошибки, но я немогу их исправить(

    ОтветитьУдалить
  5. Здраствуйте, подскажите что такое?
    Компилятор не замечает ошибок, все нормально, программа запускается, но когда я нажимаю на кнопку "Отправить", то появляется ошибка!(описать и написать я ее не могу)подскажите что делать, кто хочет помочь может зайти на форум, я там скрины выложил, можете посмотреть...
    http://www.cyberforum.ru/cpp-builder/thread223380.html

    ОтветитьУдалить
  6. IdSMTP1->UseNagle
    попробуй поменять на
    IdSMTP1->Username честно я долго искал как проще отправлять почту из билдера и этот способ пока самый короткий

    ОтветитьУдалить
  7. Спасибо за отзыв. Я поменял 'UseNagle' на 'Usename', и компилятор выводит ошибку: [C++ Error] Project2.cpp(22): E2316 'Usename' is not a member of 'TIdSMTP'. Еще вариантов нет?

    ОтветитьУдалить
  8. Не Usename, а Username

    ОтветитьУдалить
  9. Ввел 'Username', компилятор пишет ошибку:
    [C++ Error] Unit1.cpp(22): E2316 'Username' is not a member of 'TIdSMTP'
    Может вам код скопировать чтоб вы проверили?

    ОтветитьУдалить
  10. Скинь исходник ...

    ОтветитьУдалить
  11. Я просто использую Builder 6, щас попробую скачать Embarcadero rad studio 2010, попробую там написать. О результатах сообщу)

    ОтветитьУдалить
  12. Спасибо, все работает, писмо отправляется на яндекс. А можно чтоб на сервер mail.ru отправлялось? Если да, то напишите код плиз

    ОтветитьУдалить
  13. а у меня ошибка: Range check error!
    что делать?

    ОтветитьУдалить
  14. ДАЛБАЕБСКИЙ САЙТ СДЕСЬ НИКТО НЕ ПОМАГАЕТ!

    ОтветитьУдалить
  15. В Билдер6 надо не IdSMTP1->Username, такого свойства и нет, а IdSMTP1->UserId

    ОтветитьУдалить
  16. Как исправить ето?
    [C++ Error] Unit1.cpp(34): E2034 Cannot convert 'void' to 'bool'
    (Мне 12 лет, но это единственная ошибка!)

    ОтветитьУдалить
  17. помогите мне .., аська 425236315 плиз ..

    ОтветитьУдалить
  18. Уж как только не извращался все равно выходит ошибка.

    [BCC32 Error] Unit1.cpp(21): E2316 '_fastcall TForm1::FormCreate(TObject *)' is not a member of 'TForm1'

    ОтветитьУдалить
  19. Все верно тут написано! Все работает.
    В загаловке написано же (Программируем на C++ Builder 2010) а у всех скорее всего 2007 или 6.

    ОтветитьУдалить
  20. установить свой SMTP сервер

    ОтветитьУдалить
  21. Спасибо! помогло!!! =)

    ОтветитьУдалить
  22. Очень пордезная статья. Однако в по карйней мере в С++Buider 6
    письмо не отправляется, почтовый сервер возвращает ошибку, просит для начала дать команду идентификации.
    Проблема решается, если до отправления письма написать вроде

    if (IdSMTP1->Connected()) {
    b = IdSMTP1->Authenticate();
    IdSMTP1->Send(IdMessage1);
    }
    else
    IdSMTP1->Disconnect();

    ОтветитьУдалить
  23. Все отлично сработало. Автору большой респект. коротко и доступно.

    ОтветитьУдалить
  24. Не подскажете? Как перенести данные на сервер?

    ОтветитьУдалить
  25. какую дерективу то надо подключать?

    ОтветитьУдалить
  26. какую дерективу то надо подключать?

    ОтветитьУдалить

Темы