Как проверить, было ли отправлено письмо с использованием MAPI в WPF-проекте? - PullRequest
0 голосов
/ 13 июня 2019

Я не могу знать, отправил ли пользователь письмо или прервал процесс.

Я работаю над WPF-проектом, который шифрует файлы в aes-256 и открывает всплывающее окно Outlook, где выМожно отправить зашифрованный файл.Для расшифровки файла необходим код, который отправляется с помощью SMS человеку, но если письмо не было отправлено, SMS также отправлять не нужно.Проблема в том, что я не могу найти способ определить это.

try
{
    SendMail(zipfile + ".aes");
    if (mapi.sent == true)
        SendNewSms();           //do not send the SMS if the email has not been sent
    else if (mapi.sent == false)
        MessageBox.Show("It didn't work!!");
}
catch
{
    MessageBox.Show("Error: MAIL");
}

public void SendMail(string attachment)
{
    string subject = "";
    string body = "";
    string attachmentPath = attachment;

    mapi.AddAttachment(attachmentPath);
    mapi.SendMailPopup(subject, body);
}

Класс MAPI имеет этот код, который должен отправлять почту.Переменная «sent» - это логическое значение, которое я добавил сам

[DllImport("MAPI32.DLL")]
static extern int MAPISendMail(IntPtr sess, IntPtr hwnd, MapiMessage message, int flg, int rsv);

int SendMail(string strSubject, string strBody, int how)
{
    MapiMessage msg = new MapiMessage();
    msg.subject = strSubject;
    msg.noteText = strBody;

    msg.recips = GetRecipients(out msg.recipCount);
    msg.files = GetAttachments(out msg.fileCount);

    m_lastError = MAPISendMail(new IntPtr(0), new IntPtr(0), msg, how,
        0);
    if (m_lastError > 1)
        MessageBox.Show("MAPISendMail failed! " + GetLastError(), "MAPISendMail");

    Cleanup(ref msg);
    return m_lastError;
}

Я ожидал, что логическое значение будет установлено в значение true, если письмо было отправлено, иначе оно останется ложным.

Надеюсь написано понятно!

1 Ответ

0 голосов
/ 13 июня 2019

Простой MAPI не указывает, отправлено ли сообщение. Однако вы можете отслеживать изменения в папке «Отправленные». Как только элемент добавлен в папку, ваше сообщение отправлено.

В объектной модели Outlook вы можете найти свойство MailItem.Sent , которое возвращает логическое значение, указывающее, было ли отправлено сообщение.

...