Я пытаюсь реализовать функцию, в которой мне нужно проанализировать электронную почту из s3 и извлечь ее вложения в загрузчик несущей: мне нужно сохранить Mail::Part
как вложение несущей.
Я читаюэлектронное письмо, хранящееся в s3, и его разбор с использованием гема почтовой программы, поэтому я в основном получаю многочастное электронное письмо.Пока что я уже закончил разбор тела, но теперь мне нужно обработать вложения электронной почты.
Я здесь:
s3 = ::Aws::S3::Encryption::Client.new(
region: 'eu-west-1',
kms_key_id: 'my-key',
)
object = s3.get_object(
bucket: bucket,
key: key,
)
s3_email = object.body.read
mail = ::Mail.new(s3_email) # Mail::Message
mail.attachments
# => [#<Mail::Part:70154514749400, Multipart: true, Headers: <Content-Type: multipart/alternative; boundary="------------0739BEA5795DFFE28DCBAECD">>, #<Mail::Part:70154514744360, Multipart: false, Headers: <Content-Type: application/pdf; x-mac-type="0"; x-mac-creator="0"; name="my_attachment.pdf">, <Content-Transfer-Encoding: base64>, <Content-Disposition: attachment; filename="my_attachment.pdf">>]
И мне нужно сохранить его какcarrierwave uploader
class Message
include Mongoid::Document
mount_uploader :attachment, ::AttachmentUploader
end
# Message.new(attachment: mail.attachments.first) ==> I want to do something like this
Я не уверен, как я могу передать это как вложение Carrierwave.
Кроме того, я знаю о Griddler, но этот драгоценный камень, кажется, не содержит код, который яищу (или, может быть, я пропустил)
РЕДАКТИРОВАТЬ
Я пытаюсь следовать инструкциям отсюда https://github.com/mikel/mail#testing-and-extracting-attachments с временным файлом, но все идет не так, как планировалось
tempfile = Tempfile.new(filename)
tempfile.write(attachment.decoded)
# => *** Encoding::UndefinedConversionError Exception: "\xFF" from ASCII-8BIT to UTF-8