#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. Вы можете извлечь их с помощью почтового драгоценного камня, как это .