Example #1
0
        public Response(Email email, Template template)
        {
            EmailUid = email.EmailUid;

            EmailAddresses = new List<EmailAddress>
            {
                new EmailAddress //switch the from address to the the two address
                {
                    Type = EmailAddressType.To,
                    Name = email.FromAddress.Name,
                    Email = email.FromAddress.Email
                },
                new EmailAddress //reply from the specified sender in the template
                {
                    Type = EmailAddressType.From,
                    Name = template.From,
                    Email = template.FromAddress
                }
            };

            Subject = template.Subject;
            HtmlBody = template.HtmlBody;
            PlainTextBody = template.PlainTextBody;
            DateResponded = DateTime.UtcNow;
            OriginalEmail = email.OriginalEmail;
        }
        public static IMail MapToIMail(Email message)
        {
            var replyBuilder = ((IMail) message.OriginalEmail).Reply();

            replyBuilder.Text = message.PlainTextBody;

            if (!string.IsNullOrEmpty(message.HtmlBody))
                replyBuilder.Html = message.HtmlBody;

            var builder =  replyBuilder.ReplyToAll(GetReplyAddress(message.EmailAddresses));

            return builder.Create();
        }
        public static Email MapEmailToCoreEmail(string accountName, long emailId, IMail email)
        {
            var message = new Email
            {
                EmailUid = emailId.ToString(),
                EmailAddresses = ProcessEmailAddresses(email),
                Subject = email.Subject,
                HtmlBody = email.GetBodyAsHtml(),
                PlainTextBody = email.GetBodyAsText(),
                OriginalEmail = email,
            };

            return message;
        }
        public bool SendEmail(IMailboxSettings mailboxSettings, Email email)
        {
            bool success;

            lock (_key)
            {
                success = _mailAdaptor.SendResponse(mailboxSettings, email);

                if (success)
                {
                    _mailAdaptor.RemoveLabelFromMessage(mailboxSettings, long.Parse(email.EmailUid),
                        _mailboxLabels.AutoResponseProcessingLabel);

                    _mailAdaptor.ApplyLabelToMessage(mailboxSettings, long.Parse(email.EmailUid),
                        _mailboxLabels.AutoRespondedLabel);
                }
            }

            return success;
        }
        public bool SendResponse(IMailboxSettings mailboxSettings, Email email)
        {
            using (var client = new Smtp())
            {
                try
                {
                    client.ConnectSSL(mailboxSettings.OutboundServerAddress, mailboxSettings.OutboundServerPort);
                    client.LoginOAUTH2(email.FromAddress.Email, _oAuth2Authenticator.GetOAuth2AccessToken(email.FromAddress.Email));

                    return client.SendMessage(EmailMapper.MapToIMail(email)).Status == SendMessageStatus.Success;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }