Beispiel #1
0
        public static Charset GetItemWindowsCharset(Item item, OutboundConversionOptions options)
        {
            int     valueOrDefault = item.GetValueOrDefault <int>(InternalSchema.InternetCpid, 0);
            Charset charset;

            if (Charset.TryGetCharset(valueOrDefault, out charset))
            {
                charset = ConvertUtils.MapItemWindowsCharset(charset);
                if (charset != null && charset.IsAvailable)
                {
                    return(charset);
                }
            }
            int valueOrDefault2 = item.GetValueOrDefault <int>(InternalSchema.Codepage, 0);

            if (ConvertUtils.TryGetValidCharset(valueOrDefault2, out charset))
            {
                return(charset);
            }
            if (options != null && options.DetectionOptions.PreferredCharset != null)
            {
                charset = ConvertUtils.MapItemWindowsCharset(options.DetectionOptions.PreferredCharset);
                if (charset != null && charset.IsAvailable)
                {
                    return(charset);
                }
            }
            return(Charset.DefaultWindowsCharset);
        }
Beispiel #2
0
        private static Charset GetItemOutboundMimeCharsetInternal(Item item, OutboundConversionOptions options)
        {
            object  obj            = item.TryGetProperty(InternalSchema.InternetCpid);
            bool    valueOrDefault = item.GetValueOrDefault <bool>(InternalSchema.IsAutoForwarded, false);
            string  className      = item.ClassName;
            Charset charset        = null;

            if (valueOrDefault || (obj is PropertyError && !item.Body.IsBodyDefined) || (options != null && options.DetectionOptions.PreferredCharset != null && (options.DetectionOptions.RequiredCoverage < 100 || ObjectClass.IsTaskRequest(className) || ObjectClass.IsMeetingMessage(className))))
            {
                charset = ConvertUtils.DetectOutboundCharset(item, options, obj, !valueOrDefault);
                if (charset != null)
                {
                    if (!item.CharsetDetector.IsItemCharsetKnownWithoutDetection(BodyCharsetFlags.DisableCharsetDetection, charset, out charset))
                    {
                        throw new InvalidOperationException();
                    }
                    return(charset);
                }
            }
            if (!(obj is PropertyError) && Charset.TryGetCharset((int)obj, out charset) && ConvertUtils.TryTransformCharset(ref charset))
            {
                return(charset);
            }
            object obj2 = item.TryGetProperty(InternalSchema.Codepage);

            if (!(obj2 is PropertyError) && Charset.TryGetCharset((int)obj2, out charset))
            {
                charset = charset.Culture.MimeCharset;
                if (ConvertUtils.TryTransformCharset(ref charset))
                {
                    return(charset);
                }
            }
            return(Charset.GetCharset(65001));
        }
Beispiel #3
0
        public static RightsManagedMessageItem ReBind(MessageItem item, OutboundConversionOptions options, bool acquireLicense)
        {
            Util.ThrowOnNullArgument(item, "item");
            Util.ThrowOnNullArgument(options, "options");
            StoreSession storeSession = item.Session ?? ((item.CoreItem.TopLevelItem != null) ? item.CoreItem.TopLevelItem.Session : null);

            if (storeSession == null)
            {
                throw new ArgumentException("Cannot use ReBind() for in-memory message.", "item");
            }
            RightsManagedMessageItem.CheckSession(storeSession);
            if (!item.IsRestricted)
            {
                throw new ArgumentException("Only protected messages can be used for ReBind()");
            }
            RightsManagedMessageItem result;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                RightsManagedMessageItem rightsManagedMessageItem = new RightsManagedMessageItem(new CoreItemWrapper(item.CoreItem));
                disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem);
                rightsManagedMessageItem.Decode(options, acquireLicense);
                disposeGuard.Success();
                rightsManagedMessageItem.originalItem = item;
                result = rightsManagedMessageItem;
            }
            return(result);
        }
Beispiel #4
0
 public OutboundConversionOptions(OutboundConversionOptions source)
 {
     this.encodeAttachmentsAsBinhex      = source.encodeAttachmentsAsBinhex;
     this.suppressDisplayName            = source.suppressDisplayName;
     this.internetMessageFormat          = source.internetMessageFormat;
     this.internetTextFormat             = source.internetTextFormat;
     this.imceaEncapsulationDomain       = source.imceaEncapsulationDomain;
     this.preserveReportBody             = source.preserveReportBody;
     this.byteEncoderTypeFor7BitCharsets = source.byteEncoderTypeFor7BitCharsets;
     this.clearCategories                       = source.clearCategories;
     this.owaServer                             = source.owaServer;
     this.userADSession                         = source.userADSession;
     this.recipientCache                        = source.recipientCache;
     this.useRFC2231Encoding                    = source.useRFC2231Encoding;
     this.allowUTF8Headers                      = source.allowUTF8Headers;
     this.limits                                = (ConversionLimits)source.limits.Clone();
     this.dsnWriter                             = source.dsnWriter;
     this.logDirectoryPath                      = source.LogDirectoryPath;
     this.isSenderTrusted                       = source.IsSenderTrusted;
     this.useSimpleDisplayName                  = source.useSimpleDisplayName;
     this.allowPartialStnefContent              = source.allowPartialStnefContent;
     this.generateMimeSkeleton                  = source.generateMimeSkeleton;
     this.demoteBcc                             = source.demoteBcc;
     this.detectionOptions                      = source.detectionOptions;
     this.filterAttachment                      = source.filterAttachment;
     this.filterBody                            = source.filterBody;
     this.resolveRecipientsInAttachedMessages   = source.resolveRecipientsInAttachedMessages;
     this.quoteDisplayNameBeforeRfc2047Encoding = source.quoteDisplayNameBeforeRfc2047Encoding;
     this.allowDlpHeadersToPenetrateFirewall    = source.allowDlpHeadersToPenetrateFirewall;
     this.EnableCalendarHeaderGeneration        = source.EnableCalendarHeaderGeneration;
     this.EwsOutboundMimeConversion             = source.EwsOutboundMimeConversion;
     this.blockPlainTextConversion              = source.BlockPlainTextConversion;
     this.useSkeleton                           = source.UseSkeleton;
 }
Beispiel #5
0
 private void InitNewItem(OutboundConversionOptions options)
 {
     this[StoreObjectSchema.ContentClass] = "rpmsg.message";
     base.IconIndex   = IconIndex.MailIrm;
     this.decodedItem = MessageItem.CreateInMemory(StoreObjectSchema.ContentConversionProperties);
     this.SetConversionOptions(options);
     this.UpdateEffectiveRights();
 }
Beispiel #6
0
 public bool Decode(OutboundConversionOptions options, bool acquireLicense)
 {
     this.CheckDisposed("Decode");
     Util.ThrowOnNullArgument(options, "options");
     this.decryptionStatus = RightsManagedMessageDecryptionStatus.Success;
     if (this.decodedItem != null)
     {
         return(true);
     }
     if (this.InternalSession == null)
     {
         this.decryptionStatus = RightsManagedMessageDecryptionStatus.NotSupported;
         throw new InvalidOperationException("Decoding of in-memory messages is not supported.");
     }
     RightsManagedMessageItem.CheckSession(this.InternalSession);
     this.SetConversionOptions(options);
     using (DisposeGuard disposeGuard = default(DisposeGuard))
     {
         try
         {
             MessageItem messageItem = ItemConversion.OpenRestrictedContent(this, this.orgId, acquireLicense, out this.licenseAcquired, out this.useLicenseValue, out this.restrictionInfo);
             if (messageItem == null)
             {
                 ExTraceGlobals.StorageTracer.TraceError(0L, "Failed to decode protected message - no user license is present.");
                 throw new RightsManagementPermanentException(RightsManagementFailureCode.UnknownFailure, ServerStrings.GenericFailureRMDecryption);
             }
             disposeGuard.Add <MessageItem>(messageItem);
             this.UpdateEffectiveRights();
             this.conversationOwner = new Participant(this.restrictionInfo.ConversationOwner, this.restrictionInfo.ConversationOwner, "SMTP");
             this.CheckPermission(ContentRight.View);
             messageItem.CoreItem.TopLevelItem = (base.CoreItem.TopLevelItem ?? base.CoreItem);
             this.serverUseLicense             = (messageItem.TryGetProperty(MessageItemSchema.DRMServerLicense) as string);
             this.publishLicense = (messageItem.TryGetProperty(MessageItemSchema.DrmPublishLicense) as string);
             this.rmsTemplate    = RmsTemplate.CreateFromPublishLicense(this.publishLicense);
             MsgToRpMsgConverter.CallRM(delegate
             {
                 this.publishedByExternalRMS = !RmsClientManager.IsPublishedByOrganizationRMS(this.orgId, this.publishLicense);
             }, ServerStrings.FailedToCheckPublishLicenseOwnership(this.orgId.ToString()));
             this.decodedItem = messageItem;
             disposeGuard.Success();
         }
         catch (RightsManagementPermanentException exception)
         {
             this.decryptionStatus = RightsManagedMessageDecryptionStatus.CreateFromException(exception);
             throw;
         }
         catch (RightsManagementTransientException exception2)
         {
             this.decryptionStatus = RightsManagedMessageDecryptionStatus.CreateFromException(exception2);
             throw;
         }
     }
     return(true);
 }
Beispiel #7
0
        internal static Charset GetItemOutboundMimeCharset(Item item, OutboundConversionOptions options)
        {
            Charset charset   = ConvertUtils.GetItemOutboundMimeCharsetInternal(item, options);
            string  className = item.ClassName;

            if (options.DetectionOptions.PreferredCharset == null && charset.CodePage != 54936 && (ObjectClass.IsTaskRequest(className) || ObjectClass.IsMeetingMessage(className) || ObjectClass.IsCalendarItem(className)))
            {
                charset = Charset.GetCharset(65001);
            }
            return(charset);
        }
Beispiel #8
0
 public ImapItemConverter(Item itemIn, OutboundConversionOptions options)
 {
     StorageGlobals.ContextTraceInformation(ExTraceGlobals.CcOutboundMimeTracer, "ImapItemConverter::ctor.");
     using (DisposeGuard disposeGuard = this.Guard())
     {
         Util.ThrowOnNullArgument(itemIn, "itemIn");
         Util.ThrowOnNullArgument(options, "options");
         Util.ThrowOnNullOrEmptyArgument(options.ImceaEncapsulationDomain, "options.ImceaEncapsulationDomain");
         if (!ItemConversion.IsItemClassConvertibleToMime(itemIn.ClassName))
         {
             StorageGlobals.ContextTraceError <string>(ExTraceGlobals.CcOutboundMimeTracer, "ImapItemConverter::CheckItemType: wrong item type, {0}", itemIn.ClassName);
             throw new WrongObjectTypeException(ServerStrings.ConversionInvalidItemType(itemIn.ClassName));
         }
         this.itemIn  = itemIn;
         this.options = options;
         using (StorageGlobals.SetTraceContext(this.options))
         {
             using (StorageGlobals.SetTraceContext(this.itemIn))
             {
                 if (this.options.GenerateMimeSkeleton)
                 {
                     PropertyError propertyError = this.itemIn.TryGetProperty(InternalSchema.MimeSkeleton) as PropertyError;
                     if (propertyError != null && propertyError.PropertyErrorCode == PropertyErrorCode.NotFound)
                     {
                         if (this.itemIn.IsReadOnly)
                         {
                             this.itemIn.OpenAsReadWrite();
                         }
                         this.itemNeedsSave = true;
                         using (Stream stream = this.itemIn.OpenPropertyStream(InternalSchema.MimeSkeleton, PropertyOpenMode.Create))
                         {
                             using (Stream stream2 = new MimeStreamWriter.MimeTextStream(null))
                             {
                                 using (ItemToMimeConverter itemToMimeConverter = new ItemToMimeConverter(itemIn, options, ConverterFlags.GenerateSkeleton))
                                 {
                                     using (MimeStreamWriter mimeStreamWriter = new MimeStreamWriter(stream2, stream, itemToMimeConverter.GetItemMimeEncodingOptions(this.options), MimeStreamWriter.Flags.ForceMime))
                                     {
                                         ConversionLimitsTracker limits = new ConversionLimitsTracker(this.options.Limits);
                                         itemToMimeConverter.ConvertItemToMime(mimeStreamWriter, limits);
                                     }
                                 }
                             }
                         }
                     }
                 }
                 ItemToMimeConverter itemToMimeConverter2 = new ItemToMimeConverter(itemIn, options, ConverterFlags.None);
                 this.mimeProvider        = IImapMimeProvider.CreateInstance(itemToMimeConverter2);
                 this.itemEncodingOptions = itemToMimeConverter2.GetItemMimeEncodingOptions(this.options);
             }
         }
         disposeGuard.Success();
     }
 }
Beispiel #9
0
        private static Charset DetectOutboundCharset(Item item, OutboundConversionOptions options, object internetCpidObj, bool trustInternetCpid)
        {
            if (options != null && options.DetectionOptions.PreferredCharset != null && (options.DetectionOptions.RequiredCoverage == 0 || (!(internetCpidObj is PropertyError) && trustInternetCpid && options.DetectionOptions.PreferredCharset.CodePage == (int)internetCpidObj)))
            {
                Charset preferredCharset = options.DetectionOptions.PreferredCharset;
                if (ConvertUtils.TryTransformCharset(ref preferredCharset))
                {
                    return(preferredCharset);
                }
            }
            StringBuilder stringBuilder = new StringBuilder();

            item.CoreItem.GetCharsetDetectionData(stringBuilder, CharsetDetectionDataFlags.Complete | CharsetDetectionDataFlags.NoMessageDecoding);
            if (item.Body.IsBodyDefined)
            {
                using (TextReader textReader = item.Body.OpenTextReader(BodyFormat.TextPlain))
                {
                    char[] array     = new char[32768];
                    int    charCount = textReader.ReadBlock(array, 0, array.Length);
                    stringBuilder.Append(array, 0, charCount);
                }
            }
            OutboundCodePageDetector outboundCodePageDetector = new OutboundCodePageDetector();

            outboundCodePageDetector.AddText(stringBuilder.ToString());
            if (options != null && options.DetectionOptions.PreferredCharset != null && outboundCodePageDetector.GetCodePageCoverage(options.DetectionOptions.PreferredCharset.CodePage) >= options.DetectionOptions.RequiredCoverage)
            {
                Charset preferredCharset = options.DetectionOptions.PreferredCharset;
                if (ConvertUtils.TryTransformCharset(ref preferredCharset))
                {
                    return(preferredCharset);
                }
            }
            if (!(internetCpidObj is PropertyError) && !trustInternetCpid)
            {
                int     num = (options != null) ? options.DetectionOptions.RequiredCoverage : 100;
                Charset preferredCharset;
                if (Charset.TryGetCharset((int)internetCpidObj, out preferredCharset) && preferredCharset.IsDetectable && outboundCodePageDetector.GetCodePageCoverage((int)internetCpidObj) >= num && ConvertUtils.TryTransformCharset(ref preferredCharset))
                {
                    return(preferredCharset);
                }
            }
            if (!trustInternetCpid || (internetCpidObj is PropertyError && !item.Body.IsBodyDefined))
            {
                int     codePage = outboundCodePageDetector.GetCodePage();
                Charset preferredCharset;
                if (Charset.TryGetCharset(codePage, out preferredCharset) && ConvertUtils.TryTransformCharset(ref preferredCharset))
                {
                    return(preferredCharset);
                }
            }
            return(null);
        }
Beispiel #10
0
 public static void ExportVCard(Contact contact, Stream dataStream, OutboundConversionOptions options)
 {
     Util.ThrowOnNullArgument(dataStream, "dataStream");
     Util.ThrowOnNullArgument(contact, "contact");
     Util.ThrowOnNullArgument(options, "options");
     Util.ThrowOnNullOrEmptyArgument(options.ImceaEncapsulationDomain, "options.ImceaEncapsulationDomain");
     if (!contact.HasAllPropertiesLoaded)
     {
         throw new ArgumentException("Properties not loaded for contact");
     }
     OutboundVCardConverter.Convert(dataStream, Encoding.UTF8, contact, options, new ConversionLimitsTracker(options.Limits));
 }
Beispiel #11
0
 public RightsManagedMessageDecryptionStatus TryDecode(OutboundConversionOptions options, bool acquireLicense)
 {
     try
     {
         this.Decode(options, acquireLicense);
     }
     catch (RightsManagementPermanentException)
     {
     }
     catch (RightsManagementTransientException)
     {
     }
     return(this.decryptionStatus);
 }
Beispiel #12
0
            private void WriteParticipant(ContactWriter writer, Participant addr, OutboundConversionOptions options)
            {
                if (addr == null)
                {
                    return;
                }
                string participantSmtpAddress = ItemToMimeConverter.GetParticipantSmtpAddress(addr, options);

                if (!string.IsNullOrEmpty(participantSmtpAddress))
                {
                    writer.StartProperty(PropertyId.EMail);
                    writer.WriteParameter(ParameterId.Type, "INTERNET");
                    writer.WritePropertyValue(participantSmtpAddress);
                }
            }
Beispiel #13
0
 private void SetConversionOptions(OutboundConversionOptions options)
 {
     this.options = options;
     if (this.InternalSession != null)
     {
         this.orgId = this.InternalSession.MailboxOwner.MailboxInfo.OrganizationId;
         return;
     }
     if (options.UserADSession != null)
     {
         this.orgId = options.UserADSession.SessionSettings.CurrentOrganizationId;
         return;
     }
     this.orgId = OrganizationId.ForestWideOrgId;
 }
Beispiel #14
0
        public static RightsManagedMessageItem CreateInMemory(OutboundConversionOptions options)
        {
            Util.ThrowOnNullArgument(options, "options");
            RightsManagedMessageItem rightsManagedMessageItem = null;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                rightsManagedMessageItem = ItemBuilder.ConstructItem <RightsManagedMessageItem>(null, null, null, StoreObjectSchema.ContentConversionProperties, () => new InMemoryPersistablePropertyBag(StoreObjectSchema.ContentConversionProperties), ItemCreateInfo.RightsManagedMessageItemInfo.Creator, Origin.Existing, ItemLevel.TopLevel);
                disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem);
                rightsManagedMessageItem[InternalSchema.ItemClass] = "IPM.Note";
                rightsManagedMessageItem.InitNewItem(options);
                rightsManagedMessageItem.SetDefaultEnvelopeBody(null);
                disposeGuard.Success();
            }
            return(rightsManagedMessageItem);
        }
Beispiel #15
0
 private ItemToTnefConverter(Item itemIn, OutboundAddressCache addressCache, OutboundConversionOptions options, ConversionLimitsTracker limits, TnefType tnefType, bool parsingEmbeddedItem)
 {
     if (options.FilterAttachmentHandler != null)
     {
         throw new NotSupportedException("FilterAttachmentHandler is not supported in ItemToTnefConverter");
     }
     if (options.FilterBodyHandler != null)
     {
         throw new NotSupportedException("FilterBodyHandler is not supported in ItemToTnefConverter");
     }
     this.item           = itemIn;
     this.addressCache   = addressCache;
     this.options        = options;
     this.limitsTracker  = limits;
     this.isEmbeddedItem = parsingEmbeddedItem;
     this.tnefType       = tnefType;
 }
Beispiel #16
0
 internal TnefPropertyChecker(TnefType tnefType, bool isEmbeddedMessage, OutboundConversionOptions options)
 {
     this.isEmbeddedMessage = isEmbeddedMessage;
     this.tnefType          = tnefType;
     if (isEmbeddedMessage)
     {
         this.messagePropertyExceptions = new Dictionary <NativeStorePropertyDefinition, bool>(TnefPropertyChecker.embeddedPropertyTransmittabilities);
     }
     else
     {
         this.messagePropertyExceptions = new Dictionary <NativeStorePropertyDefinition, bool>(TnefPropertyChecker.rootPropertyTransmittabilities);
     }
     this.messagePropertyExceptions.Add(InternalSchema.Categories, !options.ClearCategories);
     if (tnefType == TnefType.SummaryTnef)
     {
         this.recipientPropertyExceptions = new Dictionary <NativeStorePropertyDefinition, bool>(TnefPropertyChecker.stnefRecipientPropertyTransmittabilities);
     }
 }
Beispiel #17
0
        public static RightsManagedMessageItem Create(MessageItem item, OutboundConversionOptions options)
        {
            Util.ThrowOnNullArgument(item, "item");
            Util.ThrowOnNullArgument(options, "options");
            RightsManagedMessageItem.CheckSession(item.Session);
            RightsManagedMessageItem result;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                RightsManagedMessageItem rightsManagedMessageItem = new RightsManagedMessageItem(new CoreItemWrapper(item.CoreItem));
                disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem);
                rightsManagedMessageItem.InitNewItem(options);
                RightsManagedMessageItem.CopyProtectableData(item, rightsManagedMessageItem.decodedItem);
                rightsManagedMessageItem.SetDefaultEnvelopeBody(null);
                disposeGuard.Success();
                rightsManagedMessageItem.originalItem = item;
                result = rightsManagedMessageItem;
            }
            return(result);
        }
        internal static InboundConversionOptions FromOutboundOptions(OutboundConversionOptions outboundOptions)
        {
            InboundConversionOptions inboundConversionOptions = new InboundConversionOptions(outboundOptions.ImceaEncapsulationDomain);

            if (outboundOptions.DetectionOptions.PreferredCharset != null)
            {
                inboundConversionOptions.defaultCharset = outboundOptions.DetectionOptions.PreferredCharset;
            }
            inboundConversionOptions.isSenderTrusted    = outboundOptions.IsSenderTrusted;
            inboundConversionOptions.userADSession      = outboundOptions.UserADSession;
            inboundConversionOptions.recipientCache     = outboundOptions.RecipientCache;
            inboundConversionOptions.clearCategories    = outboundOptions.ClearCategories;
            inboundConversionOptions.preserveReportBody = outboundOptions.PreserveReportBody;
            inboundConversionOptions.logDirectoryPath   = outboundOptions.LogDirectoryPath;
            inboundConversionOptions.detectionOptions   = outboundOptions.DetectionOptions;
            inboundConversionOptions.resolveRecipientsInAttachedMessages = outboundOptions.ResolveRecipientsInAttachedMessages;
            if (outboundOptions.Limits != null)
            {
                inboundConversionOptions.limits = outboundOptions.Limits;
            }
            return(inboundConversionOptions);
        }
 internal MsgToRpMsgConverter(MessageItem envelopeMessage, Participant conversationOwner, OrganizationId orgId, RmsTemplate restriction, OutboundConversionOptions options)
 {
     MsgToRpMsgConverter < > 4__this = this;
     using (DisposeGuard disposeGuard = this.Guard())
     {
         this.options   = options;
         this.orgId     = orgId;
         this.charset   = ConvertUtils.GetItemMimeCharset(envelopeMessage.CoreItem.PropertyBag);
         this.messageId = envelopeMessage.InternetMessageId;
         MsgToRpMsgConverter.RpMsgConversionAddressCache rpMsgConversionAddressCache = new MsgToRpMsgConverter.RpMsgConversionAddressCache(this.options);
         rpMsgConversionAddressCache.CopyRecipientsFromItem(envelopeMessage);
         rpMsgConversionAddressCache.Sender = conversationOwner;
         if (envelopeMessage.From != null)
         {
             rpMsgConversionAddressCache.From = envelopeMessage.From;
         }
         rpMsgConversionAddressCache.Resolve();
         string senderAddress = ItemToMimeConverter.TryGetParticipantSmtpAddress(rpMsgConversionAddressCache.Sender ?? conversationOwner);
         if (string.IsNullOrEmpty(senderAddress))
         {
             ExTraceGlobals.StorageTracer.TraceError <string>(0L, "Message sender must have SMTP address to protect the message: {0}", conversationOwner.DisplayName);
             throw new CorruptDataException(ServerStrings.CannotProtectMessageForNonSmtpSender);
         }
         List <string> recipientAddresses = new List <string>(envelopeMessage.Recipients.Count);
         for (int i = 0; i < envelopeMessage.Recipients.Count; i++)
         {
             string text = ItemToMimeConverter.TryGetParticipantSmtpAddress(rpMsgConversionAddressCache.GetRecipient(i) ?? envelopeMessage.Recipients[i].Participant);
             if (!string.IsNullOrEmpty(text))
             {
                 recipientAddresses.Add(text);
             }
             else
             {
                 ExTraceGlobals.StorageTracer.TraceError <string>(0L, "Message recipient must have SMTP address to be included in the IRM message license: {0}", envelopeMessage.Recipients[i].Participant.DisplayName);
             }
         }
         string fromAddress = string.Empty;
         if (rpMsgConversionAddressCache.From != null)
         {
             fromAddress = ItemToMimeConverter.TryGetParticipantSmtpAddress(rpMsgConversionAddressCache.From);
             if (string.IsNullOrEmpty(fromAddress))
             {
                 ExTraceGlobals.StorageTracer.TraceError <string>(0L, "Message from participant must have SMTP address to be included in the IRM message license: {0}", rpMsgConversionAddressCache.From.DisplayName);
             }
         }
         this.InitTenantLicenses();
         MsgToRpMsgConverter.CallRM(delegate
         {
Beispiel #20
0
 internal ItemToTnefConverter(Item itemIn, OutboundAddressCache addressCache, ItemToTnefConverter.TnefContentWriter writer, OutboundConversionOptions options, ConversionLimitsTracker limits, TnefType tnefType, bool parsingEmbeddedItem) : this(itemIn, addressCache, options, limits, tnefType, parsingEmbeddedItem)
 {
     this.tnefWriter         = writer;
     this.tnefCorrelationKey = null;
     this.propertyChecker    = new TnefPropertyChecker(tnefType, parsingEmbeddedItem, options);
     this.disposeTracker     = this.GetDisposeTracker();
 }
Beispiel #21
0
        internal ItemToTnefConverter(Item itemIn, OutboundAddressCache addressCache, Stream mimeOut, OutboundConversionOptions options, ConversionLimitsTracker limits, TnefType tnefType, string tnefCorrelationKey, bool parsingEmbeddedItem) : this(itemIn, addressCache, options, limits, tnefType, parsingEmbeddedItem)
        {
            this.tnefCorrelationKey = tnefCorrelationKey;
            Charset itemWindowsCharset = ConvertUtils.GetItemWindowsCharset(this.item, options);

            this.tnefWriter      = new ItemToTnefConverter.TnefContentWriter(mimeOut, itemWindowsCharset);
            this.propertyChecker = new TnefPropertyChecker(tnefType, parsingEmbeddedItem, options);
            this.disposeTracker  = this.GetDisposeTracker();
        }
Beispiel #22
0
        public static RightsManagedMessageItem Bind(MailboxSession session, StoreId messageId, OutboundConversionOptions options, bool acquireLicense, ICollection <PropertyDefinition> propsToReturn)
        {
            Util.ThrowOnNullArgument(session, "session");
            Util.ThrowOnNullArgument(messageId, "messageId");
            Util.ThrowOnNullArgument(options, "options");
            RightsManagedMessageItem.CheckSession(session);
            RightsManagedMessageItem rightsManagedMessageItem = null;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                rightsManagedMessageItem = ItemBuilder.ItemBind <RightsManagedMessageItem>(session, messageId, RightsManagedMessageItemSchema.Instance, propsToReturn);
                disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem);
                rightsManagedMessageItem.Decode(options, acquireLicense);
                disposeGuard.Success();
            }
            return(rightsManagedMessageItem);
        }
Beispiel #23
0
 public static RightsManagedMessageItem Bind(MailboxSession session, StoreId messageId, OutboundConversionOptions options, ICollection <PropertyDefinition> propsToReturn)
 {
     return(RightsManagedMessageItem.Bind(session, messageId, options, true, propsToReturn));
 }
Beispiel #24
0
 public static RightsManagedMessageItem Bind(MailboxSession session, StoreId messageId, OutboundConversionOptions options, bool acquireLicense)
 {
     return(RightsManagedMessageItem.Bind(session, messageId, options, acquireLicense, new PropertyDefinition[0]));
 }
Beispiel #25
0
        internal static void Convert(Stream dataStream, Encoding encoding, Contact contact, OutboundConversionOptions options, ConversionLimitsTracker limitsTracker)
        {
            Util.ThrowOnNullArgument(options, "options");
            Util.ThrowOnNullOrEmptyArgument(options.ImceaEncapsulationDomain, "options.ImceaEncapsulationDomain");
            ContactWriter contactWriter = new ContactWriter(dataStream, encoding);

            contactWriter.StartVCard();
            OutboundVCardConverter.PropertyExporter.Context context = new OutboundVCardConverter.PropertyExporter.Context(encoding, options, limitsTracker);
            foreach (OutboundVCardConverter.PropertyExporter propertyExporter in OutboundVCardConverter.exporters)
            {
                propertyExporter.Export(contactWriter, contact, context);
            }
            contactWriter.EndVCard();
        }
Beispiel #26
0
        public static RightsManagedMessageItem CreateFromInMemory(MessageItem item, MailboxSession session, StoreId destFolderId, OutboundConversionOptions options)
        {
            Util.ThrowOnNullArgument(item, "item");
            Util.ThrowOnNullArgument(session, "session");
            Util.ThrowOnNullArgument(destFolderId, "destFolderId");
            Util.ThrowOnNullArgument(options, "options");
            RightsManagedMessageItem.CheckSession(session);
            if (item.Session != null)
            {
                throw new InvalidOperationException("Item should be in-memory, not backed by store.");
            }
            RightsManagedMessageItem result;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                RightsManagedMessageItem rightsManagedMessageItem = RightsManagedMessageItem.Create(session, destFolderId, options);
                disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem);
                RightsManagedMessageItem.CopyProtectableData(item, rightsManagedMessageItem.decodedItem);
                foreach (NativeStorePropertyDefinition nativeStorePropertyDefinition in item.AllNativeProperties)
                {
                    if (!Body.BodyPropSet.Contains(nativeStorePropertyDefinition) && nativeStorePropertyDefinition != StoreObjectSchema.ContentClass)
                    {
                        object obj = item.TryGetProperty(nativeStorePropertyDefinition);
                        if (!(obj is PropertyError))
                        {
                            rightsManagedMessageItem[nativeStorePropertyDefinition] = obj;
                        }
                        else if (PropertyError.IsPropertyValueTooBig(obj))
                        {
                            using (Stream stream = item.OpenPropertyStream(nativeStorePropertyDefinition, PropertyOpenMode.ReadOnly))
                            {
                                using (Stream stream2 = rightsManagedMessageItem.OpenPropertyStream(nativeStorePropertyDefinition, PropertyOpenMode.Create))
                                {
                                    Util.StreamHandler.CopyStreamData(stream, stream2);
                                }
                            }
                        }
                    }
                }
                rightsManagedMessageItem.Recipients.CopyRecipientsFrom(item.Recipients);
                rightsManagedMessageItem.SaveFlags |= (PropertyBagSaveFlags.IgnoreMapiComputedErrors | PropertyBagSaveFlags.IgnoreUnresolvedHeaders);
                disposeGuard.Success();
                result = rightsManagedMessageItem;
            }
            return(result);
        }
Beispiel #27
0
        public static RightsManagedMessageItem Create(MailboxSession session, StoreId destFolderId, OutboundConversionOptions options)
        {
            Util.ThrowOnNullArgument(session, "session");
            Util.ThrowOnNullArgument(destFolderId, "destFolderId");
            Util.ThrowOnNullArgument(options, "options");
            RightsManagedMessageItem.CheckSession(session);
            RightsManagedMessageItem rightsManagedMessageItem = null;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                rightsManagedMessageItem = ItemBuilder.CreateNewItem <RightsManagedMessageItem>(session, destFolderId, ItemCreateInfo.RightsManagedMessageItemInfo, CreateMessageType.Normal);
                disposeGuard.Add <RightsManagedMessageItem>(rightsManagedMessageItem);
                rightsManagedMessageItem[InternalSchema.ItemClass] = "IPM.Note";
                rightsManagedMessageItem.InitNewItem(options);
                rightsManagedMessageItem.SetDefaultEnvelopeBody(null);
                disposeGuard.Success();
            }
            return(rightsManagedMessageItem);
        }
Beispiel #28
0
 internal OutboundAddressCache(OutboundConversionOptions options, ConversionLimitsTracker limitsTracker) : base(limitsTracker, options.UseSimpleDisplayName, options.EwsOutboundMimeConversion)
 {
     this.outboundOptions = options;
 }
Beispiel #29
0
        public static void ExportCalendar(Stream outputStream, string charset, OutboundConversionOptions options, MailboxSession session, StoreObjectId folderId, ExDateTime windowStart, ExDateTime windowEnd, DetailLevelEnumType detailType)
        {
            EnumValidator.ThrowIfInvalid <DetailLevelEnumType>(detailType, "detailType");
            PropertyDefinition[] array = InternetCalendarSchema.FromDetailLevel(detailType);
            Array.IndexOf <PropertyDefinition>(array, CalendarItemBaseSchema.FreeBusyStatus);
            int num = Array.IndexOf <PropertyDefinition>(array, InternalSchema.ItemId);

            using (CalendarFolder calendarFolder = CalendarFolder.Bind(session, folderId))
            {
                object[][] array2 = calendarFolder.InternalGetCalendarView(windowStart, windowEnd, detailType == DetailLevelEnumType.AvailabilityOnly, true, true, RecurrenceExpansionOption.IncludeMaster | RecurrenceExpansionOption.TruncateMaster, array);
                Item[]     items  = new Item[array2.Length];
                try
                {
                    for (int i = 0; i < array2.Length; i++)
                    {
                        items[i] = MessageItem.CreateInMemory(StoreObjectSchema.ContentConversionProperties);
                        for (int j = 0; j < array.Length; j++)
                        {
                            StorePropertyDefinition storePropertyDefinition = array[j] as StorePropertyDefinition;
                            if (storePropertyDefinition != null && (storePropertyDefinition.PropertyFlags & PropertyFlags.ReadOnly) != PropertyFlags.ReadOnly)
                            {
                                object obj = array2[i][j];
                                if (!PropertyError.IsPropertyError(obj))
                                {
                                    items[i][storePropertyDefinition] = obj;
                                }
                            }
                        }
                        if (detailType == DetailLevelEnumType.FullDetails && array2[i][num] is VersionedId)
                        {
                            using (CoreItem coreItem = CoreItem.Bind(session, (VersionedId)array2[i][num], new PropertyDefinition[]
                            {
                                ItemSchema.TextBody,
                                ItemSchema.HtmlBody,
                                ItemSchema.RtfBody
                            }))
                            {
                                using (TextReader textReader = coreItem.Body.OpenTextReader(BodyFormat.TextPlain))
                                {
                                    items[i][ItemSchema.TextBody] = textReader.ReadToEnd();
                                }
                            }
                        }
                    }
                    OutboundAddressCache   addressCache = new OutboundAddressCache(options, new ConversionLimitsTracker(options.Limits));
                    List <LocalizedString> errorStream  = new List <LocalizedString>();
                    ConvertUtils.CallCts(ExTraceGlobals.ICalTracer, "ICalSharingHelper::ExportCalendar", ServerStrings.ConversionCorruptContent, delegate
                    {
                        CalendarDocument.InternalItemsToICal(calendarFolder.DisplayName, items, null, addressCache, true, outputStream, errorStream, charset, options);
                    });
                    if (errorStream.Count > 0)
                    {
                        ExTraceGlobals.ICalTracer.TraceError <int>(0L, "{0} errors found during outbound iCal content conversion.", errorStream.Count);
                        AnonymousSharingLog.LogEntries(session, errorStream);
                    }
                }
                finally
                {
                    foreach (Item item in items)
                    {
                        if (item != null)
                        {
                            item.Dispose();
                        }
                    }
                }
            }
        }
Beispiel #30
0
 internal Context(Encoding encoding, OutboundConversionOptions options, ConversionLimitsTracker limitsTracker)
 {
     this.Encoding     = encoding;
     this.AddressCache = new OutboundAddressCache(options, limitsTracker);
     this.Options      = options;
 }