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