@@ -0,0 +1,56 | |||||
|
1 | # Redmine - project management software | |||
|
2 | # Copyright (C) 2006-2010 Jean-Philippe Lang | |||
|
3 | # | |||
|
4 | # This program is free software; you can redistribute it and/or | |||
|
5 | # modify it under the terms of the GNU General Public License | |||
|
6 | # as published by the Free Software Foundation; either version 2 | |||
|
7 | # of the License, or (at your option) any later version. | |||
|
8 | # | |||
|
9 | # This program is distributed in the hope that it will be useful, | |||
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
|
12 | # GNU General Public License for more details. | |||
|
13 | # | |||
|
14 | # You should have received a copy of the GNU General Public License | |||
|
15 | # along with this program; if not, write to the Free Software | |||
|
16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
|
17 | ||||
|
18 | require 'net/pop' | |||
|
19 | ||||
|
20 | module Redmine | |||
|
21 | module POP3 | |||
|
22 | class << self | |||
|
23 | def check(pop_options={}, options={}) | |||
|
24 | host = pop_options[:host] || '127.0.0.1' | |||
|
25 | port = pop_options[:port] || '110' | |||
|
26 | apop = (pop_options[:apop].to_s == '1') | |||
|
27 | delete_unprocessed = (pop_options[:delete_unprocessed].to_s == '1') | |||
|
28 | ||||
|
29 | pop = Net::POP3.APOP(apop).new(host,port) | |||
|
30 | puts "Connecting to #{host}..." | |||
|
31 | pop.start(pop_options[:username], pop_options[:password]) do |pop_session| | |||
|
32 | if pop_session.mails.empty? | |||
|
33 | puts "No email to process" | |||
|
34 | else | |||
|
35 | puts "#{pop_session.mails.size} email(s) to process..." | |||
|
36 | pop_session.each_mail do |msg| | |||
|
37 | message = msg.pop | |||
|
38 | message_id = (message =~ /^Message-ID: (.*)/ ? $1 : '').strip | |||
|
39 | if MailHandler.receive(message, options) | |||
|
40 | msg.delete | |||
|
41 | puts "--> Message #{message_id} processed and deleted from the server" | |||
|
42 | else | |||
|
43 | if delete_unprocessed | |||
|
44 | msg.delete | |||
|
45 | puts "--> Message #{message_id} NOT processed and deleted from the server" | |||
|
46 | else | |||
|
47 | puts "--> Message #{message_id} NOT processed and left on the server" | |||
|
48 | end | |||
|
49 | end | |||
|
50 | end | |||
|
51 | end | |||
|
52 | end | |||
|
53 | end | |||
|
54 | end | |||
|
55 | end | |||
|
56 | end |
@@ -132,5 +132,38 END_DESC | |||||
132 |
|
132 | |||
133 | Redmine::IMAP.check(imap_options, options) |
|
133 | Redmine::IMAP.check(imap_options, options) | |
134 | end |
|
134 | end | |
|
135 | ||||
|
136 | desc <<-END_DESC | |||
|
137 | Read emails from an POP3 server. | |||
|
138 | ||||
|
139 | Available POP3 options: | |||
|
140 | host=HOST POP3 server host (default: 127.0.0.1) | |||
|
141 | port=PORT POP3 server port (default: 110) | |||
|
142 | username=USERNAME POP3 account | |||
|
143 | password=PASSWORD POP3 password | |||
|
144 | apop=1 use APOP authentication (default: false) | |||
|
145 | delete_unprocessed=1 delete messages that could not be processed | |||
|
146 | successfully from the server (default | |||
|
147 | behaviour is to leave them on the server) | |||
|
148 | ||||
|
149 | See redmine:email:receive_imap for more options and examples. | |||
|
150 | END_DESC | |||
|
151 | ||||
|
152 | task :receive_pop3 => :environment do | |||
|
153 | pop_options = {:host => ENV['host'], | |||
|
154 | :port => ENV['port'], | |||
|
155 | :apop => ENV['apop'], | |||
|
156 | :username => ENV['username'], | |||
|
157 | :password => ENV['password'], | |||
|
158 | :delete_unprocessed => ENV['delete_unprocessed']} | |||
|
159 | ||||
|
160 | options = { :issue => {} } | |||
|
161 | %w(project status tracker category priority).each { |a| options[:issue][a.to_sym] = ENV[a] if ENV[a] } | |||
|
162 | options[:allow_override] = ENV['allow_override'] if ENV['allow_override'] | |||
|
163 | options[:unknown_user] = ENV['unknown_user'] if ENV['unknown_user'] | |||
|
164 | options[:no_permission_check] = ENV['no_permission_check'] if ENV['no_permission_check'] | |||
|
165 | ||||
|
166 | Redmine::POP3.check(pop_options, options) | |||
|
167 | end | |||
135 | end |
|
168 | end | |
136 | end |
|
169 | end |
General Comments 0
You need to be logged in to leave comments.
Login now