##// END OF EJS Templates
Italian translation changed by Luca Colombini (#7851)...
Italian translation changed by Luca Colombini (#7851) git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11370 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r10727:00d16d07de69
r11140:afaab7d43fdb
Show More
rdm-mailhandler.rb
150 lines | 6.5 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
Changes ruby bang path to #!/usr/bin/env ruby (#1876)....
r2015 #!/usr/bin/env ruby
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570
require 'net/http'
require 'net/https'
require 'uri'
Jean-Philippe Lang
Use optparse instead rdoc/usage in rdm-mailhandler (#10837)....
r9467 require 'optparse'
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 module Net
class HTTPS < HTTP
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 def self.post_form(url, params, headers, options={})
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 request = Post.new(url.path)
request.form_data = params
request.basic_auth url.user, url.password if url.user
Jean-Philippe Lang
Adds a User-Agent header to Redmine mailhandler requests (#7318)....
r4605 request.initialize_http_header(headers)
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 http = new(url.host, url.port)
http.use_ssl = (url.scheme == 'https')
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 if options[:no_check_certificate]
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 http.start {|h| h.request(request) }
end
end
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 class RedmineMailHandler
Jean-Philippe Lang
Use optparse instead rdoc/usage in rdm-mailhandler (#10837)....
r9467 VERSION = '0.2'
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 attr_accessor :verbose, :issue_attributes, :allow_override, :unknown_user, :no_permission_check, :url, :key, :no_check_certificate
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570
def initialize
Jean-Philippe Lang
Mail handler: more control over issue attributes (#1110)....
r1629 self.issue_attributes = {}
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Use optparse instead rdoc/usage in rdm-mailhandler (#10837)....
r9467 optparse = OptionParser.new do |opts|
opts.banner = "Usage: rdm-mailhandler.rb [options] --url=<Redmine URL> --key=<API key>"
opts.separator("")
opts.separator("Reads an email from standard input and forward it to a Redmine server through a HTTP request.")
opts.separator("")
opts.separator("Required arguments:")
opts.on("-u", "--url URL", "URL of the Redmine server") {|v| self.url = v}
opts.on("-k", "--key KEY", "Redmine API key") {|v| self.key = v}
opts.separator("")
opts.separator("General options:")
opts.on("--unknown-user ACTION", "how to handle emails from an unknown user",
"ACTION can be one of the following values:",
"* ignore: email is ignored (default)",
"* accept: accept as anonymous user",
"* create: create a user account") {|v| self.unknown_user = v}
opts.on("--no-permission-check", "disable permission checking when receiving",
"the email") {self.no_permission_check = '1'}
opts.on("--key-file FILE", "path to a file that contains the Redmine",
"API key (use this option instead of --key",
"if you don't the key to appear in the",
"command line)") {|v| read_key_from_file(v)}
opts.on("--no-check-certificate", "do not check server certificate") {self.no_check_certificate = true}
opts.on("-h", "--help", "show this help") {puts opts; exit 1}
opts.on("-v", "--verbose", "show extra information") {self.verbose = true}
opts.on("-V", "--version", "show version information and exit") {puts VERSION; exit}
opts.separator("")
opts.separator("Issue attributes control options:")
opts.on("-p", "--project PROJECT", "identifier of the target project") {|v| self.issue_attributes['project'] = v}
opts.on("-s", "--status STATUS", "name of the target status") {|v| self.issue_attributes['status'] = v}
opts.on("-t", "--tracker TRACKER", "name of the target tracker") {|v| self.issue_attributes['tracker'] = v}
opts.on( "--category CATEGORY", "name of the target category") {|v| self.issue_attributes['category'] = v}
opts.on( "--priority PRIORITY", "name of the target priority") {|v| self.issue_attributes['priority'] = v}
opts.on("-o", "--allow-override ATTRS", "allow email content to override attributes",
"specified by previous options",
"ATTRS is a comma separated list of attributes") {|v| self.allow_override = v}
opts.separator("")
opts.separator("Examples:")
opts.separator("No project specified. Emails MUST contain the 'Project' keyword:")
opts.separator(" rdm-mailhandler.rb --url http://redmine.domain.foo --key secret")
opts.separator("")
opts.separator("Fixed project and default tracker specified, but emails can override")
opts.separator("both tracker and priority attributes using keywords:")
opts.separator(" rdm-mailhandler.rb --url https://domain.foo/redmine --key secret \\")
opts.separator(" --project foo \\")
opts.separator(" --tracker bug \\")
opts.separator(" --allow-override tracker,priority")
opts.summary_width = 27
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 end
Jean-Philippe Lang
Use optparse instead rdoc/usage in rdm-mailhandler (#10837)....
r9467 optparse.parse!
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Use optparse instead rdoc/usage in rdm-mailhandler (#10837)....
r9467 unless url && key
puts "Some arguments are missing. Use `rdm-mailhandler.rb --help` for getting help."
exit 1
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 end
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 def submit(email)
uri = url.gsub(%r{/*$}, '') + '/mail_handler'
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Adds a User-Agent header to Redmine mailhandler requests (#7318)....
r4605 headers = { 'User-Agent' => "Redmine mail handler/#{VERSION}" }
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
data = { 'key' => key, 'email' => email,
Jean-Philippe Lang
Ability to accept incoming emails from unknown users (#2230, #3003)....
r2689 'allow_override' => allow_override,
Jean-Philippe Lang
Adds a 'no_permission_check' option to the MailHandler....
r3081 'unknown_user' => unknown_user,
'no_permission_check' => no_permission_check}
Jean-Philippe Lang
Mail handler: more control over issue attributes (#1110)....
r1629 issue_attributes.each { |attr, value| data["issue[#{attr}]"] = value }
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 debug "Posting to #{uri}..."
Jean-Philippe Lang
MailHandler: exit with 75 when a SystemCallError is raised (#12528)....
r10727 begin
response = Net::HTTPS.post_form(URI.parse(uri), data, headers, :no_check_certificate => no_check_certificate)
rescue SystemCallError => e # connection refused, etc.
warn "An error occured while contacting your Redmine server: #{e.message}"
return 75 # temporary failure
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 debug "Response received: #{response.code}"
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Improve rdm-mailhandler exit status (#4368)....
r3029 case response.code.to_i
when 403
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158 warn "Request was denied by your Redmine server. " +
Jean-Philippe Lang
Improve rdm-mailhandler exit status (#4368)....
r3029 "Make sure that 'WS for incoming emails' is enabled in application settings and that you provided the correct API key."
return 77
when 422
warn "Request was denied by your Redmine server. " +
"Possible reasons: email is sent from an invalid email address or is missing some information."
return 77
when 400..499
warn "Request was denied by your Redmine server (#{response.code})."
return 77
when 500..599
warn "Failed to contact your Redmine server (#{response.code})."
return 75
when 201
debug "Proccessed successfully"
return 0
else
return 1
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 end
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 private
Toshi MARUYAMA
remove trailing white-spaces from extra/mail_handler/rdm-mailhandler.rb...
r9158
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 def debug(msg)
puts msg if verbose
end
Jean-Philippe Lang
Use optparse instead rdoc/usage in rdm-mailhandler (#10837)....
r9467
def read_key_from_file(filename)
begin
self.key = File.read(filename).strip
rescue Exception => e
$stderr.puts "Unable to read the key from #{filename}:\n#{e.message}"
exit 1
end
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 end
handler = RedmineMailHandler.new
Jean-Philippe Lang
Improve rdm-mailhandler exit status (#4368)....
r3029 exit(handler.submit(STDIN.read))