dostoevskiy29
@dostoevskiy29
pomogite

C++/CLI Работа IMAP с использованием библиотеки chikkat?

Добрый день, дали задание сделать почтовый клиент на C++/CLI. В качестве решения выбрал библиотеку chilkat, так как она очень гибкая и многофункциональная. Реализовал протокол SMTP, но вот IMAP не смог реализовать в полной мере.
Смог авторизоваться на сервере и получил доступ к папкам с сообщениями, но когда пытаюсь вывести какое либо сообщение или посмотреть список, то вместо отправителя или вообще вместо самого сообщения получаю всегда "true". Что только не пытался, обшарил документацию, но все равно не нашел как "true" превратить в текст.

Вот ссылка на документацию библиотеки:

Вот код из моего проекта:
textBox4->Clear();
		const char* imapC;
		if (comboBox1->SelectedIndex == 1)
		{
			imapC = "imap.mail.ru";
		}
		if (comboBox1->SelectedIndex == 2)
		{
			imapC = "imap.gmail.com";
		}
		if (comboBox1->SelectedIndex == 3)
		{
			imapC = "imap.yandex.ru";
		}

		CkMime mime;		
		/*IntPtr loginS = Marshal::StringToHGlobalAnsi(textBox2->Text + "\r\n");
		const char* loginC = (char*)loginS.ToPointer();
		IntPtr passwS = Marshal::StringToHGlobalAnsi(textBox3->Text + "\r\n");
		const char* passwC = (char*)passwS.ToPointer();*/
		if (comboBox1->SelectedIndex != 0)
		{

			CkGlobal glob;
			bool success = glob.UnlockBundle("Anything for 30-day trial");
			if (success == true) {
				textBox4->Text += "Статус: Дамп библиотеки загружен" + "\r\n";
			}

			CkImap imap;

			imap.put_Ssl(true);
			imap.put_Port(993);
			success = imap.Connect(imapC);
			if (success != true) {
				textBox4->Text += "Статус: Не подключился" + "\r\n";
			}
			else {
				textBox4->Text = "Статус: Подключено" + "\r\n";
			}

			success = imap.Login("Ya@yandex.ru", "password");
			if (success != true) {
				textBox4->Text += "Статус: Неверные данные" + "\r\n";
			}
			else {
				textBox4->Text += "Статус: Вы авторизовались" + "\r\n";
			}

			success = imap.SelectMailbox("Inbox");
			if (success != true) {
				textBox4->Text += "Статус: Такой папки нет" + "\r\n";
			}
			else {
				textBox4->Text += "Статус: Выбрана папка - " + "Входящие\r\n\r\n";
			}

			CkMessageSet* messageSet = 0;
			// We can choose to fetch UIDs or sequence numbers.
			bool fetchUids = true;
			// Get the message IDs of all the emails in the mailbox
			messageSet = imap.Search("ALL", fetchUids);
			if (imap.get_LastMethodSuccess() == false) {
				textBox4->Text += "Статус: Ошибка папки" + "\r\n";
			}

			CkEmailBundle* bundle = 0;
			bundle = imap.FetchHeaders(*messageSet);
			if (imap.get_LastMethodSuccess() == false) {
				delete messageSet;
				textBox4->Text += "Статус: Ошибка папки" + "\r\n";
			}


			

			bundle = imap.FetchSequenceHeaders(1, imap.get_NumMessages());
			if (imap.get_LastMethodSuccess() != true) {
				textBox4->Text += "Статус: Ошибка папки c письмами" + "\r\n";
			}

			if (bundle->get_MessageCount() == 0) {
				textBox4->Text += "Статус: Нет сообщений в папке" + "\r\n";
				delete bundle;
			}

			const char *fetchAttachmentString(CkEmail &emailObject, int attachmentIndex, const char *charset);

			textBox4->Text += "Всего писем - " + Convert::ToString(bundle->get_MessageCount()) + "\r\n\r\n";
			
			int j = 0;
			int numEmails = bundle->get_MessageCount();
			while (j < numEmails) {
				CkEmail* email = bundle->GetEmail(j);
				textBox4->Text += "#" + (j + 1) + "\r\n";
				textBox4->Text += "От кого: ";
				textBox4->Text += Convert::ToString(email->ck_from()) + ". ";
				textBox4->Text += "Тема: ";
				textBox4->Text += Convert::ToString(email->subject()) + "\r\n";
				delete email;
				j = j + 1;
			}


			
			delete bundle;

			// Disconnect from the IMAP server.
			success = imap.Disconnect();
		}
		else {
			MessageBox::Show("Укажите узел IMAP", "Ошибка");
		}
  • Вопрос задан
  • 11 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы