Библиотека Ruby IMAP: Как я могу отображать все сообщения в папке?

#ruby #imap

Вопрос:

Мне нужен скрипт для извлечения всех моих электронных писем во всех моих папках и создания локальной резервной копии их вместе с вложениями.здесь, но это не приводит меня к дальнейшему перечислению всех писем, принадлежащих папке. Кроме того, чтение RFC не продвинет меня намного дальше.

Когда я выдал

 imap.list("", "*")
 

И

 imap.examine("SomeFolder")
 

Как я могу использовать это для перебора всех сообщений электронной почты SomeFolder ?

И как бы я в дальнейшем отправил запрос для получения сообщений, а также связанных вложений?

Комментарии:

1. Задача фрейма: уже существует множество инструментов резервного копирования imap, которые будут загружать все ваши сообщения в форме .EML. Есть ли причина, по которой вам нужно это переписать?

2. Как правило, вы просто хотите загрузить весь сегмент MIME для каждого сообщения с элементом выборки RFC822. Запишите это на диск.

Ответ №1:

Чтобы получить идентификаторы всех электронных писем в почтовом ящике, используйте imap.uid_search(["ALL"]) . Затем вы можете получить их все в формате RFC822 (.eml) (который включает их вложения) следующим образом:

 require "net/imap"
require "mail"

# initialize your imap object here
imap = Net::IMAP.new(...)
imap.login(...)

imap.list("", "*").map(amp;:name).each do |mailbox|
    imap.examine(mailbox)

    # Create directory for mailbox backup
    Dir.mkdir(mailbox) unless Dir.exist? mailbox

    uids = imap.uid_search(["ALL"])
    uids.each_with_index do |uid, i|
        # fetch the email in RFC822 format
        raw_email = imap.uid_fetch(uid, "RFC822").first.attr["RFC822"]

        # use the "mail" gem to parse the raw email and extract some useful info
        email = Mail.new(raw_email)
        puts "[#{i 1}/#{uids.length}] Saving email #{mailbox}/#{uid} (#{email.subject.inspect} from #{email.from.first} at #{email.date})"

        # save the email to a file
        File.write(File.join(mailbox, "#{uid}.eml"), raw_email)
    end
end
 

Комментарии:

1. Вау, большое вам спасибо за такой подробный ответ ! Это потрясающе. Не могу набрать достаточно голосов !

2. Знаете ли вы / не могли бы вы объяснить мне, как получить информацию о вложениях и как получить двоичные данные с сервера?

3. @vonspotz Вложения уже включены в файл EML. Вы можете извлечь их с помощью почтового драгоценного камня, как это .