Example #1
0
        public static void Run(
            [QueueTrigger(queueName: Fn.Qs.OutgoingMail, Connection = Fn.ConnectionKeyName)] CloudQueueMessage message,
            ILogger log)
        {
            using (var client = new SmtpClient())
            {
                var storageConfig     = Fn.StorageConfig.Load();
                var storageAccount    = CloudStorageAccount.Parse(storageConfig.ConnectionString);
                var blobClient        = storageAccount.CreateCloudBlobClient();
                var outgoingContainer = blobClient.GetContainerReference(storageConfig.OutgoingMailContainerName);
                var emailConfig       = Fn.EmailConfig.Load();
                var telemetry         = new TelemetryClient(new TelemetryConfiguration(Fn.InstrumentationKey()));

                var email = EmailStorage.LoadEmailFromStorage(message.AsString, outgoingContainer);
                client.Connect(emailConfig.SmtpServer, emailConfig.SmtpPort);
                client.Authenticate(emailConfig.Username, emailConfig.Password);
                client.Send(email);
                client.Disconnect(true);
                telemetry.TrackEvent(
                    Events.SentMail,
                    Events.Properties.Init()
                    .Then(Events.Properties.EmailAddress, email.To.Mailboxes.First().Address));

                EmailStorage.DeleteEmailFromStorage(message.AsString, outgoingContainer);

                log.LogInformation($"sent mail to {email.To} - {email.Subject}");
            }
        }
        private static void NotifyByEmail(MimeMessage originalMessage, CloudBlobContainer outgoingContainer, ICollector <string> outgoingMail, ILogger log)
        {
            var emailConfig = Fn.EmailConfig.Load();

            log.LogInformation($"... Notifying admin of error via email ({emailConfig.AdminEmailAddress})");

            var forwarded = MailUtility.ForwardMessage(
                originalMessage,
                "Here's an error email.",
                emailConfig.AdminEmailAddress,
                emailConfig.FromEmailAddress);

            outgoingMail.Add(EmailStorage.SaveEmailToStorage(forwarded, outgoingContainer));
        }
        public static void Run(
            [QueueTrigger(queueName: Fn.Qs.ErrorNotification, Connection = Fn.ConnectionKeyName)] CloudQueueMessage message,
            [Queue(queueName: Fn.Qs.OutgoingMail, Connection = Fn.ConnectionKeyName)] ICollector <string> outgoingMail,
            ILogger log)
        {
            var storageConfig     = Fn.StorageConfig.Load();
            var storageAccount    = CloudStorageAccount.Parse(storageConfig.ConnectionString);
            var blobClient        = storageAccount.CreateCloudBlobClient();
            var outgoingContainer = blobClient.GetContainerReference(storageConfig.OutgoingMailContainerName);
            var errorContainer    = blobClient.GetContainerReference(storageConfig.ErrorMailContainerName);

            var originalEmail = EmailStorage.LoadEmailFromStorage(message.AsString, errorContainer);

            log.LogInformation($"Got error {originalEmail.Subject}... notifying... ");

            NotifyByEmail(originalEmail, outgoingContainer, outgoingMail, log);

            EmailStorage.DeleteEmailFromStorage(message.AsString, errorContainer);
        }
Example #4
0
        public static void Run(
            [TimerTrigger("0 */1 * * * *")] TimerInfo timer,
            [Queue(queueName: Fn.Qs.IncomingMail, Connection = Fn.ConnectionKeyName)] ICollector <string> outputQueue,
            ILogger log)
        {
            using (var client = new ImapClient())
            {
                var emailConfig = Fn.EmailConfig.Load();
                client.ServerCertificateValidationCallback = (s, c, h, e) => true;

                client.Connect(emailConfig.ImapServer, emailConfig.ImapPort, SecureSocketOptions.SslOnConnect);
                client.Authenticate(emailConfig.Username, emailConfig.Password);

                var inbox = client.Inbox;
                inbox.Open(FolderAccess.ReadWrite);

                var storageConfig  = Fn.StorageConfig.Load();
                var storageAccount = CloudStorageAccount.Parse(storageConfig.ConnectionString);
                var blobClient     = storageAccount.CreateCloudBlobClient();
                var container      = blobClient.GetContainerReference(storageConfig.IncomingMailContainerName);
                //var telemetry = new TelemetryClient(new TelemetryConfiguration(Fn.InstrumentationKey()));

                inbox.Search(SearchQuery.NotSeen)
                .Select(uid => new { uid, message = inbox.GetMessage(uid) })
                .ToList()
                .ForEach(x => {
                    var filename = EmailStorage.SaveEmailToStorage(x.message, container);

                    outputQueue.Add(filename);
                    inbox.AddFlags(x.uid, MessageFlags.Seen, false);

                    log.LogInformation($"Queued email - {x.message.From.ToString()} - {x.message.Subject} - {filename}");
                    //telemetry.TrackEvent(Events.ReceivedMail);
                });

                client.Disconnect(true);
            }
        }
Example #5
0
        public static void Run(
            [QueueTrigger(queueName: Fn.Qs.IncomingMail, Connection = Fn.ConnectionKeyName)] CloudQueueMessage message,
            [Queue(queueName: Fn.Qs.OutgoingMail, Connection = Fn.ConnectionKeyName)] ICollector <string> outputQueue,
            [Queue(queueName: Fn.Qs.ErrorNotification, Connection = Fn.ConnectionKeyName)] ICollector <string> errorQueue,
            ILogger log)
        {
            var storageConfig     = Fn.StorageConfig.Load();
            var storageAccount    = CloudStorageAccount.Parse(storageConfig.ConnectionString);
            var blobClient        = storageAccount.CreateCloudBlobClient();
            var incomingContainer = blobClient.GetContainerReference(storageConfig.IncomingMailContainerName);
            var outgoingContainer = blobClient.GetContainerReference(storageConfig.OutgoingMailContainerName);
            var settingsContainer = blobClient.GetContainerReference(storageConfig.SettingsContainerName);
            var errorContainer    = blobClient.GetContainerReference(storageConfig.ErrorMailContainerName);
            var originalEmail     = EmailStorage.LoadEmailFromStorage(message.AsString, incomingContainer);
            var telemetry         = new TelemetryClient(new TelemetryConfiguration(Fn.InstrumentationKey()));

            var settingsStore = new SettingsStore(new CloudStore(settingsContainer));
            var reply         = MailProcessor.ProcessEmail(
                originalEmail,
                Fn.EmailConfig.Load().FromEmailAddress,
                settingsStore,
                telemetry);

            if (!reply.WasSuccessful)
            {
                var erroredFile = EmailStorage.SaveEmailToStorage(originalEmail, errorContainer);
                errorQueue.Add(erroredFile);
                log.LogInformation($"enqueueing error - {erroredFile}");
                log.LogError("Error processing email, ", reply.Exception);
            }
            EmailStorage.DeleteEmailFromStorage(message.AsString, incomingContainer);

            var filename = EmailStorage.SaveEmailToStorage(reply.Value, outgoingContainer);

            outputQueue.Add(filename);
            log.LogInformation($"extracted data, enqueueing reply - {reply.Value.To} - {filename}");
        }
Example #6
0
        static void Main(string[] args)
        {
            Console.WriteLine(string.Format("ed = {0}, Tom = {1}", "cool", "less cool"));
            //SRP
            Console.WriteLine("SRP");
            UserStorage  s = new UserStorage();
            EmailStorage e = new EmailStorage();

            SRPService main = new SRPService(s, e);

            Console.WriteLine("_________________________________");
            Console.WriteLine("OCP");
            //OCP
            OCPService ocp = new OCPService();

            Console.WriteLine("_________________________________");
            Console.WriteLine("LSP");
            //LSP
            LSPService lsp = new LSPService();

            Console.WriteLine("_________________________________");
            Console.WriteLine("ISP");
            //ISP
            ISPService isp = new ISPService();

            Console.WriteLine("_________________________________");

            Console.WriteLine("DIP");
            //DIP
            DIPService sip = new DIPService();

            Console.WriteLine("_________________________________");
            Console.WriteLine("Law of Demeter");
            //Law of demeter
            Demeter dim = new Demeter();

            Console.WriteLine("_________________________________");
            Console.WriteLine("Factory pattern");
            //factory
            FactoryService factory = new FactoryService();

            Console.WriteLine("_________________________________");

            Console.WriteLine("Adaptor Pattern");
            //Adaptor pattern
            AdaptorService adaptorService = new AdaptorService();

            Console.WriteLine("_________________________________");

            Console.WriteLine("Decorator Pattern");
            //decorator pattern
            DecoratorService decoratorService = new DecoratorService();

            Console.WriteLine("_________________________________");


            Console.WriteLine("Repository Pattern");
            //Repository pattern
            RepositoryService RepositoryService = new RepositoryService();

            Console.WriteLine("_________________________________");


            Console.WriteLine("Tree Traversal");
            //BinaryTree Traversal
            BinaryTreeService BinaryTreeService = new BinaryTreeService();

            Console.WriteLine("_________________________________");

            Console.WriteLine("Number Swap");
            //Number Swap
            NumberSwapService NumberSwapService = new NumberSwapService();

            Console.WriteLine("_________________________________");

            Console.WriteLine("Multiply");
            //Multiply
            MultiplyService MultiplyService = new MultiplyService();

            Console.WriteLine("_________________________________");

            Console.WriteLine("OverflowChecked");
            //OverflowCheckedService
            OverflowCheckedService OverflowChecked = new OverflowCheckedService();

            Console.WriteLine("_________________________________");

            Console.WriteLine("By Ref");
            //pass by reference
            ByRefService ByRefService = new ByRefService();

            Console.WriteLine("_________________________________");

            Console.WriteLine(" EF Code FirstService");
            //EFCodeFirstService
            //EFCodeFirstService EFCodeFirstService = new EFCodeFirstService();
            Console.WriteLine("_________________________________");
            //read
            Console.ReadLine();
        }
 public WebHookController(EmailStorage emailStorage)
 {
     this.emailStorage = emailStorage;
 }