Exemplo n.º 1
0
        public static SmtpResponse GenerateResponse(MessageAction messageLevelAction, IReadOnlyMailRecipientCollection recipients, SmtpResponse smtpResponse, TimeSpan?retryInterval)
        {
            if (recipients == null)
            {
                throw new ArgumentNullException("recipients", "Required argument is not provided");
            }
            bool flag = SmtpResponseGenerator.ShouldGenerateAllRecipients(recipients);

            if (!flag && retryInterval == null && messageLevelAction != MessageAction.RetryQueue)
            {
                return(smtpResponse);
            }
            StringBuilder stringBuilder = new StringBuilder();

            SmtpResponseGenerator.GenerateBanner(stringBuilder, smtpResponse.StatusCode, smtpResponse.EnhancedStatusCode);
            stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}{1}{2} {3} {4}{5}{6}", new object[]
            {
                smtpResponse.StatusCode,
                flag ? "-" : " ",
                flag ? smtpResponse.StatusCode : string.Empty,
                smtpResponse.EnhancedStatusCode,
                SmtpResponseGenerator.FlattenStatusText(smtpResponse),
                SmtpResponseGenerator.GenerateAdditionalContextForMessage(messageLevelAction, retryInterval),
                "\r\n"
            });
            if (flag)
            {
                IEnumerator <MailRecipient> enumerator = recipients.GetEnumerator();
                bool flag2 = enumerator.MoveNext();
                while (flag2)
                {
                    MailRecipient mailRecipient = enumerator.Current;
                    flag2 = enumerator.MoveNext();
                    bool value = mailRecipient.ExtendedProperties.GetValue <bool>("Microsoft.Exchange.Transport.MailboxTransport.RetryOnDuplicateDelivery ", false);
                    mailRecipient.ExtendedProperties.Remove("Microsoft.Exchange.Transport.MailboxTransport.RetryOnDuplicateDelivery ");
                    SmtpResponse responseForRecipient = SmtpResponseGenerator.GetResponseForRecipient(mailRecipient, value);
                    stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}{1}{2} {3} {4}{5}{6}", new object[]
                    {
                        smtpResponse.StatusCode,
                        flag2 ? "-" : " ",
                        responseForRecipient.StatusCode,
                        responseForRecipient.EnhancedStatusCode,
                        SmtpResponseGenerator.FlattenStatusText(responseForRecipient),
                        SmtpResponseGenerator.GenerateAdditionalContextForRecipient(mailRecipient, value),
                        "\r\n"
                    });
                }
            }
            return(SmtpResponse.Parse(stringBuilder.ToString()));
        }
Exemplo n.º 2
0
 internal virtual void AckMailItem(AckStatus ackStatus, SmtpResponse smtpResponse, AckDetails ackDetails, TimeSpan?retryInterval, string messageTrackingSourceContext)
 {
     if (ackStatus == AckStatus.Retry && smtpResponse.SmtpResponseType != SmtpResponseType.TransientError)
     {
         smtpResponse = TransportMailItem.ReplaceFailWithRetryResponse(smtpResponse);
     }
     this.mailItem.Ack(ackStatus, smtpResponse, this.GetRecipients(), this.recipientResponses);
     this.FinalizeDeliveryLatencyTracking(LatencyComponent.StoreDriverDelivery);
     this.mailItemResponse = SmtpResponseGenerator.GenerateResponse(this.MessageLevelAction, this.Recipients, smtpResponse, retryInterval);
     foreach (MailRecipient mailRecipient in this.Recipients)
     {
         if (mailRecipient.ExtendedProperties.Contains("ExceptionAgentName"))
         {
             mailRecipient.ExtendedProperties.Remove("ExceptionAgentName");
         }
     }
 }
Exemplo n.º 3
0
        private static SmtpResponse CreateStoreDriverRetireResponse()
        {
            StringBuilder stringBuilder = new StringBuilder();

            SmtpResponseGenerator.GenerateBanner(stringBuilder, "432", "4.3.2");
            stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}{1}{2} {3} {4}{5}{6}", new object[]
            {
                "432",
                " ",
                "432",
                "4.3.2",
                "STOREDRV.Deliver; Component has been retired",
                string.Format(CultureInfo.InvariantCulture, "[{0}={1}]", new object[]
                {
                    "resubmit",
                    true
                }),
                "\r\n"
            });
            return(SmtpResponse.Parse(stringBuilder.ToString()));
        }