C # отправка электронной почты с Outlook - нет вложений в исходящих - PullRequest
1 голос
/ 18 января 2012

У меня есть программа, которая использует Outlook для отправки сообщений с вложениями. Работает нормально, отправка писем с вложениями, но в папке исходящих сообщений в сообщении нет вложений. Когда кто-то получает сообщение, вложение видно, а в папке исходящих - нет. Вот некоторый код:

        Outlook.MailItem mail = (Outlook.MailItem)outlookApp.CreateItem(Outlook.OlItemType.olMailItem);
        mail.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
        int iAttachType = (int)Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue;  
        mail.Attachments.Add(Application.StartupPath+"/"+attachment, iAttachType, null, attachment);
        mail.To = email;
        mail.Subject = "Something";
        mail.Body = "Some body";
        mail.Send();

До этого я использую:

    private Outlook.Application outlookApp;
    private Outlook._NameSpace outlookNameSpace;
    private Outlook.MAPIFolder outbox;

и

            outlookApp = new Outlook.Application();
            outlookNameSpace = outlookApp.GetNamespace("MAPI");
            outlookNameSpace.Logon(null, null, false, false);
            outbox = outlookNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderOutbox);

Моя программа Outlook связана с Microsoft Exchange Serwer. Когда я использовал приложение, написанное на C ++, оно сохраняло вложения в сообщениях в исходящих.

Спасибо за помощь!

1 Ответ

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

Возможно, вы работаете со старой версией элемента Outlook.

Это может произойти, если вы храните ссылки на свои почтовые отправления, шаблоны записей, инспекторов и некоторые другие типы [которые я сейчас забыл] дольше, чем они вам нужны.

Ваша ссылка часто будет указывать на старую версию элемента, и ее сохранение также может помешать вам получить ссылку на обновленную версию (ту, что содержит вложение), даже если события (Folder.BeforeItemMove)сработало.

Кроме того, пробовали ли вы, если mail.Save () что-нибудь для вас сделает?

Это то, что я использую, как только я закончу с элементом.

public static void NullAndRelease(object o)
{
    if (o == null) {
        return;
    }

    try {
        int releaseResult = 0;
        do {
            releaseResult = System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
        } while (releaseResult >= 0);
    } catch {
    } finally {
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}

Улов не имеет сообщения и не важен в моем случае.Это есть, если кто-то передаст ссылку, которая приведет к чему-то другому, чем com-объект.Вы также можете попробовать FinalReleaseComObject (o).

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