mail_autoconfig 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. data/.yardopts +1 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +39 -0
  4. data/LICENSE.txt +25 -0
  5. data/README.md +57 -0
  6. data/Rakefile +11 -0
  7. data/doc/MailAutoconfig/ClientConfig.html +1353 -0
  8. data/doc/MailAutoconfig/EmailAddress.html +572 -0
  9. data/doc/MailAutoconfig/IncomingServer.html +154 -0
  10. data/doc/MailAutoconfig/OutgoingServer.html +154 -0
  11. data/doc/MailAutoconfig/Server.html +807 -0
  12. data/doc/MailAutoconfig.html +424 -0
  13. data/doc/_index.html +185 -0
  14. data/doc/class_list.html +54 -0
  15. data/doc/css/common.css +1 -0
  16. data/doc/css/full_list.css +57 -0
  17. data/doc/css/style.css +339 -0
  18. data/doc/file.README.html +135 -0
  19. data/doc/file_list.html +56 -0
  20. data/doc/frames.html +26 -0
  21. data/doc/index.html +135 -0
  22. data/doc/js/app.js +219 -0
  23. data/doc/js/full_list.js +178 -0
  24. data/doc/js/jquery.js +4 -0
  25. data/doc/method_list.html +227 -0
  26. data/doc/top-level-namespace.html +112 -0
  27. data/ispdb_data/1und1.de +65 -0
  28. data/ispdb_data/abc.plala.or.jp +24 -0
  29. data/ispdb_data/agate.plala.or.jp +24 -0
  30. data/ispdb_data/alice.it +30 -0
  31. data/ispdb_data/amail.plala.or.jp +24 -0
  32. data/ispdb_data/amber.plala.or.jp +24 -0
  33. data/ispdb_data/aol.com +45 -0
  34. data/ispdb_data/apost.plala.or.jp +24 -0
  35. data/ispdb_data/aqua.plala.or.jp +24 -0
  36. data/ispdb_data/arcor.de +57 -0
  37. data/ispdb_data/arubapec.it +34 -0
  38. data/ispdb_data/att.net +34 -0
  39. data/ispdb_data/ballade.plala.or.jp +24 -0
  40. data/ispdb_data/bay.wind.ne.jp +28 -0
  41. data/ispdb_data/bb-niigata.jp +22 -0
  42. data/ispdb_data/beige.plala.or.jp +24 -0
  43. data/ispdb_data/biglobe.ne.jp +23 -0
  44. data/ispdb_data/bigpond.com +28 -0
  45. data/ispdb_data/blue.plala.or.jp +24 -0
  46. data/ispdb_data/bluemail.ch +31 -0
  47. data/ispdb_data/bluewin.ch +30 -0
  48. data/ispdb_data/bmail.plala.or.jp +24 -0
  49. data/ispdb_data/bol.com.br +40 -0
  50. data/ispdb_data/bolero.plala.or.jp +24 -0
  51. data/ispdb_data/bpost.plala.or.jp +24 -0
  52. data/ispdb_data/broba.cc +25 -0
  53. data/ispdb_data/brown.plala.or.jp +24 -0
  54. data/ispdb_data/camel.plala.or.jp +24 -0
  55. data/ispdb_data/cameo.plala.or.jp +24 -0
  56. data/ispdb_data/cc9.ne.jp +21 -0
  57. data/ispdb_data/cek.ne.jp +21 -0
  58. data/ispdb_data/cgl.ucsf.edu +22 -0
  59. data/ispdb_data/charter.com +52 -0
  60. data/ispdb_data/clio.ne.jp +22 -0
  61. data/ispdb_data/cmail.plala.or.jp +24 -0
  62. data/ispdb_data/co1.wind.ne.jp +25 -0
  63. data/ispdb_data/co2.wind.ne.jp +25 -0
  64. data/ispdb_data/co3.wind.ne.jp +25 -0
  65. data/ispdb_data/cocoa.plala.or.jp +24 -0
  66. data/ispdb_data/coda.plala.or.jp +24 -0
  67. data/ispdb_data/comcast.net +57 -0
  68. data/ispdb_data/concerto.plala.or.jp +24 -0
  69. data/ispdb_data/coral.plala.or.jp +24 -0
  70. data/ispdb_data/courante.plala.or.jp +24 -0
  71. data/ispdb_data/cox.net +36 -0
  72. data/ispdb_data/cpost.plala.or.jp +24 -0
  73. data/ispdb_data/cream.plala.or.jp +24 -0
  74. data/ispdb_data/dan.wind.ne.jp +28 -0
  75. data/ispdb_data/dance.plala.or.jp +24 -0
  76. data/ispdb_data/dd.iij4u.or.jp +33 -0
  77. data/ispdb_data/df.eu +33 -0
  78. data/ispdb_data/dmail.plala.or.jp +24 -0
  79. data/ispdb_data/earthlink.net +35 -0
  80. data/ispdb_data/ebony.plala.or.jp +24 -0
  81. data/ispdb_data/email.it +33 -0
  82. data/ispdb_data/email.plala.or.jp +24 -0
  83. data/ispdb_data/ewetel.de +23 -0
  84. data/ispdb_data/fantasy.plala.or.jp +24 -0
  85. data/ispdb_data/flamenco.plala.or.jp +24 -0
  86. data/ispdb_data/fmail.plala.or.jp +24 -0
  87. data/ispdb_data/francetelecom.fr +31 -0
  88. data/ispdb_data/free.fr +62 -0
  89. data/ispdb_data/freenet.de +56 -0
  90. data/ispdb_data/fuga.plala.or.jp +24 -0
  91. data/ispdb_data/gandi.net +58 -0
  92. data/ispdb_data/gmail.plala.or.jp +24 -0
  93. data/ispdb_data/gmx.com +72 -0
  94. data/ispdb_data/gmx.net +66 -0
  95. data/ispdb_data/go.tvm.ne.jp +22 -0
  96. data/ispdb_data/goneo.de +56 -0
  97. data/ispdb_data/goo.jp +22 -0
  98. data/ispdb_data/googlemail.com +52 -0
  99. data/ispdb_data/grape.plala.or.jp +24 -0
  100. data/ispdb_data/gray.plala.or.jp +24 -0
  101. data/ispdb_data/hal.ne.jp +22 -0
  102. data/ispdb_data/hana.or.jp +22 -0
  103. data/ispdb_data/hotmail.com +58 -0
  104. data/ispdb_data/i.softbank.jp +22 -0
  105. data/ispdb_data/ic-net.or.jp +22 -0
  106. data/ispdb_data/iijmio-mail.jp +26 -0
  107. data/ispdb_data/iiyama-catv.ne.jp +21 -0
  108. data/ispdb_data/imail.plala.or.jp +24 -0
  109. data/ispdb_data/inbox.lt +26 -0
  110. data/ispdb_data/inbox.lv +26 -0
  111. data/ispdb_data/indigo.plala.or.jp +24 -0
  112. data/ispdb_data/inet-shibata.or.jp +22 -0
  113. data/ispdb_data/internode.on.net +32 -0
  114. data/ispdb_data/ipax.at +28 -0
  115. data/ispdb_data/ivory.plala.or.jp +24 -0
  116. data/ispdb_data/iwafune.ne.jp +22 -0
  117. data/ispdb_data/jade.plala.or.jp +24 -0
  118. data/ispdb_data/janis.or.jp +23 -0
  119. data/ispdb_data/jet.ne.jp +29 -0
  120. data/ispdb_data/ji.jet.ne.jp +22 -0
  121. data/ispdb_data/jmail.plala.or.jp +24 -0
  122. data/ispdb_data/kabelmail.de +31 -0
  123. data/ispdb_data/kelcom.net +21 -0
  124. data/ispdb_data/khaki.plala.or.jp +24 -0
  125. data/ispdb_data/kl.wind.ne.jp +32 -0
  126. data/ispdb_data/kmail.plala.or.jp +24 -0
  127. data/ispdb_data/kokuyou.ne.jp +21 -0
  128. data/ispdb_data/lapis.plala.or.jp +24 -0
  129. data/ispdb_data/laposte.net +37 -0
  130. data/ispdb_data/lemon.plala.or.jp +24 -0
  131. data/ispdb_data/libero.it +34 -0
  132. data/ispdb_data/lilac.plala.or.jp +24 -0
  133. data/ispdb_data/lime.plala.or.jp +24 -0
  134. data/ispdb_data/mahoroba.ne.jp +22 -0
  135. data/ispdb_data/mail.com +248 -0
  136. data/ispdb_data/mail.dk +22 -0
  137. data/ispdb_data/mail.iwafune.ne.jp +22 -0
  138. data/ispdb_data/mail.ru +57 -0
  139. data/ispdb_data/mail.telenor.dk +121 -0
  140. data/ispdb_data/mail.wind.ne.jp +29 -0
  141. data/ispdb_data/maroon.plala.or.jp +24 -0
  142. data/ispdb_data/me.com +31 -0
  143. data/ispdb_data/minuet.plala.or.jp +24 -0
  144. data/ispdb_data/ml.murakami.ne.jp +22 -0
  145. data/ispdb_data/mnet.ne.jp +22 -0
  146. data/ispdb_data/mopera.net +50 -0
  147. data/ispdb_data/mozilla.com +23 -0
  148. data/ispdb_data/mx1.tiki.ne.jp +54 -0
  149. data/ispdb_data/navy.plala.or.jp +24 -0
  150. data/ispdb_data/nifty.com +22 -0
  151. data/ispdb_data/nsat.jp +22 -0
  152. data/ispdb_data/o2.pl +35 -0
  153. data/ispdb_data/olive.plala.or.jp +24 -0
  154. data/ispdb_data/onet.pl +38 -0
  155. data/ispdb_data/opal.plala.or.jp +24 -0
  156. data/ispdb_data/orange.plala.or.jp +24 -0
  157. data/ispdb_data/orchid.plala.or.jp +24 -0
  158. data/ispdb_data/ovh.net +32 -0
  159. data/ispdb_data/pal.kijimadaira.jp +21 -0
  160. data/ispdb_data/palette.plala.or.jp +24 -0
  161. data/ispdb_data/parabox.or.jp +22 -0
  162. data/ispdb_data/pdx.edu +41 -0
  163. data/ispdb_data/peach.plala.or.jp +24 -0
  164. data/ispdb_data/peoplepc.com +29 -0
  165. data/ispdb_data/plum.plala.or.jp +24 -0
  166. data/ispdb_data/po.dcn.ne.jp +21 -0
  167. data/ispdb_data/po.wind.ne.jp +28 -0
  168. data/ispdb_data/pobox.com +53 -0
  169. data/ispdb_data/polka.plala.or.jp +24 -0
  170. data/ispdb_data/pop.shibata.ne.jp +23 -0
  171. data/ispdb_data/posteo.de +25 -0
  172. data/ispdb_data/purple.plala.or.jp +24 -0
  173. data/ispdb_data/rainbow.plala.or.jp +24 -0
  174. data/ispdb_data/rambler.ru +35 -0
  175. data/ispdb_data/red.plala.or.jp +24 -0
  176. data/ispdb_data/rmail.plala.or.jp +24 -0
  177. data/ispdb_data/rondo.plala.or.jp +24 -0
  178. data/ispdb_data/rose.plala.or.jp +24 -0
  179. data/ispdb_data/rouge.plala.or.jp +24 -0
  180. data/ispdb_data/rr.com +25 -0
  181. data/ispdb_data/ruby.plala.or.jp +24 -0
  182. data/ispdb_data/sakunet.ne.jp +21 -0
  183. data/ispdb_data/sea.plala.or.jp +24 -0
  184. data/ispdb_data/sepia.plala.or.jp +24 -0
  185. data/ispdb_data/serenade.plala.or.jp +24 -0
  186. data/ispdb_data/seznam.cz +26 -0
  187. data/ispdb_data/sfr.fr +36 -0
  188. data/ispdb_data/silk.plala.or.jp +24 -0
  189. data/ispdb_data/silver.plala.or.jp +24 -0
  190. data/ispdb_data/sky.plala.or.jp +24 -0
  191. data/ispdb_data/skynet.be +35 -0
  192. data/ispdb_data/smail.plala.or.jp +24 -0
  193. data/ispdb_data/snow.plala.or.jp +24 -0
  194. data/ispdb_data/so.wind.ne.jp +25 -0
  195. data/ispdb_data/sonata.plala.or.jp +24 -0
  196. data/ispdb_data/strato.de +43 -0
  197. data/ispdb_data/studenti.univr.it +22 -0
  198. data/ispdb_data/suite.plala.or.jp +24 -0
  199. data/ispdb_data/sympatico.ca +30 -0
  200. data/ispdb_data/symphony.plala.or.jp +24 -0
  201. data/ispdb_data/t-online.de +37 -0
  202. data/ispdb_data/taupe.plala.or.jp +24 -0
  203. data/ispdb_data/terra.es +29 -0
  204. data/ispdb_data/tiki.ne.jp +24 -0
  205. data/ispdb_data/tiscali.cz +25 -0
  206. data/ispdb_data/tiscali.it +31 -0
  207. data/ispdb_data/tmail.plala.or.jp +24 -0
  208. data/ispdb_data/toccata.plala.or.jp +24 -0
  209. data/ispdb_data/topaz.plala.or.jp +24 -0
  210. data/ispdb_data/trio.plala.or.jp +24 -0
  211. data/ispdb_data/umail.plala.or.jp +24 -0
  212. data/ispdb_data/umich.edu +22 -0
  213. data/ispdb_data/uol.com.br +42 -0
  214. data/ispdb_data/upcmail.nl +23 -0
  215. data/ispdb_data/verizon.net +21 -0
  216. data/ispdb_data/versatel.de +43 -0
  217. data/ispdb_data/violet.plala.or.jp +24 -0
  218. data/ispdb_data/vm.aikis.or.jp +22 -0
  219. data/ispdb_data/vmail.plala.or.jp +24 -0
  220. data/ispdb_data/vp.tiki.ne.jp +24 -0
  221. data/ispdb_data/waltz.plala.or.jp +24 -0
  222. data/ispdb_data/wave.plala.or.jp +24 -0
  223. data/ispdb_data/web.de +55 -0
  224. data/ispdb_data/white.plala.or.jp +24 -0
  225. data/ispdb_data/wildwestdomains.com +37 -0
  226. data/ispdb_data/wine.plala.or.jp +24 -0
  227. data/ispdb_data/wmail.plala.or.jp +24 -0
  228. data/ispdb_data/wp.pl +22 -0
  229. data/ispdb_data/xmail.plala.or.jp +24 -0
  230. data/ispdb_data/xp.wind.jp +24 -0
  231. data/ispdb_data/xpost.plala.or.jp +24 -0
  232. data/ispdb_data/xs4all.nl +22 -0
  233. data/ispdb_data/xtra.co.nz +22 -0
  234. data/ispdb_data/yahoo.co.jp +22 -0
  235. data/ispdb_data/yahoo.com +41 -0
  236. data/ispdb_data/yandex.ru +39 -0
  237. data/ispdb_data/ybb.ne.jp +22 -0
  238. data/ispdb_data/yellow.plala.or.jp +24 -0
  239. data/ispdb_data/ymail.plala.or.jp +24 -0
  240. data/ispdb_data/ypost.plala.or.jp +24 -0
  241. data/ispdb_data/ziggo.nl +25 -0
  242. data/ispdb_data/zmail.plala.or.jp +24 -0
  243. data/ispdb_data/zpost.plala.or.jp +24 -0
  244. data/lib/mail_autoconfig/client_config.rb +118 -0
  245. data/lib/mail_autoconfig/email_address.rb +53 -0
  246. data/lib/mail_autoconfig/server.rb +73 -0
  247. data/lib/mail_autoconfig/version.rb +4 -0
  248. data/lib/mail_autoconfig.rb +35 -0
  249. data/mail_autoconfig.gemspec +27 -0
  250. data/spec/client_config_spec.rb +50 -0
  251. data/spec/email_address_spec.rb +42 -0
  252. data/spec/examples/client_config_yahoo.xml +40 -0
  253. data/spec/server_spec.rb +84 -0
  254. metadata +416 -0
@@ -0,0 +1,53 @@
1
+ module MailAutoconfig
2
+
3
+ # Email address that we're going to investigate
4
+ class EmailAddress
5
+ attr_reader :address
6
+
7
+ # @param address [String] the email address to look up
8
+ def initialize(address)
9
+ @address = address
10
+ end
11
+
12
+ # Fetch the client configuration for this email address.
13
+ # First of all try the domain determined by {#domain}. If nothing is found there,
14
+ # check the domain specified in {#primary_mx_domain}. Returns false if none found.
15
+ # @return [MailAutoconfig::ClientConfig] the client configuration for this address
16
+ def client_config
17
+ @client_config ||= begin
18
+ config = MailAutoconfig::ClientConfig.search(domain)
19
+ config ||= MailAutoconfig::ClientConfig.search(primary_mx_domain)
20
+ config.email_address = self if config
21
+ config
22
+ end
23
+ end
24
+
25
+ # The local part of the emai address (before the @ symbol).
26
+ # Useful for usage with the %EMAILLOCALPART% substitution.
27
+ # @return [String] the local part of the email address
28
+ def local_part
29
+ @local_part ||= @address.split('@', 2).first
30
+ end
31
+
32
+ # The domain of the email address (the part after the @ symbol)
33
+ # @return [String] the domain of the email address
34
+ def domain
35
+ @domain ||= @address.split('@', 2).last
36
+ end
37
+
38
+ # Finds the primary MX domain for this address. Would change gmail-smtp-in.l.google.com to google.com
39
+ # @return [String] the domain of the pimary MX record for this address
40
+ def primary_mx_domain
41
+ @primary_mx_domain ||= mx_records.first.split(".")[-2..-1].join(".") # Not very nice to 2nd level domains
42
+ end
43
+
44
+ private
45
+
46
+ # Finds MX records for the associated email address, ordered by preference.
47
+ # @return [Array] MX records for this email address
48
+ def mx_records
49
+ @mx_records ||= Resolv::DNS.open.getresources(domain, Resolv::DNS::Resource::IN::MX).sort_by(&:preference).map{ |r| r.exchange.to_s }
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,73 @@
1
+ module MailAutoconfig
2
+
3
+ # Superclass for {IncomingServer} and {OutgoingServer}.
4
+ # Never used directly.
5
+ class Server
6
+ attr_reader :config
7
+ attr_reader :client_config
8
+
9
+ # @param config [Nokogiri::XML::Node] an XML representation of this server
10
+ def initialize(config, client_config)
11
+ @config = config
12
+ @client_config = client_config
13
+ end
14
+
15
+ # Returns the protocol of the mail server e.g. `smtp`, `pop3`, `imap`
16
+ # @return [String] The protocol for the server
17
+ def protocol
18
+ @protocol ||= config.attr('type')
19
+ end
20
+
21
+ # @return [String] The hostname for this server
22
+ def hostname
23
+ @hostname ||= config.xpath('hostname').first.content
24
+ end
25
+
26
+ # @return [Integer] The port to connect ot this server on
27
+ def port
28
+ @port ||= config.xpath('port').first.content.to_i
29
+ end
30
+
31
+ # The connection type for this server. `plain`, `STARTTLS`, `SSL` are acceptable
32
+ # @return [String] The connection type
33
+ def socket_type
34
+ @socket_type ||= config.xpath('socketType').first.content
35
+ end
36
+
37
+ # The username for this mailbox, combines {username_format} and [EmailAddress] details
38
+ # @return [String] The username
39
+ def username
40
+ @username ||= begin
41
+ name = username_format
42
+ name.gsub! '%EMAILADDRESS%', client_config.email_address.address
43
+ name.gsub! '%EMAILLOCALPART%', client_config.email_address.local_part
44
+ name.gsub! '%EMAILDOMAIN%', client_config.email_address.domain
45
+ name
46
+ end
47
+ end
48
+
49
+ # Return the username format for this server. There are substitutions that can be made.
50
+ #
51
+ # * `%EMAILADDRESS%` - full email address of the user, usually entered by the user
52
+ # * `%EMAILLOCALPART%` - email address, part before @
53
+ # * `%EMAILDOMAIN%` - email address, part after @
54
+ #
55
+ # @return [String] the username format
56
+ def username_format
57
+ @username_format ||= config.xpath('username').first.content
58
+ end
59
+
60
+ # The authentication type for this server. Valid responses:
61
+ # `password-cleartext`, `NTLM`, `GSSAPI`, `client-IP-address`, `TLS-client-cert`, `none`
62
+ # @return [String] the authentication method for this server
63
+ def authentication
64
+ @authentication ||= config.xpath('authentication').first.content
65
+ end
66
+ end
67
+
68
+ # Configuration details for an incoming server.
69
+ class IncomingServer < Server; end
70
+
71
+ # Configuration details for an outgoing server.
72
+ class OutgoingServer < Server; end
73
+ end
@@ -0,0 +1,4 @@
1
+ module MailAutoconfig
2
+ # The version
3
+ VERSION = "0.0.1"
4
+ end
@@ -0,0 +1,35 @@
1
+ require 'nokogiri'
2
+ require 'faraday'
3
+ require 'resolv'
4
+
5
+ require "mail_autoconfig/version"
6
+ require "mail_autoconfig/client_config"
7
+ require "mail_autoconfig/server"
8
+ require "mail_autoconfig/email_address"
9
+
10
+ # Module to lookup mailbox autoconfiguration according to Thunderbird
11
+ # spec (https://wiki.mozilla.org/Thunderbird:Autoconfiguration:ConfigFileFormat)
12
+ # and guidelines (https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Autoconfiguration)
13
+ module MailAutoconfig
14
+
15
+ # The path for the locally stored Thunderbird ISPDB configurations
16
+ # @return [String] absolute path to the ispdb data directory
17
+ def self.local_ispdb_path
18
+ File.expand_path(File.join(__FILE__, "../", "../", "ispdb_data"))
19
+ end
20
+
21
+ # The URL to the canonical SVN repository containing the Thunderbird IPSDB
22
+ # @return [String] SVN repository location
23
+ def self.ispdb_svn_url
24
+ "http://svn.mozilla.org/mozillamessaging.com/sites/autoconfig.mozillamessaging.com/trunk"
25
+ end
26
+
27
+ # Fetch the client configuration for a given email address, if any.
28
+ # Returns false if none found.
29
+ # @param email [String] the email address to lookup
30
+ # @return [MailAutoconfig::ClientConfig]
31
+ def self.for_address(email)
32
+ MailAutoconfig::EmailAddress.new(email).client_config
33
+ end
34
+
35
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mail_autoconfig/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mail_autoconfig"
8
+ spec.version = MailAutoconfig::VERSION
9
+ spec.authors = ["Dan Wentworth"]
10
+ spec.email = ["dan@atechmedia.com"]
11
+ spec.summary = %q{Determine configuration details for a mailbox using Mozilla's ISPDB}
12
+ spec.homepage = ""
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "nokogiri", "~> 1.6"
21
+ spec.add_dependency "faraday"
22
+ spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency 'rspec', '~> 2.14'
25
+ spec.add_development_dependency 'yard'
26
+ spec.add_development_dependency 'redcarpet'
27
+ end
@@ -0,0 +1,50 @@
1
+ require 'mail_autoconfig'
2
+
3
+ describe MailAutoconfig::ClientConfig do
4
+
5
+ context "from static config" do
6
+ let(:client_config) { MailAutoconfig::ClientConfig.from_file(File.expand_path(File.join(__FILE__, '../', 'examples', 'client_config_yahoo.xml'))) }
7
+
8
+ it "reads a service name" do
9
+ expect(client_config.name).to eq("Yahoo! Mail")
10
+ end
11
+
12
+ it "reads a short name" do
13
+ expect(client_config.short_name).to eq("Yahoo")
14
+ end
15
+
16
+ it "reads provider id" do
17
+ expect(client_config.provider_id).to eq("yahoo.com")
18
+ end
19
+
20
+ it "reads domain aliases" do
21
+ expect(client_config.domains).to include('yahoo.com', 'yahoo.co.uk')
22
+ end
23
+
24
+ it 'matches valid domains' do
25
+ expect(client_config.valid_for_domain?('yahoo.it')).to be(true)
26
+ end
27
+
28
+ it "doesn't match invalid domains" do
29
+ expect(client_config.valid_for_domain?('googlemail.com')).to be(false)
30
+ end
31
+
32
+ end
33
+
34
+
35
+ context "automatically detects domains" do
36
+ it "from local files" do
37
+ expect(MailAutoconfig::ClientConfig.search_local_files("googlemail.com")).to be_a(MailAutoconfig::ClientConfig)
38
+ end
39
+
40
+ it "from local files with an alias domain" do
41
+ expect(MailAutoconfig::ClientConfig.search_local_files("gmail.com")).to be_a(MailAutoconfig::ClientConfig)
42
+ end
43
+
44
+ it "from an autoconfig domain" do
45
+ expect(MailAutoconfig::ClientConfig.search_autoconfig_domain("swcp.com")).to be_a(MailAutoconfig::ClientConfig)
46
+ end
47
+ end
48
+
49
+
50
+ end
@@ -0,0 +1,42 @@
1
+ require 'mail_autoconfig'
2
+
3
+ describe MailAutoconfig::EmailAddress do
4
+
5
+ context 'example@gmail.com' do
6
+ let(:address) { MailAutoconfig::EmailAddress.new('example@gmail.com') }
7
+
8
+ it 'should have a gmail domain' do
9
+ expect(address.domain).to eq('gmail.com')
10
+ end
11
+
12
+ it 'should have a local part' do
13
+ expect(address.local_part).to eq('example')
14
+ end
15
+
16
+ it 'should have gmail MX domains' do
17
+ expect(address.primary_mx_domain).to eq("google.com")
18
+ end
19
+
20
+ it 'should have a client config' do
21
+ expect(address.client_config).to be_a(MailAutoconfig::ClientConfig)
22
+ end
23
+
24
+ it 'should have GMail as client config provider short name' do
25
+ expect(address.client_config.short_name).to eq('GMail')
26
+ end
27
+ end
28
+
29
+ context 'example@atechmedia.com' do
30
+ let(:address) { MailAutoconfig::EmailAddress.new('example@atechmedia.com') }
31
+ it 'should not have a detectable configuration' do
32
+ expect(address.client_config).to be_false
33
+ end
34
+ end
35
+
36
+ context 'example@swcp.com' do
37
+ let(:address) { MailAutoconfig::EmailAddress.new('example@swcp.com') }
38
+ it 'should have an autoconf configuration' do
39
+ expect(address.client_config).to be_a(MailAutoconfig::ClientConfig)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,40 @@
1
+ <clientConfig version="1.1">
2
+ <emailProvider id="yahoo.com">
3
+ <domain>yahoo.com</domain>
4
+ <domain>yahoo.de</domain>
5
+ <domain>yahoo.it</domain>
6
+ <domain>yahoo.fr</domain>
7
+ <domain>yahoo.es</domain>
8
+ <domain>yahoo.co.uk</domain>
9
+ <domain>yahoo.co.nz</domain>
10
+ <domain>yahoo.com.au</domain>
11
+ <domain>yahoo.com.ar</domain>
12
+ <domain>yahoo.com.br</domain>
13
+ <domain>yahoo.com.mx</domain>
14
+ <domain>ymail.com</domain>
15
+ <domain>rocketmail.com</domain>
16
+ <displayName>Yahoo! Mail</displayName>
17
+ <displayShortName>Yahoo</displayShortName>
18
+ <incomingServer type="pop3">
19
+ <hostname>pop.mail.yahoo.com</hostname>
20
+ <port>995</port>
21
+ <socketType>SSL</socketType>
22
+ <username>%EMAILADDRESS%</username>
23
+ <authentication>password-cleartext</authentication>
24
+ </incomingServer>
25
+ <incomingServer type="imap">
26
+ <hostname>imap.mail.yahoo.com</hostname>
27
+ <port>993</port>
28
+ <socketType>SSL</socketType>
29
+ <username>%EMAILADDRESS%</username>
30
+ <authentication>password-cleartext</authentication>
31
+ </incomingServer>
32
+ <outgoingServer type="smtp">
33
+ <hostname>smtp.mail.yahoo.com</hostname>
34
+ <port>465</port>
35
+ <socketType>SSL</socketType>
36
+ <username>%EMAILADDRESS%</username>
37
+ <authentication>password-cleartext</authentication>
38
+ </outgoingServer>
39
+ </emailProvider>
40
+ </clientConfig>
@@ -0,0 +1,84 @@
1
+ require 'mail_autoconfig'
2
+
3
+ describe MailAutoconfig::Server do
4
+
5
+ context "static config" do
6
+ let(:client_config) { MailAutoconfig::ClientConfig.from_file(File.expand_path(File.join(__FILE__, '../', 'examples', 'client_config_yahoo.xml'))) }
7
+
8
+ context "from incoming_server" do
9
+ let(:server) { client_config.incoming_servers.first }
10
+
11
+ it "is an incoming server" do
12
+ expect(server).to be_a(MailAutoconfig::IncomingServer)
13
+ end
14
+
15
+ it "is a pop3 server" do
16
+ expect(server.protocol).to eq('pop3')
17
+ end
18
+
19
+ it "has a hostname" do
20
+ expect(server.hostname).to eq('pop.mail.yahoo.com')
21
+ end
22
+
23
+ it "has a port" do
24
+ expect(server.port).to eq(995)
25
+ end
26
+
27
+ it "has a socket type" do
28
+ expect(server.socket_type).to eq('SSL')
29
+ end
30
+
31
+ it "has a username format" do
32
+ expect(server.username_format).to eq('%EMAILADDRESS%')
33
+ end
34
+
35
+ it "can process a username from the format" do
36
+ client_config.email_address = MailAutoconfig::EmailAddress.new('example@gmail.com')
37
+ expect(server.username).to eq('example@gmail.com')
38
+ end
39
+
40
+ it "has an authentication method" do
41
+ expect(server.authentication).to eq('password-cleartext')
42
+ end
43
+ end
44
+
45
+ context "from outgoing server" do
46
+ let(:server) { client_config.outgoing_servers.first }
47
+
48
+ it "is an outgoing server" do
49
+ expect(server).to be_a(MailAutoconfig::OutgoingServer)
50
+ end
51
+
52
+ it "is an smtp server" do
53
+ expect(server.protocol).to eq('smtp')
54
+ end
55
+
56
+ it "has a hostname" do
57
+ expect(server.hostname).to eq('smtp.mail.yahoo.com')
58
+ end
59
+
60
+ it "has a port" do
61
+ expect(server.port).to eq(465)
62
+ end
63
+
64
+ it "has a socket type" do
65
+ expect(server.socket_type).to eq('SSL')
66
+ end
67
+
68
+ it "has a username format" do
69
+ expect(server.username_format).to eq('%EMAILADDRESS%')
70
+ end
71
+
72
+ it "can process a username from the format" do
73
+ client_config.email_address = MailAutoconfig::EmailAddress.new('example@gmail.com')
74
+ expect(server.username).to eq('example@gmail.com')
75
+ end
76
+
77
+ it "has an authentication method" do
78
+ expect(server.authentication).to eq('password-cleartext')
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
metadata ADDED
@@ -0,0 +1,416 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mail_autoconfig
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dan Wentworth
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-04-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.6'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.6'
30
+ - !ruby/object:Gem::Dependency
31
+ name: faraday
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.5'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.5'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '2.14'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '2.14'
94
+ - !ruby/object:Gem::Dependency
95
+ name: yard
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: redcarpet
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description:
127
+ email:
128
+ - dan@atechmedia.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .yardopts
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.md
138
+ - Rakefile
139
+ - doc/MailAutoconfig.html
140
+ - doc/MailAutoconfig/ClientConfig.html
141
+ - doc/MailAutoconfig/EmailAddress.html
142
+ - doc/MailAutoconfig/IncomingServer.html
143
+ - doc/MailAutoconfig/OutgoingServer.html
144
+ - doc/MailAutoconfig/Server.html
145
+ - doc/_index.html
146
+ - doc/class_list.html
147
+ - doc/css/common.css
148
+ - doc/css/full_list.css
149
+ - doc/css/style.css
150
+ - doc/file.README.html
151
+ - doc/file_list.html
152
+ - doc/frames.html
153
+ - doc/index.html
154
+ - doc/js/app.js
155
+ - doc/js/full_list.js
156
+ - doc/js/jquery.js
157
+ - doc/method_list.html
158
+ - doc/top-level-namespace.html
159
+ - ispdb_data/1und1.de
160
+ - ispdb_data/abc.plala.or.jp
161
+ - ispdb_data/agate.plala.or.jp
162
+ - ispdb_data/alice.it
163
+ - ispdb_data/amail.plala.or.jp
164
+ - ispdb_data/amber.plala.or.jp
165
+ - ispdb_data/aol.com
166
+ - ispdb_data/apost.plala.or.jp
167
+ - ispdb_data/aqua.plala.or.jp
168
+ - ispdb_data/arcor.de
169
+ - ispdb_data/arubapec.it
170
+ - ispdb_data/att.net
171
+ - ispdb_data/ballade.plala.or.jp
172
+ - ispdb_data/bay.wind.ne.jp
173
+ - ispdb_data/bb-niigata.jp
174
+ - ispdb_data/beige.plala.or.jp
175
+ - ispdb_data/biglobe.ne.jp
176
+ - ispdb_data/bigpond.com
177
+ - ispdb_data/blue.plala.or.jp
178
+ - ispdb_data/bluemail.ch
179
+ - ispdb_data/bluewin.ch
180
+ - ispdb_data/bmail.plala.or.jp
181
+ - ispdb_data/bol.com.br
182
+ - ispdb_data/bolero.plala.or.jp
183
+ - ispdb_data/bpost.plala.or.jp
184
+ - ispdb_data/broba.cc
185
+ - ispdb_data/brown.plala.or.jp
186
+ - ispdb_data/camel.plala.or.jp
187
+ - ispdb_data/cameo.plala.or.jp
188
+ - ispdb_data/cc9.ne.jp
189
+ - ispdb_data/cek.ne.jp
190
+ - ispdb_data/cgl.ucsf.edu
191
+ - ispdb_data/charter.com
192
+ - ispdb_data/clio.ne.jp
193
+ - ispdb_data/cmail.plala.or.jp
194
+ - ispdb_data/co1.wind.ne.jp
195
+ - ispdb_data/co2.wind.ne.jp
196
+ - ispdb_data/co3.wind.ne.jp
197
+ - ispdb_data/cocoa.plala.or.jp
198
+ - ispdb_data/coda.plala.or.jp
199
+ - ispdb_data/comcast.net
200
+ - ispdb_data/concerto.plala.or.jp
201
+ - ispdb_data/coral.plala.or.jp
202
+ - ispdb_data/courante.plala.or.jp
203
+ - ispdb_data/cox.net
204
+ - ispdb_data/cpost.plala.or.jp
205
+ - ispdb_data/cream.plala.or.jp
206
+ - ispdb_data/dan.wind.ne.jp
207
+ - ispdb_data/dance.plala.or.jp
208
+ - ispdb_data/dd.iij4u.or.jp
209
+ - ispdb_data/df.eu
210
+ - ispdb_data/dmail.plala.or.jp
211
+ - ispdb_data/earthlink.net
212
+ - ispdb_data/ebony.plala.or.jp
213
+ - ispdb_data/email.it
214
+ - ispdb_data/email.plala.or.jp
215
+ - ispdb_data/ewetel.de
216
+ - ispdb_data/fantasy.plala.or.jp
217
+ - ispdb_data/flamenco.plala.or.jp
218
+ - ispdb_data/fmail.plala.or.jp
219
+ - ispdb_data/francetelecom.fr
220
+ - ispdb_data/free.fr
221
+ - ispdb_data/freenet.de
222
+ - ispdb_data/fuga.plala.or.jp
223
+ - ispdb_data/gandi.net
224
+ - ispdb_data/gmail.plala.or.jp
225
+ - ispdb_data/gmx.com
226
+ - ispdb_data/gmx.net
227
+ - ispdb_data/go.tvm.ne.jp
228
+ - ispdb_data/goneo.de
229
+ - ispdb_data/goo.jp
230
+ - ispdb_data/googlemail.com
231
+ - ispdb_data/grape.plala.or.jp
232
+ - ispdb_data/gray.plala.or.jp
233
+ - ispdb_data/hal.ne.jp
234
+ - ispdb_data/hana.or.jp
235
+ - ispdb_data/hotmail.com
236
+ - ispdb_data/i.softbank.jp
237
+ - ispdb_data/ic-net.or.jp
238
+ - ispdb_data/iijmio-mail.jp
239
+ - ispdb_data/iiyama-catv.ne.jp
240
+ - ispdb_data/imail.plala.or.jp
241
+ - ispdb_data/inbox.lt
242
+ - ispdb_data/inbox.lv
243
+ - ispdb_data/indigo.plala.or.jp
244
+ - ispdb_data/inet-shibata.or.jp
245
+ - ispdb_data/internode.on.net
246
+ - ispdb_data/ipax.at
247
+ - ispdb_data/ivory.plala.or.jp
248
+ - ispdb_data/iwafune.ne.jp
249
+ - ispdb_data/jade.plala.or.jp
250
+ - ispdb_data/janis.or.jp
251
+ - ispdb_data/jet.ne.jp
252
+ - ispdb_data/ji.jet.ne.jp
253
+ - ispdb_data/jmail.plala.or.jp
254
+ - ispdb_data/kabelmail.de
255
+ - ispdb_data/kelcom.net
256
+ - ispdb_data/khaki.plala.or.jp
257
+ - ispdb_data/kl.wind.ne.jp
258
+ - ispdb_data/kmail.plala.or.jp
259
+ - ispdb_data/kokuyou.ne.jp
260
+ - ispdb_data/lapis.plala.or.jp
261
+ - ispdb_data/laposte.net
262
+ - ispdb_data/lemon.plala.or.jp
263
+ - ispdb_data/libero.it
264
+ - ispdb_data/lilac.plala.or.jp
265
+ - ispdb_data/lime.plala.or.jp
266
+ - ispdb_data/mahoroba.ne.jp
267
+ - ispdb_data/mail.com
268
+ - ispdb_data/mail.dk
269
+ - ispdb_data/mail.iwafune.ne.jp
270
+ - ispdb_data/mail.ru
271
+ - ispdb_data/mail.telenor.dk
272
+ - ispdb_data/mail.wind.ne.jp
273
+ - ispdb_data/maroon.plala.or.jp
274
+ - ispdb_data/me.com
275
+ - ispdb_data/minuet.plala.or.jp
276
+ - ispdb_data/ml.murakami.ne.jp
277
+ - ispdb_data/mnet.ne.jp
278
+ - ispdb_data/mopera.net
279
+ - ispdb_data/mozilla.com
280
+ - ispdb_data/mx1.tiki.ne.jp
281
+ - ispdb_data/navy.plala.or.jp
282
+ - ispdb_data/nifty.com
283
+ - ispdb_data/nsat.jp
284
+ - ispdb_data/o2.pl
285
+ - ispdb_data/olive.plala.or.jp
286
+ - ispdb_data/onet.pl
287
+ - ispdb_data/opal.plala.or.jp
288
+ - ispdb_data/orange.plala.or.jp
289
+ - ispdb_data/orchid.plala.or.jp
290
+ - ispdb_data/ovh.net
291
+ - ispdb_data/pal.kijimadaira.jp
292
+ - ispdb_data/palette.plala.or.jp
293
+ - ispdb_data/parabox.or.jp
294
+ - ispdb_data/pdx.edu
295
+ - ispdb_data/peach.plala.or.jp
296
+ - ispdb_data/peoplepc.com
297
+ - ispdb_data/plum.plala.or.jp
298
+ - ispdb_data/po.dcn.ne.jp
299
+ - ispdb_data/po.wind.ne.jp
300
+ - ispdb_data/pobox.com
301
+ - ispdb_data/polka.plala.or.jp
302
+ - ispdb_data/pop.shibata.ne.jp
303
+ - ispdb_data/posteo.de
304
+ - ispdb_data/purple.plala.or.jp
305
+ - ispdb_data/rainbow.plala.or.jp
306
+ - ispdb_data/rambler.ru
307
+ - ispdb_data/red.plala.or.jp
308
+ - ispdb_data/rmail.plala.or.jp
309
+ - ispdb_data/rondo.plala.or.jp
310
+ - ispdb_data/rose.plala.or.jp
311
+ - ispdb_data/rouge.plala.or.jp
312
+ - ispdb_data/rr.com
313
+ - ispdb_data/ruby.plala.or.jp
314
+ - ispdb_data/sakunet.ne.jp
315
+ - ispdb_data/sea.plala.or.jp
316
+ - ispdb_data/sepia.plala.or.jp
317
+ - ispdb_data/serenade.plala.or.jp
318
+ - ispdb_data/seznam.cz
319
+ - ispdb_data/sfr.fr
320
+ - ispdb_data/silk.plala.or.jp
321
+ - ispdb_data/silver.plala.or.jp
322
+ - ispdb_data/sky.plala.or.jp
323
+ - ispdb_data/skynet.be
324
+ - ispdb_data/smail.plala.or.jp
325
+ - ispdb_data/snow.plala.or.jp
326
+ - ispdb_data/so.wind.ne.jp
327
+ - ispdb_data/sonata.plala.or.jp
328
+ - ispdb_data/strato.de
329
+ - ispdb_data/studenti.univr.it
330
+ - ispdb_data/suite.plala.or.jp
331
+ - ispdb_data/sympatico.ca
332
+ - ispdb_data/symphony.plala.or.jp
333
+ - ispdb_data/t-online.de
334
+ - ispdb_data/taupe.plala.or.jp
335
+ - ispdb_data/terra.es
336
+ - ispdb_data/tiki.ne.jp
337
+ - ispdb_data/tiscali.cz
338
+ - ispdb_data/tiscali.it
339
+ - ispdb_data/tmail.plala.or.jp
340
+ - ispdb_data/toccata.plala.or.jp
341
+ - ispdb_data/topaz.plala.or.jp
342
+ - ispdb_data/trio.plala.or.jp
343
+ - ispdb_data/umail.plala.or.jp
344
+ - ispdb_data/umich.edu
345
+ - ispdb_data/uol.com.br
346
+ - ispdb_data/upcmail.nl
347
+ - ispdb_data/verizon.net
348
+ - ispdb_data/versatel.de
349
+ - ispdb_data/violet.plala.or.jp
350
+ - ispdb_data/vm.aikis.or.jp
351
+ - ispdb_data/vmail.plala.or.jp
352
+ - ispdb_data/vp.tiki.ne.jp
353
+ - ispdb_data/waltz.plala.or.jp
354
+ - ispdb_data/wave.plala.or.jp
355
+ - ispdb_data/web.de
356
+ - ispdb_data/white.plala.or.jp
357
+ - ispdb_data/wildwestdomains.com
358
+ - ispdb_data/wine.plala.or.jp
359
+ - ispdb_data/wmail.plala.or.jp
360
+ - ispdb_data/wp.pl
361
+ - ispdb_data/xmail.plala.or.jp
362
+ - ispdb_data/xp.wind.jp
363
+ - ispdb_data/xpost.plala.or.jp
364
+ - ispdb_data/xs4all.nl
365
+ - ispdb_data/xtra.co.nz
366
+ - ispdb_data/yahoo.co.jp
367
+ - ispdb_data/yahoo.com
368
+ - ispdb_data/yandex.ru
369
+ - ispdb_data/ybb.ne.jp
370
+ - ispdb_data/yellow.plala.or.jp
371
+ - ispdb_data/ymail.plala.or.jp
372
+ - ispdb_data/ypost.plala.or.jp
373
+ - ispdb_data/ziggo.nl
374
+ - ispdb_data/zmail.plala.or.jp
375
+ - ispdb_data/zpost.plala.or.jp
376
+ - lib/mail_autoconfig.rb
377
+ - lib/mail_autoconfig/client_config.rb
378
+ - lib/mail_autoconfig/email_address.rb
379
+ - lib/mail_autoconfig/server.rb
380
+ - lib/mail_autoconfig/version.rb
381
+ - mail_autoconfig.gemspec
382
+ - spec/client_config_spec.rb
383
+ - spec/email_address_spec.rb
384
+ - spec/examples/client_config_yahoo.xml
385
+ - spec/server_spec.rb
386
+ homepage: ''
387
+ licenses:
388
+ - MIT
389
+ post_install_message:
390
+ rdoc_options: []
391
+ require_paths:
392
+ - lib
393
+ required_ruby_version: !ruby/object:Gem::Requirement
394
+ none: false
395
+ requirements:
396
+ - - ! '>='
397
+ - !ruby/object:Gem::Version
398
+ version: '0'
399
+ required_rubygems_version: !ruby/object:Gem::Requirement
400
+ none: false
401
+ requirements:
402
+ - - ! '>='
403
+ - !ruby/object:Gem::Version
404
+ version: '0'
405
+ requirements: []
406
+ rubyforge_project:
407
+ rubygems_version: 1.8.23.2
408
+ signing_key:
409
+ specification_version: 3
410
+ summary: Determine configuration details for a mailbox using Mozilla's ISPDB
411
+ test_files:
412
+ - spec/client_config_spec.rb
413
+ - spec/email_address_spec.rb
414
+ - spec/examples/client_config_yahoo.xml
415
+ - spec/server_spec.rb
416
+ has_rdoc: