【问题标题】:Use attachments from calendar items - Outlook - C#使用日历项目中的附件 - Outlook - C#
【发布时间】:2015-10-19 01:14:16
【问题描述】:

我正在尝试使用以编程方式提取的日历项目中包含的附件​​。 我有一个从前一个对话框中选择的日历主题行的列表,虽然主题正在正确传输,但正文无法正常工作(完全是另一个问题),但附件无法正常工作。 这是我的 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 如果这有影响的话。

【问题讨论】:

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


    【解决方案1】:

    MailItem.Attachments 采用字符串(完全限定的文件名)或另一个 Outlook 项目(MailItem、ContactItem 等)。

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

    【讨论】:

    • 非常感谢 - 有没有办法根据文件类型命名文件,以便可以打开?这些文件已正确下载,但它们没有得到正确的文件扩展名。使用 Attachment.FileName / DisplayName/ FilePath / 其他任何东西似乎都不起作用。该程序需要能够下载所有类型的文件并使其保持可打开状态。
    • 不使用 Outlook 对象模型 - 您可以在调用 MailItem.Attachments 之前适当地命名(或重命名)文件,或者在之后使用 Redemption 设置文件名。
    • 有没有办法检测文件类型,以便我可以在文件扩展名中编程以进行重命名?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多