コード例 #1
0
ファイル: MailHelper.cs プロジェクト: SupremeGenius/espUrl
        /// <summary>
        /// Sends the mail message.
        /// </summary>
        private void _ShowMail(object deleteFilesOnExit)
        {
            MAPIHelperInterop.MapiMessage message = new MAPIHelperInterop.MapiMessage();

            using (RecipientCollection.InteropRecipientCollection interopRecipients = _recipientCollection.GetInteropRepresentation()) {
                message.Subject  = _subject;
                message.NoteText = _body;

                message.Recipients     = interopRecipients.Handle;
                message.RecipientCount = _recipientCollection.Count;

                // Check if we need to add attachments
                if (_files.Count > 0)
                {
                    // Add attachments
                    message.Files = _AllocAttachments(out message.FileCount);
                }

                // Signal the creating thread (make the remaining code async)
                _manualResetEvent.Set();

                const int MAPI_DIALOG = 0x8;
                //const int MAPI_LOGON_UI = 0x1;
                int error = MAPIHelperInterop.MAPISendMail(IntPtr.Zero, IntPtr.Zero, message, MAPI_DIALOG, 0);

                if (_files.Count > 0)
                {
                    // Deallocate the files
                    _DeallocFiles(message);
                    if ((bool)deleteFilesOnExit)
                    {
                        foreach (string file in _files)
                        {
                            try {
                                if (File.Exists(file))
                                {
                                    LOG.Debug("Deleting file " + file);
                                    File.Delete(file);
                                }
                            } catch (Exception e) {
                                LOG.Error("Can't delete file " + file, e);
                            }
                        }
                    }
                }
                MAPI_CODES errorCode = (MAPI_CODES)Enum.ToObject(typeof(MAPI_CODES), error);

                // Check for error
                if (errorCode != MAPI_CODES.SUCCESS && errorCode != MAPI_CODES.USER_ABORT)
                {
                    _LogErrorMapi(errorCode);
                }
            }
        }
コード例 #2
0
ファイル: MailHelper.cs プロジェクト: zhk/greenshot
        /// <summary>
        /// Sends the mail message.
        /// </summary>
        private void _ShowMail()
        {
            var message = new MapiHelperInterop.MapiMessage();

            using (var interopRecipients = Recipients.GetInteropRepresentation()) {
                message.Subject  = Subject;
                message.NoteText = Body;

                message.Recipients     = interopRecipients.Handle;
                message.RecipientCount = Recipients.Count;

                // Check if we need to add attachments
                if (Files.Count > 0)
                {
                    // Add attachments
                    message.Files = _AllocAttachments(out message.FileCount);
                }

                // Signal the creating thread (make the remaining code async)
                _manualResetEvent.Set();

                const int MAPI_DIALOG = 0x8;
                //const int MAPI_LOGON_UI = 0x1;
                int error = MapiHelperInterop.MAPISendMail(IntPtr.Zero, IntPtr.Zero, message, MAPI_DIALOG, 0);

                if (Files.Count > 0)
                {
                    // Deallocate the files
                    _DeallocFiles(message);
                }
                MAPI_CODES errorCode = (MAPI_CODES)Enum.ToObject(typeof(MAPI_CODES), error);

                // Check for error
                if (errorCode == MAPI_CODES.SUCCESS || errorCode == MAPI_CODES.USER_ABORT)
                {
                    return;
                }
                string errorText = GetMapiError(errorCode);
                Log.Error("Error sending MAPI Email. Error: " + errorText + " (code = " + errorCode + ").");
                MessageBox.Show(errorText, "Mail (MAPI) destination", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // Recover from bad settings, show again
                if (errorCode != MAPI_CODES.INVALID_RECIPS)
                {
                    return;
                }
                Recipients = new RecipientCollection();
                _ShowMail();
            }
        }
コード例 #3
0
ファイル: MailHelper.cs プロジェクト: zhk/greenshot
        /// <summary>
        /// Logs any Mapi errors.
        /// </summary>
        private string GetMapiError(MAPI_CODES errorCode)
        {
            string error = string.Empty;

            switch (errorCode)
            {
            case MAPI_CODES.USER_ABORT:
                error = "User Aborted.";
                break;

            case MAPI_CODES.FAILURE:
                error = "MAPI Failure.";
                break;

            case MAPI_CODES.LOGIN_FAILURE:
                error = "Login Failure.";
                break;

            case MAPI_CODES.DISK_FULL:
                error = "MAPI Disk full.";
                break;

            case MAPI_CODES.INSUFFICIENT_MEMORY:
                error = "MAPI Insufficient memory.";
                break;

            case MAPI_CODES.BLK_TOO_SMALL:
                error = "MAPI Block too small.";
                break;

            case MAPI_CODES.TOO_MANY_SESSIONS:
                error = "MAPI Too many sessions.";
                break;

            case MAPI_CODES.TOO_MANY_FILES:
                error = "MAPI too many files.";
                break;

            case MAPI_CODES.TOO_MANY_RECIPIENTS:
                error = "MAPI too many recipients.";
                break;

            case MAPI_CODES.ATTACHMENT_NOT_FOUND:
                error = "MAPI Attachment not found.";
                break;

            case MAPI_CODES.ATTACHMENT_OPEN_FAILURE:
                error = "MAPI Attachment open failure.";
                break;

            case MAPI_CODES.ATTACHMENT_WRITE_FAILURE:
                error = "MAPI Attachment Write Failure.";
                break;

            case MAPI_CODES.UNKNOWN_RECIPIENT:
                error = "MAPI Unknown recipient.";
                break;

            case MAPI_CODES.BAD_RECIPTYPE:
                error = "MAPI Bad recipient type.";
                break;

            case MAPI_CODES.NO_MESSAGES:
                error = "MAPI No messages.";
                break;

            case MAPI_CODES.INVALID_MESSAGE:
                error = "MAPI Invalid message.";
                break;

            case MAPI_CODES.TEXT_TOO_LARGE:
                error = "MAPI Text too large.";
                break;

            case MAPI_CODES.INVALID_SESSION:
                error = "MAPI Invalid session.";
                break;

            case MAPI_CODES.TYPE_NOT_SUPPORTED:
                error = "MAPI Type not supported.";
                break;

            case MAPI_CODES.AMBIGUOUS_RECIPIENT:
                error = "MAPI Ambiguous recipient.";
                break;

            case MAPI_CODES.MESSAGE_IN_USE:
                error = "MAPI Message in use.";
                break;

            case MAPI_CODES.NETWORK_FAILURE:
                error = "MAPI Network failure.";
                break;

            case MAPI_CODES.INVALID_EDITFIELDS:
                error = "MAPI Invalid edit fields.";
                break;

            case MAPI_CODES.INVALID_RECIPS:
                error = "MAPI Invalid Recipients.";
                break;

            case MAPI_CODES.NOT_SUPPORTED:
                error = "MAPI Not supported.";
                break;

            case MAPI_CODES.NO_LIBRARY:
                error = "MAPI No Library.";
                break;

            case MAPI_CODES.INVALID_PARAMETER:
                error = "MAPI Invalid parameter.";
                break;
            }
            return(error);
        }
コード例 #4
0
        /// <summary>
        /// Logs any Mapi errors.
        /// </summary>
        private void _LogErrorMapi(MAPI_CODES errorCode)
        {
            string error = string.Empty;

            switch (errorCode) {
                case MAPI_CODES.USER_ABORT:
                    error = "User Aborted.";
                    break;
                case MAPI_CODES.FAILURE:
                    error = "MAPI Failure.";
                    break;
                case MAPI_CODES.LOGIN_FAILURE:
                    error = "Login Failure.";
                    break;
                case MAPI_CODES.DISK_FULL:
                    error = "MAPI Disk full.";
                    break;
                case MAPI_CODES.INSUFFICIENT_MEMORY:
                    error = "MAPI Insufficient memory.";
                    break;
                case MAPI_CODES.BLK_TOO_SMALL:
                    error = "MAPI Block too small.";
                    break;
                case MAPI_CODES.TOO_MANY_SESSIONS:
                    error = "MAPI Too many sessions.";
                    break;
                case MAPI_CODES.TOO_MANY_FILES:
                    error = "MAPI too many files.";
                    break;
                case MAPI_CODES.TOO_MANY_RECIPIENTS:
                    error = "MAPI too many recipients.";
                    break;
                case MAPI_CODES.ATTACHMENT_NOT_FOUND:
                    error = "MAPI Attachment not found.";
                    break;
                case MAPI_CODES.ATTACHMENT_OPEN_FAILURE:
                    error = "MAPI Attachment open failure.";
                    break;
                case MAPI_CODES.ATTACHMENT_WRITE_FAILURE:
                    error = "MAPI Attachment Write Failure.";
                    break;
                case MAPI_CODES.UNKNOWN_RECIPIENT:
                    error = "MAPI Unknown recipient.";
                    break;
                case MAPI_CODES.BAD_RECIPTYPE:
                    error = "MAPI Bad recipient type.";
                    break;
                case MAPI_CODES.NO_MESSAGES:
                    error = "MAPI No messages.";
                    break;
                case MAPI_CODES.INVALID_MESSAGE:
                    error = "MAPI Invalid message.";
                    break;
                case MAPI_CODES.TEXT_TOO_LARGE:
                    error = "MAPI Text too large.";
                    break;
                case MAPI_CODES.INVALID_SESSION:
                    error = "MAPI Invalid session.";
                    break;
                case MAPI_CODES.TYPE_NOT_SUPPORTED:
                    error = "MAPI Type not supported.";
                    break;
                case MAPI_CODES.AMBIGUOUS_RECIPIENT:
                    error = "MAPI Ambiguous recipient.";
                    break;
                case MAPI_CODES.MESSAGE_IN_USE:
                    error = "MAPI Message in use.";
                    break;
                case MAPI_CODES.NETWORK_FAILURE:
                    error = "MAPI Network failure.";
                    break;
                case MAPI_CODES.INVALID_EDITFIELDS:
                    error = "MAPI Invalid edit fields.";
                    break;
                case MAPI_CODES.INVALID_RECIPS:
                    error = "MAPI Invalid Recipients.";
                    break;
                case MAPI_CODES.NOT_SUPPORTED:
                    error = "MAPI Not supported.";
                    break;
                case MAPI_CODES.NO_LIBRARY:
                    error = "MAPI No Library.";
                    break;
                case MAPI_CODES.INVALID_PARAMETER:
                    error = "MAPI Invalid parameter.";
                    break;
            }

            LOG.Error("Error sending MAPI Email. Error: " + error + " (code = " + errorCode + ").");
        }