Module: ActionMailer::Quoting

Included in:
Base, TestCase
Defined in:
lib/action_mailer/quoting.rb

Overview

:nodoc:

Constant Summary collapse

CHARS_NEEDING_QUOTING =
/[\000-\011\013\014\016-\037\177-\377]/

Instance Method Summary collapse

Instance Method Details

#quote_address_if_necessary(address, charset) ⇒ Object

Quote the given address if it needs to be. The address may be a regular email address, or it can be a phrase followed by an address in brackets. The phrase is the only part that will be quoted, and only if it needs to be. This allows extended characters to be used in the “to”, “from”, “cc”, “bcc” and “reply-to” headers.



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/action_mailer/quoting.rb', line 45

def quote_address_if_necessary(address, charset)
  if Array === address
    address.map { |a| quote_address_if_necessary(a, charset) }
  elsif address =~ /^(\S.*)\s+(<.*>)$/
    address = $2
    phrase = quote_if_necessary($1.gsub(/^['"](.*)['"]$/, '\1'), charset)
    "\"#{phrase}\" #{address}"
  else
    address
  end
end

#quote_any_address_if_necessary(charset, *args) ⇒ Object

Quote any of the given addresses, if they need to be.



58
59
60
# File 'lib/action_mailer/quoting.rb', line 58

def quote_any_address_if_necessary(charset, *args)
  args.map { |v| quote_address_if_necessary(v, charset) }
end

#quote_any_if_necessary(charset, *args) ⇒ Object

Quote any of the given strings if they contain any “illegal” characters



36
37
38
# File 'lib/action_mailer/quoting.rb', line 36

def quote_any_if_necessary(charset, *args)
  args.map { |v| quote_if_necessary(v, charset) }
end

#quote_if_necessary(text, charset) ⇒ Object

Quote the given text if it contains any “illegal” characters



27
28
29
30
31
32
33
# File 'lib/action_mailer/quoting.rb', line 27

def quote_if_necessary(text, charset)
  text = text.dup.force_encoding(Encoding::ASCII_8BIT) if text.respond_to?(:force_encoding)

  (text =~ CHARS_NEEDING_QUOTING) ?
    quoted_printable(text, charset) :
    text
end

#quoted_printable(text, charset) ⇒ Object

Convert the given text into quoted printable format, with an instruction that the text be eventually interpreted in the given charset.



6
7
8
9
10
# File 'lib/action_mailer/quoting.rb', line 6

def quoted_printable(text, charset)
  text = text.gsub( /[^a-z ]/i ) { quoted_printable_encode($&) }.
              gsub( / /, "_" )
  "=?#{charset}?Q?#{text}?="
end

#quoted_printable_encode(character) ⇒ Object

Convert the given character to quoted printable format, taking into account multi-byte characters (if executing with $KCODE=“u”, for instance)



14
15
16
17
18
# File 'lib/action_mailer/quoting.rb', line 14

def quoted_printable_encode(character)
  result = ""
  character.each_byte { |b| result << "=%02X" % b }
  result
end