Member 13628387 Ответов: 1

Хотите создать приложение windows с помощью C# для чтения и отправки почты с помощью outlook


Я могу отправить письмо, используя приведенный ниже код:
private void btn_Send_Click(object sender, EventArgs e)
       {
           try
           {
               Outlook._Application _app = new Outlook.Application();
               Outlook.MailItem mail = (Outlook.MailItem)_app.CreateItem(Outlook.OlItemType.olMailItem);
               mail.To = txt_To.Text;
               mail.Subject = txt_Subject.Text;
               mail.Body = txt_Message.Text;
               mail.Importance = Outlook.OlImportance.olImportanceNormal;
               ((Outlook._MailItem)mail).Send();
               MessageBox.Show("Your Message has been successfully sent.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
           }
       }


Но я столкнулся с ошибкой при чтении писем из outlook, ниже приведен мой код для чтения почты:
private void btn_Receive_Click(object sender, EventArgs e)
       {
           try
           {
               Outlook._Application _app = new Outlook.Application();
               Outlook._NameSpace _ns = _app.GetNamespace("MAPI");
               Outlook.MAPIFolder inbox = _ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
               _ns.SendAndReceive(true);
               dt = new DataTable("Inbox");
               dt.Columns.Add("Subject", typeof(string));
               dt.Columns.Add("Sender", typeof(string));
               dt.Columns.Add("Body", typeof(string));
               dt.Columns.Add("Date", typeof(string));
               dataGrid.DataSource = dt;
               foreach (Outlook.MailItem item in inbox.Items)
               {
                   dt.Rows.Add(new object[] { item.Subject, item.SenderName, item.HTMLBody, item.SentOn.ToLongDateString() + "" + item.SentOn.ToLongDateString() });
               }

           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
           }
       }


Ошибка: невозможно привести COM-объект типа 'System._ComObject "к интерфейсу типа" Майкрософт.Офис.Взаимодействие.Прогноз.Сообщения'. Эта операция не удалась, так как вызов QueryInterface на COM-компоненте для интерфейса с IID '{00063034-0000-0000-C000-000000000046}' не удался из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0*80004002 (E_NOINTERFACE)).

Что я уже пробовал:

After googling i found that we have to check If Item.Class=43, but when I try putting that If like: (if(item.Class=43)) condition, it shows a error stating 

Property or indexer '_MailItem.Class' cannot be assigned to -- it is read only 


Пожалуйста, помогите мне исправить это.

F-ES Sitecore

Это два равных для сравнения

если(пункт.Класс==43)

код, с которого вы скопировали, был vb.net который использует только один.

1 Ответов

Рейтинг:
2

OriginalGriff

Простой:

if(item.Class=43)

Property or indexer '_MailItem.Class' cannot be assigned to -- it is read only
Один равен-это назначение. два-это сравнение. Попробуй:
if(item.Class == 43)


Member 13628387

Есть и другая ошибка, говорит он:
Оператор '==' не может применяться к операндам типа OlObjectClass 'и' Инт'

OriginalGriff

Должно быть, я схожу с ума: я уверен, что ответил на это сегодня утром ... :смущенный:

Member 13628387

Извините, но я все еще получаю эту ошибку ниже всякий раз, когда пытаюсь получить все свои письма из outlook imbox
Ошибка: невозможно привести COM-объект типа 'System._ComObject "к интерфейсу типа" Майкрософт.Офис.Взаимодействие.Прогноз.Сообщения'. Эта операция не удалась, так как вызов QueryInterface на COM-компоненте для интерфейса с IID '{00063034-0000-0000-C000-000000000046}' не удался из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0*80004002 (E_NOINTERFACE)).

Member 13628387

И есть 6037 писем в моем почтовом ящике outlook, но когда я отлаживаю код, он показывает 1915 как счетчик в этом цикле for (foreach (Outlook.Пункт сообщения в папке "Входящие".Утварь)). Я действительно хочу взломать этот код, я не знаю, как это исправить). В основном я хочу показать все электронные письма из почтового ящика outlook в приложении windows(Grid) с помощью c#