aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb')
-rw-r--r--actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb248
1 files changed, 248 insertions, 0 deletions
diff --git a/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb b/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb
new file mode 100644
index 0000000000..65147228a1
--- /dev/null
+++ b/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb
@@ -0,0 +1,248 @@
+#--
+# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
+# with permission of Minero Aoki.
+#++
+
+#:stopdoc:
+require 'nkf'
+#:startdoc:
+
+module TMail
+
+ class Mail
+
+ def send_to( smtp )
+ do_send_to(smtp) do
+ ready_to_send
+ end
+ end
+
+ def send_text_to( smtp )
+ do_send_to(smtp) do
+ ready_to_send
+ mime_encode
+ end
+ end
+
+ def do_send_to( smtp )
+ from = from_address or raise ArgumentError, 'no from address'
+ (dests = destinations).empty? and raise ArgumentError, 'no receipient'
+ yield
+ send_to_0 smtp, from, dests
+ end
+ private :do_send_to
+
+ def send_to_0( smtp, from, to )
+ smtp.ready(from, to) do |f|
+ encoded "\r\n", 'j', f, ''
+ end
+ end
+
+ def ready_to_send
+ delete_no_send_fields
+ add_message_id
+ add_date
+ end
+
+ NOSEND_FIELDS = %w(
+ received
+ bcc
+ )
+
+ def delete_no_send_fields
+ NOSEND_FIELDS.each do |nm|
+ delete nm
+ end
+ delete_if {|n,v| v.empty? }
+ end
+
+ def add_message_id( fqdn = nil )
+ self.message_id = ::TMail::new_message_id(fqdn)
+ end
+
+ def add_date
+ self.date = Time.now
+ end
+
+ def mime_encode
+ if parts.empty?
+ mime_encode_singlepart
+ else
+ mime_encode_multipart true
+ end
+ end
+
+ def mime_encode_singlepart
+ self.mime_version = '1.0'
+ b = body
+ if NKF.guess(b) != NKF::BINARY
+ mime_encode_text b
+ else
+ mime_encode_binary b
+ end
+ end
+
+ def mime_encode_text( body )
+ self.body = NKF.nkf('-j -m0', body)
+ self.set_content_type 'text', 'plain', {'charset' => 'iso-2022-jp'}
+ self.encoding = '7bit'
+ end
+
+ def mime_encode_binary( body )
+ self.body = [body].pack('m')
+ self.set_content_type 'application', 'octet-stream'
+ self.encoding = 'Base64'
+ end
+
+ def mime_encode_multipart( top = true )
+ self.mime_version = '1.0' if top
+ self.set_content_type 'multipart', 'mixed'
+ e = encoding(nil)
+ if e and not /\A(?:7bit|8bit|binary)\z/i === e
+ raise ArgumentError,
+ 'using C.T.Encoding with multipart mail is not permitted'
+ end
+ end
+
+ end
+
+ #:stopdoc:
+ class DeleteFields
+
+ NOSEND_FIELDS = %w(
+ received
+ bcc
+ )
+
+ def initialize( nosend = nil, delempty = true )
+ @no_send_fields = nosend || NOSEND_FIELDS.dup
+ @delete_empty_fields = delempty
+ end
+
+ attr :no_send_fields
+ attr :delete_empty_fields, true
+
+ def exec( mail )
+ @no_send_fields.each do |nm|
+ delete nm
+ end
+ delete_if {|n,v| v.empty? } if @delete_empty_fields
+ end
+
+ end
+ #:startdoc:
+
+ #:stopdoc:
+ class AddMessageId
+
+ def initialize( fqdn = nil )
+ @fqdn = fqdn
+ end
+
+ attr :fqdn, true
+
+ def exec( mail )
+ mail.message_id = ::TMail::new_msgid(@fqdn)
+ end
+
+ end
+ #:startdoc:
+
+ #:stopdoc:
+ class AddDate
+
+ def exec( mail )
+ mail.date = Time.now
+ end
+
+ end
+ #:startdoc:
+
+ #:stopdoc:
+ class MimeEncodeAuto
+
+ def initialize( s = nil, m = nil )
+ @singlepart_composer = s || MimeEncodeSingle.new
+ @multipart_composer = m || MimeEncodeMulti.new
+ end
+
+ attr :singlepart_composer
+ attr :multipart_composer
+
+ def exec( mail )
+ if mail._builtin_multipart?
+ then @multipart_composer
+ else @singlepart_composer end.exec mail
+ end
+
+ end
+ #:startdoc:
+
+ #:stopdoc:
+ class MimeEncodeSingle
+
+ def exec( mail )
+ mail.mime_version = '1.0'
+ b = mail.body
+ if NKF.guess(b) != NKF::BINARY
+ on_text b
+ else
+ on_binary b
+ end
+ end
+
+ def on_text( body )
+ mail.body = NKF.nkf('-j -m0', body)
+ mail.set_content_type 'text', 'plain', {'charset' => 'iso-2022-jp'}
+ mail.encoding = '7bit'
+ end
+
+ def on_binary( body )
+ mail.body = [body].pack('m')
+ mail.set_content_type 'application', 'octet-stream'
+ mail.encoding = 'Base64'
+ end
+
+ end
+ #:startdoc:
+
+ #:stopdoc:
+ class MimeEncodeMulti
+
+ def exec( mail, top = true )
+ mail.mime_version = '1.0' if top
+ mail.set_content_type 'multipart', 'mixed'
+ e = encoding(nil)
+ if e and not /\A(?:7bit|8bit|binary)\z/i === e
+ raise ArgumentError,
+ 'using C.T.Encoding with multipart mail is not permitted'
+ end
+ mail.parts.each do |m|
+ exec m, false if m._builtin_multipart?
+ end
+ end
+
+ end
+ #:startdoc:
+end # module TMail