Rails aws s3 читает электронную почту с вложением csv - PullRequest
0 голосов
/ 17 октября 2019

Я настраиваю приложение, которое будет читать электронную почту с вложением csv из aws s3. Я пытаюсь выяснить, как получить прикрепленный CSV-файл и обработать его. Я искал и не могу найти ничего конкретного для работы. Я не буду знать, как будет назван CSV.

У меня есть базовое прочтение работы тела, но я не знаю, как получить вложение.


obj = s3.get_object(bucket: 'mys3bucket', key: myobjectKey)
contents = obj.body.read
      from = contents.match(/(?<=From: )(.*?)(?=\n)/).try(:to_s)
      to = contents.match(/(?<=To: )(.*?)(?=\n)/).try(:to_s)
      subject = contents.match(/(?<=Subject: )(.*?)(?=\n)/).try(:to_s)

ия понятия не имею, куда идти отсюда ... я новичок в Rails, кстати.

Спасибо

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Согласно документации AWS, письма должны быть в стандартном формате .eml. Это означает, что вы можете использовать драгоценный камень типа Mail для извлечения всего, что вам нужно:

mail = Mail.read_from_string(contents)
puts mail.to         
puts mail.from
puts mail.subject

Извлечение вложений;пример из почтовой документации:

# Attachments is an AttachmentsList object containing a
# number of Part objects
mail.attachments.each do |attachment|
  filename  = attachment.filename
  file_data = attachment.decoded
  # ...do something with file_data here...
end

См. больше примеров в README:
https://github.com/mikel/mail

0 голосов
/ 24 октября 2019

Спасибо @ Casper

У меня есть следующий код, я получаю сообщение об ошибке "Нет такого файла или каталога". Он отображает правильное имя файла. Нужно ли мне сохранять вложение, прежде чем я смогу его прочитать? У меня уже есть электронная почта + вложение на диск.

  test "it parses emails" do
    contents = File.open("#{Rails.root}/test/fixtures/files/testmail", 'r')

    mail = Mail.read_from_string(contents.read)
    puts mail.to 
    puts mail.from
    puts mail.subject

    mail.attachments.each do | attachment |
      filename = attachment.filename
      puts filename 
      begin
        File.open(filename, 'r')
      rescue => exception
        puts "unable to open csv file baecause #{exception.message}"
      end
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...