57 lines
1.3 KiB
Ruby
57 lines
1.3 KiB
Ruby
def process_popmail(popmail)
|
|
begin
|
|
mail_string = popmail.pop
|
|
Email::Receiver.new(mail_string).process
|
|
rescue
|
|
putc "!"
|
|
else
|
|
putc "."
|
|
end
|
|
end
|
|
|
|
desc "use this task to import a mailbox into Disourse"
|
|
task "emails:import" => :environment do
|
|
begin
|
|
unless SiteSetting.email_in
|
|
puts "ERROR: you should enable the 'email_in' site setting before running this task"
|
|
exit(1)
|
|
end
|
|
|
|
address = ENV["ADDRESS"].presence || "pop.gmail.com"
|
|
port = (ENV["PORT"].presence || 995).to_i
|
|
ssl = (ENV["SSL"].presence || "1") == "1"
|
|
username = ENV["USERNAME"].presence
|
|
password = ENV["PASSWORD"].presence
|
|
|
|
if username.blank?
|
|
puts "ERROR: expecting USERNAME=<username> rake emails:import"
|
|
exit(2)
|
|
elsif password.blank?
|
|
puts "ERROR: expecting PASSWORD=<password> rake emails:import"
|
|
exit(3)
|
|
end
|
|
|
|
RateLimiter.disable
|
|
|
|
mails_left = 1
|
|
pop3 = Net::POP3.new(address, port)
|
|
pop3.enable_ssl if ssl
|
|
|
|
while mails_left > 0
|
|
pop3.start(username, password) do |pop|
|
|
pop.delete_all do |p|
|
|
process_popmail(p)
|
|
end
|
|
mails_left = pop.n_mails
|
|
end
|
|
end
|
|
|
|
puts "Done"
|
|
rescue Net::POPAuthenticationError
|
|
puts "AUTH EXCEPTION: please make sure your credentials are correct."
|
|
exit(10)
|
|
ensure
|
|
RateLimiter.enable
|
|
end
|
|
end
|