zoho_cpaas-rails 1.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f56abbc236c3bfd5c0f58d334c679d4261f91298dc5e9e9385c66264287e94d4
4
+ data.tar.gz: 06d026c6d243054d8e0e087bf5e94000aefa0db3a9ae1b145d3e07173a025546
5
+ SHA512:
6
+ metadata.gz: 2324d0a8cd88f06db761d3eae942e2d75362b81024117fb079e6422783a78a6f727c453eaadb89b049f3bd789fee75f7f565b364bb5530ec1eea326c79c252be
7
+ data.tar.gz: 3081289bd7962626e27587cad5c2fb023ae68b49c133ec87a2622750a5fc35e16379688522548a5a0cd7b039bccc4c82f6568b079f9523c738bb745ae1eedb99
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ require 'railtie'
3
+ require 'zoho_cpaas_mailer'
4
+
5
+ module ZohoCpaasRails
6
+ class Mailer
7
+ def initialize(config)
8
+ # No config yet
9
+ end
10
+
11
+ # Sends the email and returns result
12
+ def deliver(msg)
13
+ ms_msg = RailsMsgToMsMsg.msg_to_ms_msg(msg)
14
+ ms_msg.send
15
+ end
16
+
17
+ def settings
18
+ # Define the settings method or use a custom configuration object
19
+ @settings ||= { return_response: true } # Example settings
20
+ end
21
+
22
+ def deliver!(msg)
23
+ deliver(msg)
24
+ end
25
+ private
26
+ end
27
+ end
data/lib/railtie.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'rails/railtie'
2
+ require_relative 'delivery_method'
3
+ require 'zoho_cpaas-ruby'
4
+
5
+ module ZohoCpaasRails
6
+ class Railtie < ::Rails::Railtie
7
+ ActiveSupport.on_load(:action_mailer) do
8
+ add_delivery_method :zohocpaasmail, ZohoCpaasRails::Mailer
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZohoZeptomail
4
+ module Rails
5
+ module Master
6
+ VERSION = "0.1.0"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZohoZeptomail
4
+ module Rails
5
+ module Master
6
+ class Error < StandardError; end
7
+ # Your code goes here...
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZohoCpaas
4
+ module Rails
5
+ class Error < StandardError; end
6
+ # Your code goes here...
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'zoho_cpaas_mailer'
2
+ # require 'delivery_method'
3
+ require_relative 'railtie'
@@ -0,0 +1,157 @@
1
+ require 'cgi'
2
+
3
+ module ZohoCpaasRails
4
+ class RailsMsgToMsMsg
5
+ def self.msg_to_ms_msg(msg)
6
+ ms_msg = ZohoCpaas::SendMail.new
7
+
8
+ if msg.from_addrs.empty?
9
+ raise 'From address should not be empty or nil'
10
+ else
11
+ ms_msg.add_from(rails_from_addr(msg.from_addrs))
12
+ end
13
+
14
+ if msg.subject.empty?
15
+ raise 'Subject should not be empty or nil'
16
+ else
17
+ ms_msg.add_subject(msg.subject)
18
+ end
19
+
20
+ if msg.to_addrs.empty?
21
+ raise 'Recipients address should not be empty or nil'
22
+ else
23
+ msg.to_addrs.each do |i|
24
+ ms_msg.add_recipients(rails_addr(i))
25
+ end
26
+ end
27
+
28
+ body_text = msg_text(msg) || ""
29
+ body_html = CGI.unescapeHTML(msg_html(msg))
30
+ if body_text != ""
31
+ body_text += '<br>' + body_html
32
+ else
33
+ body_text += body_html
34
+ end
35
+ ms_msg.add_body(body_text)
36
+
37
+ if msg.reply_to
38
+ msg.reply_to.each do |i|
39
+ ms_msg.add_reply_to(rails_addr(i))
40
+ end
41
+ end
42
+
43
+ rails_attach(msg.attachments, ms_msg)
44
+
45
+ if msg.cc_addrs
46
+ msg.cc_addrs.each do |i|
47
+ ms_msg.add_cc(rails_addr(i))
48
+ end
49
+ end
50
+
51
+ if msg.bcc_addrs
52
+ msg.bcc_addrs.each do |i|
53
+ ms_msg.add_bcc(rails_addr(i))
54
+ end
55
+ end
56
+
57
+ ms_msg
58
+ end
59
+
60
+ private
61
+
62
+ def self.rails_attach(attach, ms_msg)
63
+ if !attach.nil?
64
+ attach.each do |attachments|
65
+ ms_msg.add_attachments(content: attachments.body.decoded.to_s, filename: attachments.filename, mime_type: attachments.content_type)
66
+ end
67
+ end
68
+ end
69
+
70
+ def self.rails_addr(addr)
71
+ if addr.is_a?(Mail::Address)
72
+ name = addr.name || addr.address
73
+ email = addr.address
74
+ else
75
+ name = nil
76
+ email = addr
77
+ end
78
+ if name.nil?
79
+ {address: email}
80
+ else
81
+ { name: name, address: email }
82
+ end
83
+ end
84
+
85
+ def self.rails_from_addr(from_addrs)
86
+ if from_addrs.is_a?(Mail::Address)
87
+ name = from_addrs.name || from_addrs.address
88
+ email = from_addrs.address
89
+ else
90
+ name = nil
91
+ email = from_addrs
92
+ end
93
+ if name.nil?
94
+ { address: email[0] }
95
+ else
96
+ { name: name, address: email[0] }
97
+ end
98
+ end
99
+
100
+ def self.msg_text(msg)
101
+ text_parts = []
102
+ if msg.multipart?
103
+ msg.parts.each do |part|
104
+ if part.content_type =~ /^multipart\/alternative/i
105
+ text_parts.concat(extract_text_from_multipart_alternative(part))
106
+ end
107
+ end
108
+ end
109
+
110
+ if msg.mime_type =~ /^text\/plain$/i
111
+ text_parts << msg.body.decoded.to_s.strip
112
+ end
113
+ text_parts.join("<br>") unless text_parts.empty?
114
+ rescue => e
115
+ Rails.logger.error("Error extracting text from email: #{e.message}") if defined?(Rails)
116
+ raise
117
+ end
118
+
119
+ def self.extract_text_from_multipart_alternative(part)
120
+ nested_text_parts = []
121
+ part.parts.each do |sub_part|
122
+ if sub_part.content_type =~ /^text\/plain[;$]/i
123
+ nested_text_parts << sub_part.body.decoded.to_s.strip
124
+ end
125
+ end
126
+ nested_text_parts
127
+ end
128
+
129
+ def self.msg_html(msg)
130
+ html_parts = []
131
+ if msg.multipart?
132
+ msg.parts.each do |part|
133
+ if part.content_type =~ /^multipart\/alternative/i
134
+ html_parts.concat(extract_text_html_multipart_alternative(part))
135
+ elsif part.content_type =~ /^text\/html[;$]/i
136
+ html_parts << part.body.decoded.to_s.strip
137
+ end
138
+ end
139
+ end
140
+ if msg.mime_type =~ /^text\/html$/i
141
+ html_parts << msg.body.decoded.to_s.strip
142
+ end
143
+ clean_html = html_parts.join("<br>").gsub(/<\/?[^>]*>/, '').strip
144
+ clean_html
145
+ end
146
+
147
+ def self.extract_text_html_multipart_alternative(part)
148
+ nested_text_parts = []
149
+ part.parts.each do |sub_part|
150
+ if sub_part.content_type =~ /^text\/html[;$]/i
151
+ nested_text_parts << sub_part.body.decoded.to_s.strip
152
+ end
153
+ end
154
+ nested_text_parts
155
+ end
156
+ end
157
+ end
metadata ADDED
@@ -0,0 +1,178 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zoho_cpaas-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - ACO
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-11-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: zoho_cpaas-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.18'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.18'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 7.1.3
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 7.1.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: actionmailer
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 7.1.3
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 7.1.3
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.10'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.10'
111
+ - !ruby/object:Gem::Dependency
112
+ name: vcr
113
+ requirement: !ruby/object:Gem::Requirement
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
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description:
140
+ email:
141
+ - contact@aurarians.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - lib/delivery_method.rb
147
+ - lib/railtie.rb
148
+ - lib/zoho_cpaas-rails.rb
149
+ - lib/zoho_cpaas/rails.rb
150
+ - lib/zoho_cpaas/rails/master.rb
151
+ - lib/zoho_cpaas/rails/master/version.rb
152
+ - lib/zoho_cpaas_mailer.rb
153
+ homepage: https://alexason.com
154
+ licenses:
155
+ - MIT
156
+ metadata:
157
+ homepage_uri: https://alexason.com
158
+ source_code_uri: https://alexason.com
159
+ post_install_message:
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: 3.1.0
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements: []
174
+ rubygems_version: 3.5.22
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: Zoho Cpaas Ruby SDK
178
+ test_files: []