ThisAddIn.cs
author Dean Looyengoed
Tue, 26 Apr 2016 17:56:33 +0200
changeset 830 592efb9cf41d
parent 820 6a08ad3137da
child 831 02fc35559e5b
permissions -rw-r--r--
Handle and log errors in DisableGpgOL method.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     1
using Microsoft.Win32;
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     2
using pEpCOMServerAdapterLib;
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     3
using System;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     4
using System.Collections.Generic;
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     5
using System.Globalization;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     6
using System.Runtime.InteropServices;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
     7
using System.Security.Cryptography;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
     8
using System.Text;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     9
using System.Threading;
47
d3b5164cc922 read in extra keys
Volker Birk <vb@pep-project.org>
parents: 46
diff changeset
    10
using System.Windows.Forms;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
    11
using Office = Microsoft.Office.Core;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    12
using Outlook = Microsoft.Office.Interop.Outlook;
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    13
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    14
namespace pEp
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    15
{
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    16
    public partial class ThisAddIn
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    17
    {
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    18
        #region VSTO generated code
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    19
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    20
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    21
        /// Required method for Designer support - do not modify
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    22
        /// the contents of this method with the code editor.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    23
        /// </summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    24
        private void InternalStartup()
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    25
        {
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    26
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    27
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    28
        }
201
9e0548fa3942 Code reformatting.
Markus Schaber <markus@pep-security.net>
parents: 191
diff changeset
    29
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    30
        #endregion
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    31
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    32
        private const string REG_KEY_SOFTWARE                         = "Software";
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    33
        private const string REG_KEY_PEP                              = "pEp";
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
    34
        private const string REG_KEY_MICROSOFT_OFFICE                 = "Microsoft\\Office";
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
    35
        private const string REG_KEY_ENCRYPTED_ACCOUNTS_LIST          = "EncryptedAccountsList";
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
    36
        private const string REG_NAME_ACCOUNT_WHITELIST               = "AccountWhitelist";
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
    37
        private const string REG_NAME_CRASH_REPORT_SEND_ADDRESS       = "CrashReportSendAddress";
820
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
    38
        private const string REG_NAME_DEFAULT_CODEPAGE_OUT            = "Default_CodePageOut"; // Name defined by Microsoft
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    39
        private const string REG_NAME_EXTRA_KEYS                      = "ExtraKeys";
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    40
        private const string REG_NAME_IS_CRASH_REPORT_VISIBLE         = "IsCrashReportVisible";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    41
        private const string REG_NAME_IS_DEVELOPER_MODE_ENABLED       = "IsDeveloperModeEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    42
        private const string REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED = "IsEncryptAllAccountsEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    43
        private const string REG_NAME_IS_KEY_SERVER_USED              = "IsKeyServerUsed";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    44
        private const string REG_NAME_IS_PASSIVE_MODE_ENABLED         = "IsPassiveModeEnabled";
816
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
    45
        private const string REG_NAME_IS_PEP_FOLDER_VISIBLE           = "IsPEPFolderVisible";
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    46
        private const string REG_NAME_IS_TNEF_DISABLED                = "DisableTNEF"; // Name defined by Microsoft
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    47
        private const string REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED  = "IsUnencryptedSubjectEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    48
        private const string REG_NAME_IS_VERBOSE_LOGGING_ENABLED      = "IsVerboseLoggingEnabled";
206
630f24c2cd54 Add constants for pEp registry entry names and keys.
Dean Looyengoed
parents: 203
diff changeset
    49
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    50
        private string[]                 _AccountWhitelist            = Global.HARDCODED_ACCOUNT_WHITELIST;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    51
        private string                   _CrashReportSendAddress      = Global.CRASH_REPORT_SEND_ADDRESS_DEFAULT;
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    52
        private Dictionary<string, bool> _EncryptedAccountsList       = new Dictionary<string, bool>();
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    53
        private string[]                 _ExtraKeys                   = null;
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    54
        private bool                     _IsCrashReportVisible        = Global.IS_CRASH_REPORT_VISIBLE_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    55
        private bool                     _IsDeveloperModeEnabled      = Global.IS_DEVELOPER_MODE_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    56
        private bool                     _IsEncryptAllAccountsEnabled = Global.IS_ENCRYPT_ALL_ACCOUNTS_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    57
        private bool                     _IsKeyServerUsed             = Global.IS_KEY_SERVER_USED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    58
        private bool                     _IsPassiveModeEnabled        = Global.IS_PASSIVE_MODE_ENABLED_DEFAULT;
816
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
    59
        private bool                     _IsPEPFolderVisible          = Global.IS_PEP_FOLDER_VISIBLE_DEFAULT;
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    60
        private bool                     _IsTNEFDisabled              = Global.IS_TNEF_DISABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    61
        private bool                     _IsUnencryptedSubjectEnabled = Global.IS_UNENCRYPTED_SUBJECT_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    62
        private bool                     _IsVerboseLoggingEnabled     = Global.IS_VERBOSE_LOGGING_ENABLED_DEFAULT;
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    63
        private static pEpEngine         _pEp                         = null;
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    64
        private Outlook.Folder           _TempFolder                  = null;
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
    65
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    66
        private bool                       initialized      = false;
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    67
        private FormOptions.State          lastOptionsState = null;
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    68
        private Dictionary<string, string> userIDCache      = new Dictionary<string, string>();
750
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
    69
        private List<WatchedFolder>        watchedFolders   = new List<WatchedFolder>();
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    70
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    71
        /**************************************************************
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    72
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    73
         * Property Accessors
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    74
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    75
         *************************************************************/
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    76
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    77
        /// <summary>
650
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    78
        /// Gets the account whitelist as the combination of hardcoded and registry values.
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    79
        /// </summary>
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    80
        public string[] AccountWhitelist
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    81
        {
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    82
            get { return (this._AccountWhitelist); }
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    83
        }
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    84
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    85
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    86
        /// Gets the email address to send any crash report to.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    87
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    88
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    89
        public string CrashReportSendAddress
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    90
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    91
            get { return (this._CrashReportSendAddress); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    92
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    93
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    94
        /// <summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    95
        /// Gets the encrypted accounts list (as a dictionary) used to show which accounts are encrypted.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    96
        /// This is only those accounts which existed already in the registry plus any added 
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    97
        /// from saving the options form.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    98
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    99
        public Dictionary<string, bool> EncryptedAccountsList
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   100
        {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   101
            get { return (this._EncryptedAccountsList); }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   102
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   103
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   104
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   105
        /// Gets any extra encryption keys that were loaded from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   106
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   107
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   108
        public string[] ExtraKeys
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   109
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   110
            get { return (this._ExtraKeys); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   111
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   112
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   113
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   114
        /// Gets whether the crash report window is visible to the user.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   115
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   116
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   117
        public bool IsCrashReportVisible
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   118
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   119
            get { return (this._IsCrashReportVisible); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   120
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   121
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   122
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   123
        /// Gets whether developer mode is enabled.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   124
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   125
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   126
        public bool IsDeveloperModeEnabled
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   127
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   128
            get { return (this._IsDeveloperModeEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   129
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   130
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   131
        /// <summary>
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   132
        /// Gets or sets whether data should be stored encrypted for all accounts.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   133
        /// </summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   134
        public bool IsEncryptAllAccountsEnabled
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   135
        {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   136
            get { return (this._IsEncryptAllAccountsEnabled); }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   137
            set { this._IsEncryptAllAccountsEnabled = value; }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   138
        }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   139
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   140
        /// <summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   141
        /// Gets or sets whether to use a key server.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   142
        /// When set, this also updates the pEp engine.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   143
        /// </summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   144
        public bool IsKeyServerUsed
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   145
        {
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   146
            get { return (this._IsKeyServerUsed); }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   147
            set
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   148
            {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   149
                this._IsKeyServerUsed = value;
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   150
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   151
                // Start/stop key server
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   152
                if (this._IsKeyServerUsed)
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   153
                {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   154
                    ThisAddIn.pEp.start_keyserver_lookup();
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   155
                }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   156
                else
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   157
                {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   158
                    ThisAddIn.pEp.stop_keyserver_lookup();
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   159
                }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   160
            }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   161
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   162
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   163
        /// <summary>
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   164
        /// Gets or sets whether passive mode is enabled.
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   165
        /// When set, this also updates the pEp engine.
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   166
        /// Passive mode will not attach keys unless keys are received.
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   167
        /// </summary>
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   168
        public bool IsPassiveModeEnabled
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   169
        {
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   170
            get { return (this._IsPassiveModeEnabled); }
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   171
            set
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   172
            {
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   173
                this._IsPassiveModeEnabled = value;
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   174
                ThisAddIn.pEp.passive_mode(this._IsPassiveModeEnabled);
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   175
            }
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   176
        }
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   177
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   178
        /// <summary>
816
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   179
        /// Gets or sets whether the pEp folder (and its contents) are visible.
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   180
        /// When set, this will immediately update folder visiblity.
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   181
        /// </summary>
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   182
        public bool IsPEPFolderVisible
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   183
        {
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   184
            get { return (this._IsPEPFolderVisible); }
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   185
            set
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   186
            {
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   187
                this._IsPEPFolderVisible = value;
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   188
                this.SetTempFolderVisibility(this._IsPEPFolderVisible);
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   189
            }
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   190
        }
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   191
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   192
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   193
        /// Gets or sets whether TNEF/RTF format is forcefully disabled in the registry.
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   194
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   195
        public bool IsTNEFDisabled
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   196
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   197
            get { return (this._IsTNEFDisabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   198
            set { this._IsTNEFDisabled = value; }
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   199
        }
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   200
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   201
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   202
        /// Gets or sets whether to enable encryption of message subjects.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   203
        /// When set, this also updates the pEp engine.
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   204
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   205
        public bool IsUnencryptedSubjectEnabled
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   206
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   207
            get { return (this._IsUnencryptedSubjectEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   208
            set
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   209
            {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   210
                this._IsUnencryptedSubjectEnabled = value;
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   211
                ThisAddIn.pEp.unencrypted_subject(this._IsUnencryptedSubjectEnabled);
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   212
            }
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   213
        }
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   214
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   215
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   216
        /// Gets or sets whether verbose logging is enabled.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   217
        /// When set, this also updates the pEp engine.
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   218
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   219
        public bool IsVerboseLoggingEnabled
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   220
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   221
            get { return (this._IsVerboseLoggingEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   222
            set
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   223
            {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   224
                this._IsVerboseLoggingEnabled = value;
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   225
                ThisAddIn.pEp.verbose_logging(this._IsVerboseLoggingEnabled);
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   226
            }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   227
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   228
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   229
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   230
        /// Gets the pEp engine which is static.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   231
        /// </summary>
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   232
        public static pEpEngine pEp
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   233
        {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   234
            get
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   235
            {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   236
                if (_pEp == null)
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   237
                {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   238
                    try
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   239
                    {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   240
                        _pEp = new pEpEngine();
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   241
                    }
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   242
                    catch (Exception ex)
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   243
                    {
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   244
                        string summaryMessage = Properties.Resources.Message_InitError + " " +
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   245
                                                Properties.Resources.Message_Reinstall;
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   246
                        Global.StopAndSendCrashReport(ex, summaryMessage, false, true);
460
690f8853d7ae Start to implement the global exception handler in ThisAddIn.
Dean Looyengoed
parents: 455
diff changeset
   247
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   248
                        return null;
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   249
                    }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   250
                }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   251
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   252
                return _pEp;
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   253
            }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   254
        }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   255
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   256
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   257
        /// Gets the temporary outlook folder used to save unencrypted outlook mail items.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   258
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   259
        public Outlook.Folder TempFolder
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   260
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   261
            get { return (this._TempFolder); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   262
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   263
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   264
        /**************************************************************
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   265
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   266
         * Methods
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   267
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   268
         *************************************************************/
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   269
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   270
        /// <summary>
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   271
        /// Required override to add ribbon extensions.
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   272
        /// </summary>
326
2acfe22efee4 Remove pEp ribbon tab and add ribbon for backstage options (disabled for now).
Dean Looyengoed
parents: 307
diff changeset
   273
        protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
2acfe22efee4 Remove pEp ribbon tab and add ribbon for backstage options (disabled for now).
Dean Looyengoed
parents: 307
diff changeset
   274
        {
340
ded73ac01f51 Implement the send unencrypted option in the ribbon.
Dean Looyengoed
parents: 335
diff changeset
   275
            return new RibbonCustomizations();
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   276
        }
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   277
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   278
        /// <summary>
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   279
        /// Detects and disables GPG for Windows GpgOL Outlook add-in.
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   280
        /// </summary>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   281
        /// <returns>True if the GpgOL add-in was disabled.</returns>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   282
        private bool DisableGpgOL()
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   283
        {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   284
            bool wasDisabled = false;
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   285
            Office.COMAddIns comAddIns = null;
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   286
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   287
            try
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   288
            {
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   289
                comAddIns = Globals.ThisAddIn.Application.COMAddIns;
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   290
                foreach (Office.COMAddIn addin in comAddIns)
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   291
                {
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   292
                    if (string.Equals(addin.Description, "GpgOL - The GnuPG Outlook Plugin", StringComparison.OrdinalIgnoreCase))
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   293
                    {
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   294
                        addin.Connect = false;
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   295
                        wasDisabled = true;
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   296
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   297
                        Global.Log("DisableGpgOL: GpgOL was detected and disabled.");
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   298
                    }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   299
                }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   300
            }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   301
            catch (Exception ex)
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   302
            {
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   303
                Global.Log("DisableGpgOL: Error trying to disable GpgOL, " + ex.ToString());
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   304
            }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   305
            finally
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   306
            {
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   307
                if (comAddIns != null)
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   308
                {
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   309
                    Marshal.ReleaseComObject(comAddIns);
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   310
                    comAddIns = null;
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   311
                }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   312
            }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   313
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   314
            return (wasDisabled);
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   315
        }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   316
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   317
        /// <summary>
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   318
        /// Registers each personal identity in the pEp engine.
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   319
        /// An identity is determined by each account in Outlook.
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   320
        /// </summary>
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   321
        public void RegisterMyself()
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   322
        {
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   323
            Outlook.NameSpace ns = Application.Session;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   324
            Outlook.Account acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   325
            Outlook.Accounts accounts = ns.Accounts;
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   326
            Outlook.Recipient currUser = null;
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   327
            pEp_identity_s me;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   328
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   329
            for (int i = 1; i <= accounts.Count; i++)
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   330
            {
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   331
                acct = accounts[i];
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   332
                currUser = acct.CurrentUser;
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   333
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   334
                me = new pEp_identity_s();
14
84089e08d01c bugfix for Exchange account(s)
vb
parents: 13
diff changeset
   335
                me.address = acct.SmtpAddress;
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   336
                me.username = (currUser != null ? currUser.Name : null);
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   337
                me.user_id = Globals.ThisAddIn.GetUserID(me.address, null);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   338
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   339
                // Log information if invalid
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   340
                if (string.IsNullOrWhiteSpace(me.address))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   341
                {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   342
                    Global.Log("RegisterMyself: Myself[" + i.ToString() + "] doesn't have an address.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   343
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   344
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   345
                if (string.IsNullOrWhiteSpace(me.username))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   346
                {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   347
                    Global.Log("RegisterMyself: Myself[" + i.ToString() + "] doesn't have a username.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   348
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   349
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   350
                if (string.IsNullOrWhiteSpace(me.user_id))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   351
                {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   352
                    Global.Log("RegisterMyself: Myself[" + i.ToString() + "] doesn't have a user ID.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   353
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   354
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   355
                // Call engine
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   356
                try
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   357
                {
59
Volker Birk <vb@pep-project.org>
parents: 55
diff changeset
   358
                    pEp.myself(me);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   359
                }
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   360
                catch (COMException ex)
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   361
                {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   362
                    Global.StopAndSendCrashReport(ex);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   363
                }
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   364
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   365
                // Release objects
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   366
                if (acct != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   367
                {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   368
                    Marshal.ReleaseComObject(acct);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   369
                    acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   370
                }
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   371
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   372
                if (currUser != null)
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   373
                {
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   374
                    Marshal.ReleaseComObject(currUser);
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   375
                    currUser = null;
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   376
                }
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   377
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   378
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   379
            // Release objects
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   380
            if (ns != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   381
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   382
                Marshal.ReleaseComObject(ns);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   383
                ns = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   384
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   385
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   386
            if (acct != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   387
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   388
                Marshal.ReleaseComObject(acct);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   389
                acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   390
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   391
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   392
            if (accounts != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   393
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   394
                Marshal.ReleaseComObject(accounts);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   395
                accounts = null;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   396
            }
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   397
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   398
            if (currUser != null)
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   399
            {
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   400
                Marshal.ReleaseComObject(currUser);
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   401
                currUser = null;
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   402
            }
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   403
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   404
            return;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   405
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   406
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   407
        /// <summary>
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   408
        /// Gets whether the given contact should be forcefully sent unencrypted messages.
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   409
        /// This will read the value of the user property.
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   410
        /// </summary>
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   411
        /// <param name="contact">The contact to get the force unencrypted status from.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   412
        /// <returns>True if the mail item is force unencrypted, otherwise false or null.</returns>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   413
        public bool? GetForceUnencrypted(Outlook.ContactItem contact)
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   414
        {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   415
            bool? value = false;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   416
            Outlook.UserProperties properties = contact.UserProperties;
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   417
            Outlook.UserProperty up = properties.Find(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED);
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   418
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   419
            if (up == null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   420
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   421
                value = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   422
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   423
            else
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   424
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   425
                value = up.Value;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   426
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   427
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   428
            // Release objects
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   429
            if (properties != null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   430
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   431
                Marshal.ReleaseComObject(properties);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   432
                properties = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   433
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   434
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   435
            if (up != null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   436
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   437
                Marshal.ReleaseComObject(up);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   438
                up = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   439
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   440
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   441
            return (value);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   442
        }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   443
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   444
        /// <summary>
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   445
        /// Sets whether the given contact should be forcefully sent unencrypted messages.
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   446
        /// This will set the value of the user property.
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   447
        /// </summary>
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   448
        /// <param name="contact">The contact to set force unencrypted status for.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   449
        /// <param name="forceUnencrypted">The force unencrypted status to set.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   450
        public void SetForceUnencrypted(Outlook.ContactItem contact,
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   451
                                        bool forceUnencrypted)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   452
        {
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   453
            Outlook.UserProperties properties = contact.UserProperties;
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   454
            Outlook.UserProperty up = properties.Find(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED);
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   455
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   456
            if (up == null)
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   457
            {
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   458
                up = contact.UserProperties.Add(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED,
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   459
                                                Outlook.OlUserPropertyType.olYesNo, false);
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   460
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   461
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   462
            up.Value = forceUnencrypted;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   463
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   464
            // Release objects
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   465
            if (properties != null)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   466
            {
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   467
                Marshal.ReleaseComObject(properties);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   468
                properties = null;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   469
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   470
488
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   471
            if (up != null)
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   472
            {
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   473
                Marshal.ReleaseComObject(up);
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   474
                up = null;
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   475
            }
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   476
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   477
            return;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   478
        }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   479
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   480
        /// <summary>
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   481
        /// Gets the pEp user ID for the given address and contact.
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   482
        /// </summary>
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   483
        /// <param name="address">The address to get the user ID for.</param>
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   484
        /// <param name="contact">The contact associated with the address (if any).
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   485
        /// This value can be null and is not required for 'myself' user IDs.</param>
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   486
        /// <returns>The user ID (Outlook EntryID) for the given address</returns>
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   487
        public string GetUserID(string address,
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   488
                                Outlook.ContactItem contact)
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   489
        {
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   490
            string id = null;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   491
            string myselfStr;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   492
            byte[] computedHash;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   493
            SHA256Managed hashGenerator = new SHA256Managed();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   494
            StringBuilder strBuilder;
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   495
            Outlook.Folder contactFolder = null;
507
d0b1586c5235 Add fallback to GetUserID that searches address book entry-by-entry.
Dean Looyengoed
parents: 502
diff changeset
   496
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   497
            try
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   498
            {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   499
                if (string.IsNullOrEmpty(address) == false)
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   500
                {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   501
                    // Search cache
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   502
                    if (id == null)
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   503
                    {
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   504
                        try
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   505
                        {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   506
                            id = this.userIDCache[address];
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   507
                        }
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   508
                        catch
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   509
                        {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   510
                            id = null;
510
500cb064737d Remove try/catch around GetUserID that could hide errors.
Dean Looyengoed
parents: 508
diff changeset
   511
                        }
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   512
                    }
477
23462dc9e619 Release COM objects in GetUserID.
Dean Looyengoed
parents: 475
diff changeset
   513
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   514
                    // Handle myself user ID calculation
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   515
                    if (id == null)
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   516
                    {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   517
                        // Check if the address is myself
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   518
                        if (PEPIdentity.GetIsMyIdentity(address))
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   519
                        {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   520
                            strBuilder = new StringBuilder();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   521
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   522
                            // Note: pEp_for_Outlook is hardcoded here because it should not change
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   523
                            myselfStr = "pEp_for_Outlook_" + Environment.UserName;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   524
                            computedHash = hashGenerator.ComputeHash(Encoding.Unicode.GetBytes(myselfStr));
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   525
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   526
                            foreach (byte b in computedHash)
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   527
                            {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   528
                                strBuilder.Append(b.ToString("x2"));
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   529
                            }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   530
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   531
                            id = strBuilder.ToString().ToUpper();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   532
                            this.userIDCache[address] = id;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   533
                        }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   534
                    }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   535
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   536
                    // Use a contact EntryID if available
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   537
                    if ((id == null) &&
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   538
                        (contact != null))
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   539
                    {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   540
                        try
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   541
                        {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   542
                            contactFolder = (Outlook.Folder)contact.Parent;
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   543
                            id = contactFolder.StoreID.ToUpper() + "_" + contact.EntryID.ToUpper();
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   544
                            this.userIDCache[address] = id;
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   545
                        }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   546
                        catch
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   547
                        {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   548
                            Global.Log("GetUserID: Attempted to use contact but failed.");
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   549
                        }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   550
                    }
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   551
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   552
                    // Use the address itself as a user ID (this can be removed after virtual users are supported)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   553
                    if (id == null)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   554
                    {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   555
                        id = "ID_" + address.ToUpper().Trim();
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   556
                        this.userIDCache[address] = id;
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   557
                    }
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   558
                }
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   559
            }
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   560
            catch (Exception ex)
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   561
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   562
                Global.StopAndSendCrashReport(ex);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   563
            }
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   564
            finally
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   565
            {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   566
                if (contactFolder != null)
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   567
                {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   568
                    Marshal.FinalReleaseComObject(contactFolder);
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   569
                    contactFolder = null;
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   570
                }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   571
            }
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   572
587
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   573
            // Log if no ID was found
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   574
            if (string.IsNullOrWhiteSpace(id))
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   575
            {
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   576
                Global.Log("GetUserID: Failed to find an ID.");
587
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   577
            }
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   578
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   579
            return (id);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   580
        }
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   581
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   582
        /// <summary>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   583
        /// Create a new Outlook MailItem from the given PEPMessage and send it.
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   584
        /// The sent message will not be processed by the 'Application_ItemSend' event.
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   585
        /// WARNING: Exchange ActiveSync accounts ignore the deleteAfterSend parameter (always false).
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   586
        /// </summary>
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   587
        /// <param name="message">The message to send.</param>
475
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   588
        /// <param name="deleteAfterSend">Whether the message is deleted after sending (true) or a copy is saved (false).</param>
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   589
        public void SendWithoutProcessing(PEPMessage message,
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   590
                                          bool deleteAfterSend)
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   591
        {
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   592
            Outlook.MailItem newItem;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   593
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   594
            newItem = Application.CreateItem(Outlook.OlItemType.olMailItem);
586
2c2bfd7f1e43 Improve handling of optional properties in PEPMessage.
Dean Looyengoed
parents: 576
diff changeset
   595
            message.ApplyTo(newItem, false); // Do NOT include optional properties!
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   596
502
4b4d88db09eb When sending a PEPMessage, set the UseTNEF property to false to avoid winmail.dat in some circumstances.
Dean Looyengoed
parents: 501
diff changeset
   597
            // Do not allow TNEF/RTF format with 'winmail.dat' attachment
790
3c818a1fad95 Rename MAPIProperties to MAPIProperty.
Dean Looyengoed
parents: 788
diff changeset
   598
            MAPIHelper.SetProperty(newItem, MAPIProperty.PidLidUseTnef, false);
570
21d996cd35e8 Stop searching through Exchange AddressLists due to performance.
Dean Looyengoed
parents: 569
diff changeset
   599
565
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   600
            // Save the new item to the default folder of the sending account
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   601
            // This must be done so an EntryID is created.
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   602
            newItem.Save();
502
4b4d88db09eb When sending a PEPMessage, set the UseTNEF property to false to avoid winmail.dat in some circumstances.
Dean Looyengoed
parents: 501
diff changeset
   603
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   604
            /* Send
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   605
             * 
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   606
             * Note: For ActiveSync accounts, the DeleteAfterSubmit property is ignored.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   607
             * This means the message will always appear in the sent folder by default.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   608
             * The reason for this is unknown.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   609
             * 
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   610
             * It's possible this is related to the ActiveSync specification version
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   611
             * and therefore may behave differently depending on Outlook version.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   612
             * More research is needed here.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   613
             */
475
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   614
            newItem.DeleteAfterSubmit = deleteAfterSend;
465
3f5d92b648ce Make SendWithoutProcessing public.
Dean Looyengoed
parents: 462
diff changeset
   615
            ((Outlook._MailItem)newItem).Send();
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   616
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   617
            Marshal.ReleaseComObject(newItem);
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   618
            newItem = null;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   619
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   620
            return;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   621
        }
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   622
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   623
        /// <summary>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   624
        /// Create a new 'sent' Outlook MailItem and place it in the given sent folder.
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   625
        /// WARNING: Exchange ActiveSync accounts are not supported by this method. The sent
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   626
        /// message will always appear in the drafts folder.
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   627
        /// </summary>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   628
        /// <param name="sentFolder">The folder to place the sent mail item within.</param>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   629
        /// <param name="sentMessage">The message that is sent.</param>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   630
        private void CreateNewSentMail(Outlook.Folder sentFolder,
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   631
                                       PEPMessage sentMessage)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   632
        {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   633
            System.Int32 messageFlags;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   634
            Outlook.MailItem sentMailItem = null;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   635
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   636
            try
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   637
            {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   638
                // Create the basic sent mail item
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   639
                sentMailItem = (Outlook.MailItem)sentFolder.Items.Add(Outlook.OlItemType.olMailItem);
743
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   640
                sentMessage.ApplyTo(sentMailItem, false); // Do NOT include optional properties!
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   641
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   642
                // Set the sender
790
3c818a1fad95 Rename MAPIProperties to MAPIProperty.
Dean Looyengoed
parents: 788
diff changeset
   643
                MAPIHelper.SetProperty(sentMailItem, MAPIProperty.PidTagSenderName, sentMessage.From.Username);
3c818a1fad95 Rename MAPIProperties to MAPIProperty.
Dean Looyengoed
parents: 788
diff changeset
   644
                MAPIHelper.SetProperty(sentMailItem, MAPIProperty.PidTagSenderEmailAddress, sentMessage.From.Address);
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   645
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   646
                // Set the date and time the mail item was sent
790
3c818a1fad95 Rename MAPIProperties to MAPIProperty.
Dean Looyengoed
parents: 788
diff changeset
   647
                MAPIHelper.SetProperty(sentMailItem, MAPIProperty.PidTagClientSubmitTime, DateTime.Now.ToUniversalTime());
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   648
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   649
                // Set flags
790
3c818a1fad95 Rename MAPIProperties to MAPIProperty.
Dean Looyengoed
parents: 788
diff changeset
   650
                messageFlags = (System.Int32)MAPIHelper.GetProperty(sentMailItem, MAPIProperty.PidTagMessageFlags);
788
e8d40b320a3a Start using MAPIPropertyValue class for defined values instead of MAPIHelper.
Dean Looyengoed
parents: 786
diff changeset
   651
                messageFlags &= ~((System.Int32)MAPIPropertyValue.EnumPidTagMessageFlags.mfUnsent);  // Clear UNSENT flag -- must be done before save
e8d40b320a3a Start using MAPIPropertyValue class for defined values instead of MAPIHelper.
Dean Looyengoed
parents: 786
diff changeset
   652
                messageFlags |= ((System.Int32)MAPIPropertyValue.EnumPidTagMessageFlags.mfRead);     // Mark as read
790
3c818a1fad95 Rename MAPIProperties to MAPIProperty.
Dean Looyengoed
parents: 788
diff changeset
   653
                MAPIHelper.SetProperty(sentMailItem, MAPIProperty.PidTagMessageFlags, messageFlags);
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   654
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   655
                // Save changes to the mail item (must be done last for some properties)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   656
                sentMailItem.Save();
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   657
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   658
                /* Attempt to move to the sent folder.
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   659
                 * For ActiveSync accounts, this will fail with the error:
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   660
                 * 'Sorry, Exchange ActiveSync doesn't support what you're trying to do.'
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   661
                 * This is because the .Items.Add(folder) will ignore the specified folder and create in local Drafts.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   662
                 * Then "Exchange ActiveSync doesn’t support the Drafts folder" so it can't be moved out.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   663
                 * Even in the Outlook UI a draft cannot be 'dragged' out of the drafts folder.
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   664
                 */
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   665
                try
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   666
                {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   667
                    sentMailItem.Move(sentFolder);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   668
                }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   669
                catch { }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   670
            }
743
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   671
            catch (Exception ex)
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   672
            {
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   673
                throw (ex);
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   674
            }
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   675
            finally
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   676
            {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   677
                if (sentMailItem != null)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   678
                {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   679
                    Marshal.ReleaseComObject(sentMailItem);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   680
                    sentMailItem = null;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   681
                }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   682
            }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   683
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   684
            return;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   685
        }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   686
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   687
        /// <summary>
745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   688
        /// Permanently deletes the given mail item from Outlook.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   689
        /// This will also remove any mail item data before save.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   690
        /// Therefore, it is safe for handling sensitive data.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   691
        /// </summary>
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   692
        /// <param name="mailStore">The store containing the mail item being deleted.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   693
        /// This is used to locate the deleted folder.</param>
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   694
        /// <param name="mailItem">The mail item to delete.</param>
748
8a7e2ff74375 Make PermanentlyDelete method public in ThisAddIn.
Dean Looyengoed
parents: 746
diff changeset
   695
        public void PermanentlyDelete(Outlook.Store mailStore,
8a7e2ff74375 Make PermanentlyDelete method public in ThisAddIn.
Dean Looyengoed
parents: 746
diff changeset
   696
                                      Outlook.MailItem mailItem)
745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   697
        {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   698
            bool deleted = false;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   699
            string deleteValue;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   700
            Outlook.Folder deletedFolder = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   701
            Outlook.MailItem deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   702
            Outlook.Attachments attachments = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   703
            Outlook.Recipients recipients = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   704
            Outlook.Items items = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   705
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   706
            try
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   707
            {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   708
                /* Remove all relevant data from the mail item
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   709
                 * This is done so it is not saved later where it could be unencrypted
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   710
                 */
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   711
                recipients = mailItem.Recipients;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   712
                while (recipients.Count > 0)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   713
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   714
                    recipients.Remove(1);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   715
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   716
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   717
                mailItem.Subject = "";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   718
                mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   719
                mailItem.Body = "";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   720
                mailItem.HTMLBody = "";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   721
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   722
                attachments = mailItem.Attachments;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   723
                while (attachments.Count > 0)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   724
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   725
                    attachments.Remove(1);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   726
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   727
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   728
                mailItem.Save();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   729
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   730
                /* Move the mail item to the deleted folder then delete (otherwise calling .Delete() will only move to deleted items)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   731
                 * For ActiveSync accounts, the .Move() call will fail with the error:
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   732
                 * 'Sorry, Exchange ActiveSync doesn't support what you're trying to do.'
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   733
                 */
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   734
                try
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   735
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   736
                    deletedFolder = (Outlook.Folder)mailStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   737
                    deletedMailItem = (Outlook.MailItem)mailItem.Move(deletedFolder);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   738
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   739
                    /* Change the subject and Save
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   740
                     * If the subject (or another property) is not changed the .Save() call will be ignored
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   741
                     * Calling .Save() is for some reason necessary before .Delete() to work properly
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   742
                     */
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   743
                    deletedMailItem.Subject = "pEp";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   744
                    deletedMailItem.Save();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   746
                    // Now that the mail item is in the deleted folder, calling .Delete() will delete permanently
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   747
                    deletedMailItem.Delete();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   748
                    deleted = true;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   749
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   750
                catch { }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   751
                finally
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   752
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   753
                    if (deletedFolder != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   754
                    {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   755
                        Marshal.ReleaseComObject(deletedFolder);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   756
                        deletedFolder = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   757
                    }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   758
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   759
                    if (deletedMailItem != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   760
                    {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   761
                        Marshal.ReleaseComObject(deletedMailItem);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   762
                        deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   763
                    }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   764
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   765
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   766
                // Try secondary method supporting ActiveSync accounts
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   767
                if (deleted == false)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   768
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   769
                    deletedFolder = (Outlook.Folder)mailStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   770
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   771
                    // Tag the item with a user property so it can be located in the deleted folder
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   772
                    deleteValue = "DELETE_" + mailItem.EntryID;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   773
                    CryptableMailItem.SetUserProperty(mailItem, "DELETE", deleteValue, Outlook.OlUserPropertyType.olText);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   774
                    mailItem.Save();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   775
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   776
                    // Delete the mail item moving to deleted items folder
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   777
                    mailItem.Delete();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   778
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   779
                    // Permanently delete item by locating in the delete items folder
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   780
                    items = deletedFolder.Items;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   781
                    for (int i = 1; i <= items.Count; i++)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   782
                    {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   783
                        deletedMailItem = items[i];
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   784
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   785
                        // Check if the property exists
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   786
                        if ((string)CryptableMailItem.GetUserProperty(deletedMailItem, "DELETE", "") == deleteValue)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   787
                        {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   788
                            deletedMailItem.Delete();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   789
                            deleted = true;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   790
                            break;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   791
                        }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   792
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   793
                        Marshal.ReleaseComObject(deletedMailItem);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   794
                        deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   795
                    }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   796
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   797
            }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   798
            catch (Exception ex)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   799
            {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   800
                Global.Log("PermanentlyDelete: Failed, " + ex.ToString());
745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   801
            }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   802
            finally
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   803
            {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   804
                if (deletedFolder != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   805
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   806
                    Marshal.ReleaseComObject(deletedFolder);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   807
                    deletedFolder = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   808
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   809
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   810
                if (deletedMailItem != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   811
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   812
                    Marshal.ReleaseComObject(deletedMailItem);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   813
                    deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   814
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   815
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   816
                if (attachments != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   817
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   818
                    Marshal.ReleaseComObject(attachments);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   819
                    attachments = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   820
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   821
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   822
                if (recipients != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   823
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   824
                    Marshal.ReleaseComObject(recipients);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   825
                    recipients = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   826
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   827
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   828
                if (items != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   829
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   830
                    Marshal.ReleaseComObject(items);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   831
                    items = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   832
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   833
            }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   834
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   835
            return;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   836
        }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   837
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   838
        /// <summary>
671
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   839
        /// Gets whether the given account is trusted (on the account whitelist).
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   840
        /// Character case and whitespace is ignored during comparison.
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   841
        /// </summary>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   842
        /// <param name="address">The address of the account.</param>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   843
        /// <returns>True if the account with the given address is trusted by default (on the whitelist), otherwise false.</returns>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   844
        private bool GetIsAccountTrusted(string address)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   845
        {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   846
            bool isTrusted = false;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   847
            string searchAddress = address.ToUpper().Trim();
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   848
            string searchDomain = searchAddress.Contains("@") ? searchAddress.Substring(searchAddress.LastIndexOf("@")) : null;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   849
            string whitelistAccount;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   850
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   851
            for (int i = 0; i < this._AccountWhitelist.Length; i++)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   852
            {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   853
                whitelistAccount = this._AccountWhitelist[i].ToUpper().Trim();
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   854
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   855
                // Check for exact match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   856
                if (searchAddress == whitelistAccount)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   857
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   858
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   859
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   860
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   861
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   862
                // Check for domain match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   863
                if ((searchDomain != null) &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   864
                    whitelistAccount.StartsWith("@") &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   865
                    (searchDomain == whitelistAccount))
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   866
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   867
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   868
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   869
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   870
            }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   871
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   872
            return (isTrusted);
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   873
        }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   874
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   875
        /// <summary>
820
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   876
        /// Writes the pEp required Outlook options to the registry.
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   877
        /// </summary>
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   878
        private void SetOutlookRegistryOptions()
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   879
        {
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   880
            try
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   881
            {
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   882
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE))
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   883
                {
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   884
                    using (RegistryKey keyOffice = key1.OpenSubKey(REG_KEY_MICROSOFT_OFFICE))
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   885
                    {
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   886
                        /* Outlook versions
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   887
                         *  "12" Outlook 2007
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   888
                         *  "14" Outlook 2010
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   889
                         *  "15" Outlook 2013
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   890
                         *  "16" Outlook 2016
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   891
                         */
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   892
                        using (RegistryKey keyInternationalOptions = keyOffice.OpenSubKey(Application.Version.Substring(0, 2) + ".0\\Outlook\\Options\\MSHTML\\International", true))
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   893
                        {
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   894
                            keyInternationalOptions.SetValue(REG_NAME_DEFAULT_CODEPAGE_OUT, (Int32)65001); // UTF-8
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   895
                        }
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   896
                    }
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   897
                }
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   898
            }
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   899
            catch (Exception ex)
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   900
            {
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   901
                Global.Log("SetOutlookRegistryOptions: Failed to set options, " + ex.ToString());
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   902
            }
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   903
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   904
            return;
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   905
        }
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   906
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   907
        /// <summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   908
        /// Writes/saves any supported configuration/property values to the registry.
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   909
        /// </summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   910
        private void WriteConfigToRegistry()
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   911
        {
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   912
            /* Note: 
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   913
             * Do not save the below properties which can only be modified from the registry
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   914
             *   • AccountWhitelist
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   915
             *   • CrashReportSendAddress
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   916
             *   • ExtraKeys
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   917
             *   • IsCrashReportVisible
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   918
             *   • IsDeveloperModeEnabled
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   919
             *   • IsPassiveModeEnabled
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   920
             */
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   921
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   922
            try
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   923
            {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   924
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE, true))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   925
                {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   926
                    using (RegistryKey key2 = key1.CreateSubKey(REG_KEY_PEP))
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   927
                    {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   928
                        // Set encryption state of each account
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   929
                        using (RegistryKey key3 = key2.CreateSubKey(REG_KEY_ENCRYPTED_ACCOUNTS_LIST))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   930
                        {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   931
                            foreach (KeyValuePair<string, bool> entry in this._EncryptedAccountsList)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   932
                            {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   933
                                key3.SetValue(entry.Key,
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   934
                                              entry.Value.ToString(),
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   935
                                              RegistryValueKind.String);
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   936
                            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   937
                        }
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   938
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   939
                        key2.SetValue(REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED, this._IsEncryptAllAccountsEnabled.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   940
                        key2.SetValue(REG_NAME_IS_KEY_SERVER_USED, this._IsKeyServerUsed.ToString());
816
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
   941
                        key2.SetValue(REG_NAME_IS_PEP_FOLDER_VISIBLE, this._IsPEPFolderVisible.ToString());
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   942
                        key2.SetValue(REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED, this._IsUnencryptedSubjectEnabled.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   943
                        key2.SetValue(REG_NAME_IS_VERBOSE_LOGGING_ENABLED, this._IsVerboseLoggingEnabled.ToString());
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   944
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   945
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   946
            }
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   947
            catch (Exception ex)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   948
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   949
                Global.StopAndSendCrashReport(ex);
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   950
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   951
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   952
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   953
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   954
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   955
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   956
        /// Reads/loads any configuration/property values from the registry.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   957
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   958
        private void ReadConfigFromRegistry()
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   959
        {
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   960
            bool isSuccessful;
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   961
            int parsedIntValue;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   962
            bool parsedBoolValue;
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   963
            string keyValue;
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   964
            object value;
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   965
            string[] registryWhitelist;
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   966
            List<string> whitelist;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   967
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   968
            /* Note: property accessors (instead of private members) are used for the
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   969
             * few cases where changing a property requires additional steps (like updating pEp engine).
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   970
             */
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   971
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   972
            try
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   973
            {
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   974
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   975
                {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   976
                    using (RegistryKey keyOffice = key1.OpenSubKey(REG_KEY_MICROSOFT_OFFICE))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   977
                    {
820
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   978
                        /* Outlook versions
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   979
                         *  "12" Outlook 2007
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   980
                         *  "14" Outlook 2010
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   981
                         *  "15" Outlook 2013
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   982
                         *  "16" Outlook 2016
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   983
                         */
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   984
                        using (RegistryKey keyPreferences = keyOffice.OpenSubKey(Application.Version.Substring(0, 2) + ".0\\Outlook\\Preferences\\"))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   985
                        {
820
6a08ad3137da Add SetOutlookRegistryOptions() method and use it to set default out codepage to UTF-8.
Dean Looyengoed
parents: 818
diff changeset
   986
                            // Attempt to get IsTNEFDisabled
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   987
                            keyValue = keyPreferences.GetValue(ThisAddIn.REG_NAME_IS_TNEF_DISABLED, Global.IS_TNEF_DISABLED_DEFAULT).ToString();
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   988
                            isSuccessful = int.TryParse(keyValue, out parsedIntValue);
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   989
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   990
                            if (isSuccessful)
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   991
                            {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   992
                                this.IsTNEFDisabled = (parsedIntValue > 0);
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   993
                            }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   994
                        }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   995
                    }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   996
                }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   997
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   998
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE, true))
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   999
                {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1000
                    using (RegistryKey key2 = key1.CreateSubKey(REG_KEY_PEP))
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1001
                    {
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1002
                        // Attempt to get AccountWhitelist
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1003
                        value = key2.GetValue(REG_NAME_ACCOUNT_WHITELIST, null);
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1004
                        if (value != null)
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1005
                        {
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1006
                            whitelist = new List<string>();
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1007
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1008
                            // Copy over hardcoded values
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1009
                            for (int i = 0; i < Global.HARDCODED_ACCOUNT_WHITELIST.Length; i++)
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1010
                            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1011
                                whitelist.Add(Global.HARDCODED_ACCOUNT_WHITELIST[i].Trim());
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1012
                            }
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1013
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1014
                            // Copy over registry values
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1015
                            registryWhitelist = value.ToString().Split(';');
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1016
                            for (int i = 0; i < registryWhitelist.Length; i++)
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1017
                            {
650
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
  1018
                                whitelist.Add(registryWhitelist[i].Trim());
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1019
                            }
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1020
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1021
                            this._AccountWhitelist = whitelist.ToArray();
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1022
                        }
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1023
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1024
                        // Attempt to get CrashReportSendAddress
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1025
                        this._CrashReportSendAddress = key2.GetValue(REG_NAME_CRASH_REPORT_SEND_ADDRESS, Global.CRASH_REPORT_SEND_ADDRESS_DEFAULT).ToString();
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
  1026
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1027
                        // Get encryption state of each account in the registry -- any previous values are cleared
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1028
                        this.EncryptedAccountsList.Clear();
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1029
                        using (RegistryKey key3 = key2.CreateSubKey(REG_KEY_ENCRYPTED_ACCOUNTS_LIST))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1030
                        {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1031
                            foreach (string name in key3.GetValueNames())
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1032
                            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1033
                                keyValue = key3.GetValue(name, Global.ENCRYPT_ACCOUNTS_BY_DEFAULT).ToString();
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1034
                                isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1035
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1036
                                if (isSuccessful)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1037
                                {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1038
                                    this.EncryptedAccountsList.Add(name, parsedBoolValue);
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1039
                                }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1040
                            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1041
                        }
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1042
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1043
                        // Attempt to get ExtraKeys value 
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1044
                        value = key2.GetValue(REG_NAME_EXTRA_KEYS);
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1045
                        if (value != null)
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1046
                        {
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
  1047
                            this._ExtraKeys = value.ToString().Split(',');
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1048
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1049
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1050
                        // Attempt to get IsCrashReportVisible
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1051
                        keyValue = key2.GetValue(REG_NAME_IS_CRASH_REPORT_VISIBLE, Global.IS_CRASH_REPORT_VISIBLE_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1052
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1053
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1054
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1055
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1056
                            this._IsCrashReportVisible = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1057
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1058
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1059
                        // Attempt to get IsDeveloperModeEnabled
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1060
                        keyValue = key2.GetValue(REG_NAME_IS_DEVELOPER_MODE_ENABLED, Global.IS_DEVELOPER_MODE_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1061
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1062
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1063
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1064
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1065
                            this._IsDeveloperModeEnabled = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1066
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1067
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1068
                        // Attempt to get IsEncryptAllAccountsEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1069
                        keyValue = key2.GetValue(REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED, Global.IS_ENCRYPT_ALL_ACCOUNTS_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1070
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1071
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1072
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1073
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1074
                            this.IsEncryptAllAccountsEnabled = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1075
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1076
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1077
                        // Attempt to get IsKeyServerUsed value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1078
                        keyValue = key2.GetValue(REG_NAME_IS_KEY_SERVER_USED, Global.IS_KEY_SERVER_USED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1079
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1080
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1081
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1082
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1083
                            this.IsKeyServerUsed = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1084
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1085
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1086
                        // Attempt to get IsPassiveModeEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1087
                        keyValue = key2.GetValue(REG_NAME_IS_PASSIVE_MODE_ENABLED, Global.IS_PASSIVE_MODE_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1088
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1089
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1090
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1091
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1092
                            this.IsPassiveModeEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1093
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1094
816
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1095
                        // Attempt to get IsPEPFolderVisible value
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1096
                        keyValue = key2.GetValue(REG_NAME_IS_PEP_FOLDER_VISIBLE, Global.IS_PEP_FOLDER_VISIBLE_DEFAULT).ToString();
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1097
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1098
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1099
                        if (isSuccessful)
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1100
                        {
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1101
                            this.IsPEPFolderVisible = parsedBoolValue; // Must use property accessor
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1102
                        }
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1103
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1104
                        // Attempt to get IsUnencryptedSubjectEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1105
                        keyValue = key2.GetValue(REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED, Global.IS_UNENCRYPTED_SUBJECT_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1106
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1107
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1108
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1109
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1110
                            this.IsUnencryptedSubjectEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1111
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1112
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1113
                        // Attempt to get IsVerboseLoggingEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1114
                        keyValue = key2.GetValue(REG_NAME_IS_VERBOSE_LOGGING_ENABLED, Global.IS_VERBOSE_LOGGING_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1115
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1116
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1117
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1118
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1119
                            this.IsVerboseLoggingEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1120
                        }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1121
                    }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1122
                }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1123
            }
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1124
            catch (Exception ex)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1125
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1126
                Global.StopAndSendCrashReport(ex);
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1127
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1128
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1129
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1130
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1131
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1132
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1133
        /// Copies any necessary data from the given options form state back into this add-ins current state.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1134
        /// The registry is also updated by this method.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1135
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1136
        /// <param name="state">The state to copy data from.</param>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1137
        public void SetOptionsState(FormOptions.State state)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1138
        {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1139
            if (state != null)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1140
            {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1141
                /* Note: property accessors (instead of private members) are used for the
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1142
                 * few cases where changing a property requires additional steps (like updating pEp engine).
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1143
                 */
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1144
                foreach (KeyValuePair<string, bool> entry in state.EncryptedAccountsList)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1145
                {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1146
                    if (this.EncryptedAccountsList.ContainsKey(entry.Key))
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1147
                    {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1148
                        // Modify value
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1149
                        this.EncryptedAccountsList[entry.Key] = entry.Value;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1150
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1151
                    else
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1152
                    {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1153
                        // Create new entry (if there was an additional account added to the session)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1154
                        this.EncryptedAccountsList.Add(entry.Key, entry.Value);
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1155
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1156
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1157
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1158
                this.IsEncryptAllAccountsEnabled = state.IsEncryptAllAccountsEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1159
                this.IsKeyServerUsed = state.IsKeyServerUsed;
816
22599c48c284 Add settings/configuration to show or hide the pEp store in the navigation pane.
Dean Looyengoed
parents: 815
diff changeset
  1160
                this.IsPEPFolderVisible = state.IsPEPFolderVisible;
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1161
                this.IsTNEFDisabled = state.IsTNEFDisabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1162
                this.IsUnencryptedSubjectEnabled = state.IsUnencryptedSubjectEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1163
                this.IsVerboseLoggingEnabled = state.IsVerboseLoggingEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1164
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1165
                // Save last state for next options opening
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1166
                this.lastOptionsState = state.Copy();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1167
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1168
                // Update registry (in case of unforseen app shutdown)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1169
                this.WriteConfigToRegistry();
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1170
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1171
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1172
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1173
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1174
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1175
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1176
        /// Builds a new options form state using this add-ins current state.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1177
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1178
        /// <returns>A new options form state.</returns>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1179
        public FormOptions.State GetOptionsState()
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1180
        {
818
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1181
            bool isDefaultStore = false;
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1182
            FormOptions.State state;
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1183
            Outlook.Account acct = null;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1184
            Outlook.NameSpace ns = Globals.ThisAddIn.Application.Session;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1185
            Outlook.Accounts accounts = ns.Accounts;
818
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1186
            Outlook.Store defaultStore = null;
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
De&#