Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Отправка почты на mail.ru

05.07.2015, 23:54. Показов 4986. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!!! Ребята, подскажите, по такому вопросу. Знаю, что тема уже избита вдоль и в поперёк, но есть проблемы.
Пытаюсь программно отправить сообщение в свой почтовый ящик в качестве примера отправляю из своего почтового ящика в свой же почтовый ящик письмо (сообщение), но при отправке выкидывает ошибку (см. скриншот) Использую 25 порт

Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void __fastcall TForm1::FormShow(TObject *Sender)
{
 
   Edit2->PasswordChar = '*';
   Edit3->PasswordChar = '*';
   Edit5->Text = "blabla@mail.ru";
   Memo1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
 IdMessage1->From->Text = "Привет";
 IdMessage1->Subject="blabla@mail.ru";
 IdMessage1->Recipients->EMailAddresses = Edit5->Text;
 IdMessage1->Body->Text = Memo1->Text;
 IdMessage1->ContentType = "text/plain; charset=windows-1251";
 IdMessage1->CharSet = "windows-1251";
 IdMessage1->ContentTransferEncoding = "8BITMIME";
 
 IdSMTP1->Connect();
if (IdSMTP1->Connected())
{
  IdSMTP1->Send(IdMessage1);
}
  IdSMTP1->Disconnect();
 
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Edit1->Text = "smtp.mail.ru";
 IdSMTP1->Host = Edit1->Text;
 IdSMTP1->Username = "blabla@mail.ru";
 IdSMTP1->Password = "**********";
 IdSMTP1->UseTLS=utNoTLSSupport;
 IdSMTP1->Port = 25;
}
//---------------------------------------------------------------------------
Заранее благодарен за ответ
Изображения
 
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2015, 23:54
Ответы с готовыми решениями:

Отправка почты
скажите пожалуйста как сделать чтобы при вводе в Edit1,..... и нажатие на кнопку произошла отправка почты.может компонент какой-то для...

Отправка почты
Добрый день. Подскажите, пожалуйста, как реализуется процесс отправки почты в среде С++ Builder. Хотелось бы, чтобы при нажатии...

Отправка электронной почты
Добрый день. Пытаюсь отправить электронное письмо. После соединения с smtp.list.ru ("94.100.177.4") порт 25 получаю...

32
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
06.07.2015, 00:26
кинь на форму IdSSLIOHandlerSocketOpenSSL
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 /*-----------------------------------------------*/
 String Host = "smpt.mail.ru";
 int Port = 25;
 String Username = "blabla@mail.ru";
 String Pass = "mypass";
 
 String EMailAddresses = "blabla@mail.ru"; // кому
 String Subject = "Тема №1";
 String Body = "Привет";
 /*-----------------------------------------------*/
 
 IdSMTP->Host = Host;
 IdSMTP->Port = Port;
 IdSMTP->Username = Username;
 IdSMTP->Password = Pass;
 IdSMTP->AuthType = satDefault;
 
 IdSSLIOHandlerSocketOpenSSL->Destination = Host+":"+IntToStr(Port);
 IdSSLIOHandlerSocketOpenSSL->Host = Host;
 IdSSLIOHandlerSocketOpenSSL->Port = Port;
 IdSSLIOHandlerSocketOpenSSL->SSLOptions->Method = sslvSSLv3;
 
 IdSMTP->IOHandler = IdSSLIOHandlerSocketOpenSSL;
 IdSMTP->UseTLS = utUseImplicitTLS;
 
 IdSMTP->Connect();
 
 IdMessage->Clear();
 IdMessage->Encoding = mePlainText;
 IdMessage->ContentType = "text/plain";
 IdMessage->CharSet = "UTF-8";
 IdMessage->ContentTransferEncoding = "base64";
 IdMessage->Subject = Subject;
 IdMessage->Body->Text = Body;
 IdMessage->From->Text = IdSMTP->Username;
 IdMessage->Recipients->EMailAddresses = EMailAddresses;
 
 IdSMTP->Send(IdMessage);
Добавлено через 1 минуту
может кто подскажет, без IdSMTP->IOHandler можна хоть что-то отправить или нет?
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.07.2015, 00:41
Цитата Сообщение от _Dimon_ Посмотреть сообщение
может кто подскажет, без IdSMTP->IOHandler можна хоть что-то отправить или нет?
Без SSL имелось ввиду? По большому счету никак, почти все почтовые серверы отказались от подключения без шифрования.

Добавлено через 1 минуту
Это
C++
1
2
3
4
 IdSSLIOHandlerSocketOpenSSL->Destination = Host+":"+IntToStr(Port);
 IdSSLIOHandlerSocketOpenSSL->Host = Host;
 IdSSLIOHandlerSocketOpenSSL->Port = Port;
 IdSSLIOHandlerSocketOpenSSL->SSLOptions->Method = sslvSSLv3;
лишнее....

Добавлено через 7 минут
Кстати можно еще так: http://avazart.zz.mu/2014/10/tidsmtp/
2
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.07.2015, 15:43  [ТС]
Avazart, спасибо за ссылку, но при компиляции выдаёт ошибку

C++
1
2
3
4
5
6
7
String __fastcall EncodeQuotedUtf8(UnicodeString Text)
{
  return
    L"=?UTF-8?Q?"+
    Form1->IdEncoderQuotedPrintable1->EncodeString(Text,TEncoding::UTF8).TrimRight()+
    L"?=";
}
E2285 Could not find a match for 'TIdEncoder::EncodeString(UnicodeString, TEncoding *)'
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.07.2015, 15:48
Ну так новый билдер и там указано что должны быть компоненты на форме.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.07.2015, 15:52  [ТС]
Так я эти компоненты перетянул на форму, но эффекта никакого

Добавлено через 38 секунд
Работаю С++ Builder XE4
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
08.07.2015, 15:53
я вместо ф-ции EncodeQuotedUtf8 использовал событие TIdMessage.OnInitializeISO

C++
1
2
3
4
5
6
7
void __fastcall TfIndySMTP::IdMessageInitializeISO(System::WideChar &VHeaderEncoding,
          UnicodeString &VCharSet)
{
 VCharSet = L"UTF-8";
 VHeaderEncoding = L'B';
}
//---------------------------------------------------------------------------
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.07.2015, 16:00  [ТС]
_Dimon_, спасибо за розъяснение, но мне всё таки интересно как избавиться от ошибки в коде, который предоставил мне Avazart
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.07.2015, 16:02
Цитата Сообщение от Sasha Посмотреть сообщение
Работаю С++ Builder XE4
Значит что-то изменили в интерфейсе Indy (я писал в XE3) нужно посмотреть что и поправить, для этого достаточно пошуршать по хедерам Indy.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
08.07.2015, 16:38
Sasha, так вроде работает (на xe7 точно)

C++
1
2
3
4
5
6
7
String __fastcall EncodeQuotedUtf8(UnicodeString Text)
{
  return
    L"=?UTF-8?Q?"+
    Form1->IdEncoderQuotedPrintable1->EncodeString(Text, IndyTextEncoding_UTF8()).TrimRight()+
    L"?=";
}
3
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.07.2015, 16:50  [ТС]
_Dimon_, а как тогда с вот этой вот функцией?

C++
1
2
3
4
5
6
String __fastcall EncodeBase64Win(UnicodeString Text)
{
   return L"=?windows-1251?B?"+
      Form1->IdEncoderMIME1->EncodeString(Text,TEncoding::GetEncoding(1251))+
      L"?=";
}
Добавлено через 2 минуты
Тут точно такая же ошибка
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
08.07.2015, 17:02
Sasha, думаю что IndyTextEncoding(1251)

Добавлено через 4 минуты
кусок из IdGlobal.hpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding(IdTextEncodingType AType)/* overload */;
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding(System::Word ACodepage)/* overload */;
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding(const System::UnicodeString ACharSet)/* overload */;
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding(System::Sysutils::TEncoding* AEncoding)/* overload */;
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_Default(void);
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_OSDefault(void);
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_8Bit(void);
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_ASCII(void);
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_UTF16BE(void);
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_UTF16LE(void);
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_UTF7(void);
extern DELPHI_PACKAGE _di_IIdTextEncoding __fastcall IndyTextEncoding_UTF8(void);
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.07.2015, 09:54  [ТС]
Avazart, сделал всё по твоей ссылке, но при нажатии на кнопку отправки вылетает вот такое сообщение
Изображения
 
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.07.2015, 13:28
Ну так а TIdSSLIOHandlerSocketOpenSSL подключать кто будет?

Добавлено через 1 минуту
Цитата Сообщение от _Dimon_ Посмотреть сообщение
я вместо ф-ции EncodeQuotedUtf8 использовал событие TIdMessage.OnInitializeISO
А этот прием давно уже не работает (гдето с девятых индей)
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.07.2015, 14:00  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так а TIdSSLIOHandlerSocketOpenSSL подключать кто будет?
Avazart, в твоём примере TIdSSLIOHandlerSocketOpenSSL небыло
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.07.2015, 14:23
Цитата Сообщение от Sasha Посмотреть сообщение
Avazart, в твоём примере TIdSSLIOHandlerSocketOpenSSL небыло
Что значит небыло, как без него, настройки та SSL- ные? Или в дизайнере теяжело связать, не все же в коде писать?
2
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
09.07.2015, 15:38
Цитата Сообщение от Avazart Посмотреть сообщение
А этот прием давно уже не работает (гдето с девятых индей)
проверил, что странно, что для UTF-8 работает, а для windows-1251 нет
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.07.2015, 15:42  [ТС]
Avazart, коде добавил вот эту строку
C++
1
 IdSMTP1->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
Но ошибка осталась может надо ещё где-нить что-то дописать?
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
09.07.2015, 15:45
Sasha, можно просто в дизайнере компоненту IdSMTP1 в свойство IOHandler поставить IdSSLIOHandlerSocketOpenSSL1
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.07.2015, 16:12  [ТС]
Цитата Сообщение от _Dimon_ Посмотреть сообщение
Sasha, можно просто в дизайнере компоненту IdSMTP1 в свойство IOHandler поставить IdSSLIOHandlerSocketOpenSSL1
_Dimon_, добавил эту строку в
C++
1
2
3
4
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  IdSMTP1->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
}
Прокатило.

Но теперь другя ошибка при нажатии на кнопку вылетает вот такая вот ошибка
Изображения
 
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2015, 16:12
Помогаю со студенческими работами здесь

IdPOP3. Проверка почты на mail.ru. Неверная кодировка текста.
Пишу код: //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject...

Отправка почты через Outlook
Здравствуйте! Тема избита, но все равно не могу найти решение. Делаю как предлагают в...

Отправка почты без indy
Всем доброго времени суток. У меня такая проблема писал почтовый клиент, всё отправляет, но ошибка кодировки, "перелопатил гору"...

Отправка почты в другом потоке
Народ, мне надо отправить почту в дугом потоке, чтобы програ не висла. С помощью компонентов NMSMTP или IdSMTP. Программу написал, в...

IdSMTP - Отправка почты через прокси
Добрый день. Появился вот такой вопрос: хочу сделать в своей программе отправку сообщения на емайл. Вот код: //на форме INDI //...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru