Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
1

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

05.07.2015, 23:54. Просмотров 3212. Ответов 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
Изображения
 
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2015, 23:54
Ответы с готовыми решениями:

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

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

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

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

32
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
06.07.2015, 00:26 2
кинь на форму 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
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,333
Записей в блоге: 29
08.07.2015, 00:41 3
Цитата Сообщение от _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
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
08.07.2015, 15:43  [ТС] 4
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
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,333
Записей в блоге: 29
08.07.2015, 15:48 5
Ну так новый билдер и там указано что должны быть компоненты на форме.
0
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
08.07.2015, 15:52  [ТС] 6
Так я эти компоненты перетянул на форму, но эффекта никакого

Добавлено через 38 секунд
Работаю С++ Builder XE4
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
08.07.2015, 15:53 7
я вместо ф-ции 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
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
08.07.2015, 16:00  [ТС] 8
_Dimon_, спасибо за розъяснение, но мне всё таки интересно как избавиться от ошибки в коде, который предоставил мне Avazart
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,333
Записей в блоге: 29
08.07.2015, 16:02 9
Цитата Сообщение от Sasha Посмотреть сообщение
Работаю С++ Builder XE4
Значит что-то изменили в интерфейсе Indy (я писал в XE3) нужно посмотреть что и поправить, для этого достаточно пошуршать по хедерам Indy.
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
08.07.2015, 16:38 10
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
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
08.07.2015, 16:50  [ТС] 11
_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
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
08.07.2015, 17:02 12
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
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
09.07.2015, 09:54  [ТС] 13
Avazart, сделал всё по твоей ссылке, но при нажатии на кнопку отправки вылетает вот такое сообщение
0
Изображения
 
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,333
Записей в блоге: 29
09.07.2015, 13:28 14
Ну так а TIdSSLIOHandlerSocketOpenSSL подключать кто будет?

Добавлено через 1 минуту
Цитата Сообщение от _Dimon_ Посмотреть сообщение
я вместо ф-ции EncodeQuotedUtf8 использовал событие TIdMessage.OnInitializeISO
А этот прием давно уже не работает (гдето с девятых индей)
1
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
09.07.2015, 14:00  [ТС] 15
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так а TIdSSLIOHandlerSocketOpenSSL подключать кто будет?
Avazart, в твоём примере TIdSSLIOHandlerSocketOpenSSL небыло
0
Эксперт С++
8341 / 6090 / 607
Регистрация: 10.12.2010
Сообщений: 28,333
Записей в блоге: 29
09.07.2015, 14:23 16
Цитата Сообщение от Sasha Посмотреть сообщение
Avazart, в твоём примере TIdSSLIOHandlerSocketOpenSSL небыло
Что значит небыло, как без него, настройки та SSL- ные? Или в дизайнере теяжело связать, не все же в коде писать?
2
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
09.07.2015, 15:38 17
Цитата Сообщение от Avazart Посмотреть сообщение
А этот прием давно уже не работает (гдето с девятых индей)
проверил, что странно, что для UTF-8 работает, а для windows-1251 нет
0
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
09.07.2015, 15:42  [ТС] 18
Avazart, коде добавил вот эту строку
C++
1
 IdSMTP1->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
Но ошибка осталась может надо ещё где-нить что-то дописать?
0
1404 / 567 / 127
Регистрация: 31.10.2011
Сообщений: 1,955
09.07.2015, 15:45 19
Sasha, можно просто в дизайнере компоненту IdSMTP1 в свойство IOHandler поставить IdSSLIOHandlerSocketOpenSSL1
1
4946 / 2410 / 530
Регистрация: 05.06.2008
Сообщений: 7,512
Записей в блоге: 3
09.07.2015, 16:12  [ТС] 20
Цитата Сообщение от _Dimon_ Посмотреть сообщение
Sasha, можно просто в дизайнере компоненту IdSMTP1 в свойство IOHandler поставить IdSSLIOHandlerSocketOpenSSL1
_Dimon_, добавил эту строку в
C++
1
2
3
4
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  IdSMTP1->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
}
Прокатило.

Но теперь другя ошибка при нажатии на кнопку вылетает вот такая вот ошибка
0
Изображения
 
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2015, 16:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.