Откройте диалог отправки электронной почты в Outlook через C # - PullRequest
2 голосов
/ 20 января 2012

Мое приложение требует открыть окно отправки электронной почты в Outlook.

Приложение отображает список счетов.Когда пользователь нажимает на номер счета-фактуры, мне нужно открыть окно отправки электронной почты в Outlook и прикрепить инструкцию в формате PDF.Затем пользователь может изменить сообщение и нажать «Отправить».

Как мне это сделать?

Я пробовал следующее:

    using Outlook = Microsoft.Office.Interop.Outlook;

Приложение отлично работает при разработкесреда, но я получаю исключение:

**System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))**

Detailed:

    System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
       at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
     at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
    at InvoiceSearchTool.Controllers.emailController.CreateMessageWithAttachment(String invoiceNumber, String recipient, String messageBody) in C:\Projects\KeleInvoice\InvoiceSearchTool\Controllers\emailController.cs:line 38

У меня не установлен Outlook на сервере приложений.мне нужно istall перспективы на сервере?или исключение по какой-то другой причине?как от этого избавиться?

РЕДАКТИРОВАТЬ: Добавление кода

public static void CreateMessageWithAttachment(string invoiceNumber, string recipient, string messageBody )
    {
        try
        {

            Outlook.Application oApp = new Outlook.Application();
            Outlook.MailItem email = (Outlook.MailItem)(oApp.CreateItem(Outlook.OlItemType.olMailItem));

            Models.DYNAMICS_EXTEntities _db = new Models.DYNAMICS_EXTEntities();

            #region set email recipients
            {
                ObjectParameter[] parameters = new ObjectParameter[1];
                parameters[0] = new ObjectParameter("InvoiceNumber", invoiceNumber);

                List<Models.EmailAddress> emailList = _db.ExecuteFunction<Models.EmailAddress>("uspGetEmailAddress", parameters).ToList<Models.EmailAddress>();
                if (emailList.Count() > 0)
                {
                    if(!(string.IsNullOrEmpty(emailList[0].Email.ToString().Trim()) ))
                    recipient = emailList[0].Email.ToString().Trim();
                    else
                        recipient = " ";
                }
                else
                    recipient = " ";

                email.Recipients.Add(recipient);
            }
            #endregion

            //email subject                 
            email.Subject = "Invoice # " + invoiceNumber;

            #region set email Text
            {
                Models.EmailText emailText = _db.ExecuteFunction<Models.EmailText>("uspEmailText").SingleOrDefault();

                messageBody = emailText.EmailTextLine1.ToString().Trim();
                email.Body = messageBody;
            }
            #endregion

            #region email attachment
            {
                string fileName = invoiceNumber.Trim();
                string filePath = HostingEnvironment.MapPath("~/Content/reports/");
                filePath = filePath + fileName + ".pdf";
                fileName += ".pdf";
                int iPosition = (int)email.Body.Length + 1;
                int iAttachType = (int)Outlook.OlAttachmentType.olByValue;
                Outlook.Attachment oAttach = email.Attachments.Add(filePath, iAttachType, iPosition, fileName);
            }
            #endregion

            email.Display();                

                        }
        catch (Exception e)
        {
            InvoiceSearchTool.Models.udtExceptionTable exception = new udtExceptionTable();
            exception.MethodName = "email";
            exception.Exception = e.ToString();
            exception.Date = DateTime.Now;
            DYNAMICS_EXTEntities db = new DYNAMICS_EXTEntities();
            db.AddToudtExceptionTables(exception);
            db.SaveChanges();

        }

    }

Ответы [ 3 ]

2 голосов
/ 20 января 2012

у вас должен быть установлен MS Outlook, приложения COM Interop of Office полагаются на доступность приложений Office, Microsoft по-прежнему хочет, чтобы вы платили за вашу копию, не предоставляет вам библиотеку, которая заменяет Word, Excel или Outlook.

0 голосов
/ 20 января 2012

Теперь, когда у нас есть ваши реальные требования, все становится немного проще.

Прежде всего, избавьтесь от Outlook из смеси.Вам это не нужно.

Когда пользователь щелкает номер счета-фактуры, попросите его отправить сообщение вместе с письмом.Как только они введут это, используйте стандартные объекты .net smtp для создания почтового сообщения, прикрепите pdf и отправьте через ваш почтовый сервер.

Вам не нужен Outlook, установленный на сервере, и не требуется никакой тип взаимодействия.

Если вы используете Exchange или сервер IMAP, электронная почта будет отображаться в поле Отправленные для внешнего вида пользователей.

0 голосов
/ 20 января 2012

Если вы хотите использовать объекты Microsoft COM для отправки электронных писем, попробуйте взглянуть на эту ссылку MS, и вы пройдете шаг за шагом.надеюсь, на вашем компьютере также будут COM-объекты.

Отправка электронных писем Outlook через COM-объект

...