使用日历项目中的附件 - Outlook - C#

时间:2015-10-18 09:58:57

标签: c# calendar outlook ms-office office-interop

我正在尝试使用已提取的日历项目中包含的附件​​。 我有一个从前一个对话框中选择的日历主题行的列表,当主题正确传输时,正文不能正常工作(完全是另一个问题),但附件无法正常工作。 这是我的foreach循环,其中附件被放入Attachments数组中供以后使用:

        string[] subjects = new string[dialog.chosen.Count];
        string[] bodies = new string[dialog.chosen.Count];
        Attachments[] attach = new Attachments[dialog.chosen.Count];
        foreach (Outlook.AppointmentItem appt in rangeAppts)
        {
            foreach (string text in dialog.chosen)
            {
                if (text == appt.Subject)
                {
                    subjects[i] = appt.Subject;
                    bodies[i] = Convert.ToString(appt.Body);
                    attach[i] = appt.Attachments;
                    i = i + 1;
                }
            }

        }

然后我在这里实际上称之为方法:

            sendEmailTemplate(bodies[i], subject, to, "", attachment: attach[i]);

然后是方法本身:

public void sendEmailTemplate(string body, string subject, string to, string cc , Attachments attachment = null)
{
    Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();
    Microsoft.Office.Interop.Outlook._MailItem oMailItem = (Microsoft.Office.Interop.Outlook._MailItem)oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
    oMailItem.HTMLBody = body;
    oMailItem.Subject = subject;
    try
    {
        oMailItem.Attachments.Add(attachment);
    }
    catch {}
    oMailItem.To = to;
    oMailItem.CC = cc;
    oMailItem.Display(false);
    oMailItem.Application.ActiveInspector().WindowState = Microsoft.Office.Interop.Outlook.OlWindowState.olNormalWindow;
}

我尝试了几件事情,但是当我真正去发送电子邮件时,我最终得到了:

  

例外:未找到成员。 HRESULT:0x80020003

然后我无法得到任何其他工作。该方法的try / catch循环是为了防止上述异常,因为无论附件是否存在,我都会得到该异常,现在附件都没有被添加。

我正在使用Office附带的Interop和C#。 Winforms如果有所作为。

1 个答案:

答案 0 :(得分:1)

MailItem.Attachments采用字符串(完全限定文件名)或其他Outlook项(MailItem,ContactItem等)。

您不能将Attachments对象作为参数传递。如果您需要复制附件,遍历Attachments集合中的所有附件,请为每个附件调用Attachment.SaveAsFile,将文件名传递给MailItem.Attachments.Add,删除临时文件。