private async Task DispatchMessageAsync(InputMessage message, EmailMessageInfoExtension extension, string requestId)
        {
            // Get partition based on message category
            var dispatchPartitionCount = this.configuration.DispatchPartitionCount;

            var partionId = this.random.Next(0, dispatchPartitionCount);

            // Config callback service uri
            message.ReportingServiceUri = EmailConstant.ReportingServiceUri;

            // Send to dispatcher service
            var client = this.proxyFactory.CreateServiceProxy <IDispatcherService>(new Uri(EmailConstant.DispatcherServiceUri), new ServicePartitionKey(partionId), TargetReplicaSelector.PrimaryReplica);
            await client.DispatchAsync(new List <InputMessage> {
                message
            }, CancellationToken.None);
        }
Example #2
0
        public async Task OnMessageSentAsync(InputMessage message, EmailMessageInfoExtension extension)
        {
            // Create record in history table
            var historyTable = await GetHistoryTableAsync(message.MessageInfo.EngagementAccount);

            if (historyTable == null)
            {
                // Create the table in case any issue in account initialize
                historyTable = await GetHistoryTableAsync(message.MessageInfo.EngagementAccount, true);
            }

            var history = new MessageHistoryTableEntity(message, extension);
            await MessageHistoryTableEntity.InsertOrMergeAsync(historyTable, history);

            // Create record in audit table
            var audit = new MessageAuditTableEntity(history);
            await MessageAuditTableEntity.InsertOrMergeAsync(auditTable, audit);
        }
        private async Task <Tuple <InputMessage, EmailMessageInfoExtension> > BuildInputMessageAsync(Account account, MessageTemplateBody messageTemplateBody, List <string> targets, TargetType targetType, string requestId)
        {
            // Get Template
            var template = await this.engine.GetTemplateAsync(account.EngagementAccount, messageTemplateBody.TemplateName, requestId);

            // Get Sender Address
            var sender = await this.engine.GetSenderAsync(template.EngagementAccount, template.SenderId, requestId);

            // Get EmailAccount
            var emailAccount = await this.store.GetEmailAccountAsync(account.EngagementAccount);

            // Get Connector Contract
            var credential = await this.credentialManager.GetConnectorCredentialContractAsync(account.EngagementAccount);

            var extension = new EmailMessageInfoExtension();

            extension.EmailAccount      = emailAccount;
            extension.SenderAddress     = sender.ToContract();
            extension.TargetType        = targetType;
            extension.DisplayName       = template.SenderAlias;
            extension.Title             = template.Subject;
            extension.EnableUnSubscribe = template.EnableUnSubscribe;

            var message = new InputMessage();

            message.ConnectorCredential           = credential;
            message.MessageInfo                   = new MessageInfo();
            message.MessageInfo.EngagementAccount = account.EngagementAccount;
            message.MessageInfo.MessageId         = Guid.NewGuid();
            message.MessageInfo.SendTime          = DateTime.UtcNow;
            message.MessageInfo.TrackingId        = requestId;
            message.MessageInfo.MessageBody       = ValidateTemplateParameters(template, messageTemplateBody.TemplateParameters);
            message.MessageInfo.ExtensionData     = extension.ToString();
            message.Targets = targets.AsReadOnly();

            return(new Tuple <InputMessage, EmailMessageInfoExtension>(message, extension));
        }
Example #4
0
 public async Task OnMessageSentAsync(string engagementAccount, InputMessage message, EmailMessageInfoExtension extension)
 {
     await this.telemetryManager.OnMessageSentAsync(message, extension);
 }
 public MessageHistoryTableEntity(InputMessage message, EmailMessageInfoExtension extension)
     : this(message.MessageInfo.EngagementAccount, message.MessageInfo.MessageId.ToString())
 {
     this.MessageBody = message.MessageInfo.MessageBody;
     this.SendTime    = message.MessageInfo.SendTime;
 }