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); }
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)); }
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; }