mail_autoconfig 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: