Example #1
0
        public async Task <List <HatoAttachment> > UploadAndSaveAttachments(MailgunEmailRaw email)
        {
            var atts = new List <HatoAttachment>();

            foreach (var att in email.Attachments)
            {
                var id         = Ulid.NewUlid();
                var fileStream = await recv.GetAttachment(att.Url);

                var url = await oss.PutAttachment(id, att.Name, fileStream, att.Size, att.ContentType);

                var attachment = new HatoAttachment()
                {
                    AttachmentId = id,
                    Filename     = att.Name,
                    Url          = url,
                    ContentType  = att.ContentType,
                    Size         = att.Size,
                    IsAvailable  = true
                };
                atts.Add(attachment);
            }
            await this.db.AddAttachmentEntries(atts);

            return(atts);
        }
Example #2
0
        public async void dealWithChannel(EmailRecvEvent ev)
        {
            var email = ev.email;
            var data  = new EmailData();

            if (email.BodyHtml != null)
            {
                data.Body   = email.BodyHtml;
                data.IsHtml = true;
            }
            else
            {
                data.Body   = email.BodyPlain;
                data.IsHtml = false;
            }
            data.PlaintextAlternativeBody = email.BodyPlain;
            data.Subject = email.Subject;

            var captures    = Regex.Match(email.To, "^(.*) <(?<name>.+)@.+>$").Groups;
            var channelName = captures["name"].Value;

            logger.LogInformation("Got email from {0} to {1}; channelName = {2}", email.From, email.To, channelName);

            var origin      = Regex.Match(email.From, "^(?<nick>.*) <(?<email>.+)>$").Groups;
            var originEmail = origin["email"].Value;
            var originNick  = origin["nick"].Value;

            try
            {
                foreach (var attachment in email.Attachments)
                {
                    var attachmentStream = await recvService.GetAttachment(attachment.Url);

                    var att = new Attachment();
                    att.Data        = attachmentStream;
                    att.Filename    = attachment.Name;
                    att.ContentType = attachment.ContentType;
                    data.Attachments.Add(att);
                }
                await this.SendEmailToChannel(channelName, data);
            }
            catch (ChannelSendFailedException e)
            {
                // const int maxBodyLength = 200;
                // string strippedBody;
                // if (email.BodyPlain.Length > maxBodyLength)
                // {
                //     strippedBody = email.BodyPlain.Substring(0, 200) + "...";
                // }
                // else
                // {
                //     strippedBody = email.BodyPlain;
                // }
                // await this.SendFailureEmailBack(
                //  originEmail, originNick, channelName, strippedBody, e.ToString(), email.Date);
                // logger.LogWarning(e, "Failed to send to channel");
            }
        }