使用日历项目中的附件 - Outlook - C#
Use attachments from calendar items - Outlook - C#
我正在尝试使用以编程方式提取的日历项目中包含的附件。
我有一个从上一个对话框中选择的日历主题行的列表,虽然主题正在正确传输,但正文运行不正常(完全是另一个问题)但附件不起作用。
这是我的 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;
}
我已经尝试了几种方法,但是当我真正去发送电子邮件时,我最终得到:
Exception: Member not found. HRESULT: 0x80020003
然后我无法让其他任何东西工作。该方法的 try/catch 循环是为了防止上述异常,因为无论附件是否存在,我都会收到该异常,现在只是不添加附件。
我正在使用 Office 和 C# 附带的 Interop。 Winforms 如果这有所作为。
MailItem.Attachments 采用字符串(完全限定文件名)或另一个 Outlook 项目(MailItem、ContactItem 等)。
您不能将附件对象作为参数传递。如果您需要复制附件,遍历附件集合中的所有附件,为每个附件调用 Attachment.SaveAsFile,将文件名传递给 MailItem.Attachments。添加,删除临时文件。
我正在尝试使用以编程方式提取的日历项目中包含的附件。 我有一个从上一个对话框中选择的日历主题行的列表,虽然主题正在正确传输,但正文运行不正常(完全是另一个问题)但附件不起作用。 这是我的 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;
}
我已经尝试了几种方法,但是当我真正去发送电子邮件时,我最终得到:
Exception: Member not found. HRESULT: 0x80020003
然后我无法让其他任何东西工作。该方法的 try/catch 循环是为了防止上述异常,因为无论附件是否存在,我都会收到该异常,现在只是不添加附件。
我正在使用 Office 和 C# 附带的 Interop。 Winforms 如果这有所作为。
MailItem.Attachments 采用字符串(完全限定文件名)或另一个 Outlook 项目(MailItem、ContactItem 等)。
您不能将附件对象作为参数传递。如果您需要复制附件,遍历附件集合中的所有附件,为每个附件调用 Attachment.SaveAsFile,将文件名传递给 MailItem.Attachments。添加,删除临时文件。