Class: TMail::Mail

Inherits:
Object
  • Object
show all
Includes:
StrategyInterface, TextUtils
Defined in:
lib/action_mailer/vendor/tmail/obsolete.rb,
lib/action_mailer/vendor/tmail/net.rb,
lib/action_mailer/vendor/tmail/mail.rb,
lib/action_mailer/vendor/tmail/facade.rb,
lib/action_mailer/vendor/tmail/quoting.rb,
lib/action_mailer/vendor/tmail/obsolete.rb,
lib/action_mailer/vendor/tmail/attachments.rb

Overview

facade.rb

Constant Summary collapse

NOSEND_FIELDS =
%w(
  received
  bcc
)
ALLOW_MULTIPLE =
{
  'received'          => true,
  'resent-date'       => true,
  'resent-from'       => true,
  'resent-sender'     => true,
  'resent-to'         => true,
  'resent-cc'         => true,
  'resent-bcc'        => true,
  'resent-message-id' => true,
  'comments'          => true,
  'keywords'          => true
}
USE_ARRAY =
ALLOW_MULTIPLE
FIELD_ORDER =
%w(
  return-path received
  resent-date resent-from resent-sender resent-to
  resent-cc resent-bcc resent-message-id
  date from sender reply-to to cc bcc
  message-id in-reply-to references
  subject comments keywords
  mime-version content-type content-transfer-encoding
  content-disposition content-description
)

Constants included from TextUtils

TextUtils::ATOM_UNSAFE, TextUtils::CONTROL_CHAR, TextUtils::MESSAGE_ID, TextUtils::MIME_ENCODED, TextUtils::MONTH, TextUtils::NKF_FLAGS, TextUtils::PHRASE_UNSAFE, TextUtils::RFC2231_ENCODED, TextUtils::TOKEN_UNSAFE, TextUtils::WDAY, TextUtils::ZONESTR_TABLE

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from TextUtils

#atom_safe?, #decode_RFC2231, #decode_params, #join_domain, #message_id?, #mime_encoded?, #quote_atom, #quote_phrase, #quote_token, #time2str, #timezone_string_to_unixtime, #to_kcode, #token_safe?

Methods included from StrategyInterface

#accept_strategy, create_dest, #decoded, #encoded

Constructor Details

#initialize(port = nil, conf = DEFAULT_CONFIG) ⇒ Mail

Returns a new instance of Mail.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 58

def initialize( port = nil, conf = DEFAULT_CONFIG )
  @port = port || StringPort.new
  @config = Config.to_config(conf)

  @header      = {}
  @body_port   = nil
  @body_parsed = false
  @epilogue    = ''
  @parts       = []

  @port.ropen {|f|
      parse_header f
      parse_body f unless @port.reproducible?
  }
end

Instance Attribute Details

#portObject (readonly)

Returns the value of attribute port.



74
75
76
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 74

def port
  @port
end

Class Method Details

.boundaryObject



127
128
129
# File 'lib/action_mailer/vendor/tmail/obsolete.rb', line 127

def Mail.boundary
  ::TMail.new_boundary
end

.load(fname) ⇒ Object Also known as: load_from, loadfrom



46
47
48
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 46

def load( fname )
  new(FilePort.new(fname))
end

.msgidObject



131
132
133
# File 'lib/action_mailer/vendor/tmail/obsolete.rb', line 131

def Mail.msgid
  ::TMail.new_message_id
end

.parse(str) ⇒ Object



53
54
55
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 53

def parse( str )
  new(StringPort.new(str))
end

Instance Method Details

#[](key) ⇒ Object Also known as: fetch



163
164
165
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 163

def []( key )
  @header[key.downcase]
end

#[]=(key, val) ⇒ Object Also known as: store



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 173

def []=( key, val )
  dkey = key.downcase

  if val.nil?
    @header.delete dkey
    return nil
  end

  case val
  when String
    header = new_hf(key, val)
  when HeaderField
    ;
  when Array
    ALLOW_MULTIPLE.include? dkey or
            raise ArgumentError, "#{key}: Header must not be multiple"
    @header[dkey] = val
    return val
  else
    header = new_hf(key, val.to_s)
  end
  if ALLOW_MULTIPLE.include? dkey
    (@header[dkey] ||= []).push header
  else
    @header[dkey] = header
  end

  val
end

#accept(strategy) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 93

def accept( strategy )
  with_multipart_encoding(strategy) {
      ordered_each do |name, field|
        next if field.empty?
        strategy.header_name canonical(name)
        field.accept strategy
        strategy.puts
      end
      strategy.puts
      body_port().ropen {|r|
          strategy.write r.read
      }
  }
end

#add_dateObject



86
87
88
# File 'lib/action_mailer/vendor/tmail/net.rb', line 86

def add_date
  self.date = Time.now
end

#add_message_id(fqdn = nil) ⇒ Object



82
83
84
# File 'lib/action_mailer/vendor/tmail/net.rb', line 82

def add_message_id( fqdn = nil )
  self.message_id = ::TMail::new_message_id(fqdn)
end

#attachment?(part) ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
16
# File 'lib/action_mailer/vendor/tmail/attachments.rb', line 13

def attachment?(part)
  (part['content-disposition'] && part['content-disposition'].disposition == "attachment") ||
  part.header['content-type'].main_type != "text"
end

#attachmentsObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/action_mailer/vendor/tmail/attachments.rb', line 18

def attachments
  if multipart?
    parts.collect { |part| 
      if attachment?(part)
        content   = part.body # unquoted automatically by TMail#body
        file_name = (part['content-location'] &&
                      part['content-location'].body) ||
                    part.sub_header("content-type", "name") ||
                    part.sub_header("content-disposition", "filename")
        
        next if file_name.blank? || content.blank?
        
        attachment = Attachment.new(content)
        attachment.original_filename = file_name.strip
        attachment.content_type = part.content_type
        attachment
      end
    }.compact
  end      
end

#base64_decodeObject



502
503
504
505
506
507
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 502

def base64_decode
  if /base64/i === self.transfer_encoding('')
    store 'Content-Transfer-Encoding', '8bit'
    self.body = Base64.decode(self.body, @config.strict_base64decode?)
  end
end

#base64_encodeObject



497
498
499
500
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 497

def base64_encode
  store 'Content-Transfer-Encoding', 'Base64'
  self.body = Base64.folding_encode(self.body)
end

#bcc(default = nil) ⇒ Object



173
174
175
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 173

def bcc( default = nil )
  addrs2specs(bcc_addrs(nil)) || default
end

#bcc=(*strs) ⇒ Object



185
186
187
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 185

def bcc=( *strs )
  set_string_array_attr 'Bcc', strs
end

#bcc_addrs(default = nil) ⇒ Object



145
146
147
148
149
150
151
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 145

def bcc_addrs( default = nil )
  if h = @header['bcc']
    h.addrs
  else
    default
  end
end

#bcc_addrs=(arg) ⇒ Object



161
162
163
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 161

def bcc_addrs=( arg )
  set_addrfield 'bcc', arg
end

#body(to_charset = 'utf-8', &block) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/action_mailer/vendor/tmail/quoting.rb', line 25

def body(to_charset = 'utf-8', &block)
  attachment_presenter = block || Proc.new { |file_name| "Attachment: #{file_name}\n" }

  if multipart?
    parts.collect { |part| 
      header = part["content-type"]

      if part.multipart?
        part.body(to_charset, &attachment_presenter)
      elsif header.nil?
        ""
      elsif !attachment?(part)
        part.unquoted_body(to_charset)
      else
        attachment_presenter.call(header["name"] || "(unnamed)")
      end
    }.join
  else
    unquoted_body(to_charset)
  end
end

#body=(str) ⇒ Object Also known as: preamble=



357
358
359
360
361
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 357

def body=( str )
  parse_body
  @body_port.wopen {|f| f.write str }
  str
end

#body_portObject



341
342
343
344
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 341

def body_port
  parse_body
  @body_port
end

#cc(default = nil) ⇒ Object



169
170
171
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 169

def cc( default = nil )
  addrs2specs(cc_addrs(nil)) || default
end

#cc=(*strs) ⇒ Object



181
182
183
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 181

def cc=( *strs )
  set_string_array_attr 'Cc', strs
end

#cc_addrs(default = nil) ⇒ Object



137
138
139
140
141
142
143
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 137

def cc_addrs( default = nil )
  if h = @header['cc']
    h.addrs
  else
    default
  end
end

#cc_addrs=(arg) ⇒ Object



157
158
159
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 157

def cc_addrs=( arg )
  set_addrfield 'cc', arg
end

#charset(default = nil) ⇒ Object



411
412
413
414
415
416
417
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 411

def charset( default = nil )
  if h = @header['content-type']
    h['charset'] or default
  else
    default
  end
end

#charset=(str) ⇒ Object



419
420
421
422
423
424
425
426
427
428
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 419

def charset=( str )
  if str
    if h = @header[ 'content-type' ]
      h['charset'] = str
    else
      store 'Content-Type', "text/plain; charset=#{str}"
    end
  end
  str
end

#clearObject



248
249
250
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 248

def clear
  @header.clear
end

#content_type(default = nil) ⇒ Object



358
359
360
361
362
363
364
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 358

def content_type( default = nil )
  if h = @header['content-type']
    h.content_type || default
  else
    default
  end
end

#create_empty_mailObject



130
131
132
# File 'lib/action_mailer/vendor/tmail/net.rb', line 130

def create_empty_mail
  self.class.new(StringPort.new(''), @config)
end

#create_forwardObject



153
154
155
# File 'lib/action_mailer/vendor/tmail/net.rb', line 153

def create_forward
  setup_forward create_empty_mail()
end

#create_replyObject

utils



486
487
488
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 486

def create_reply
  setup_reply create_empty_mail()
end

#date(default = nil) ⇒ Object

date time



99
100
101
102
103
104
105
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 99

def date( default = nil )
  if h = @header['date']
    h.date
  else
    default
  end
end

#date=(time) ⇒ Object



107
108
109
110
111
112
113
114
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 107

def date=( time )
  if time
    store 'Date', time2str(time)
  else
    @header.delete 'date'
  end
  time
end

#delete(key) ⇒ Object



252
253
254
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 252

def delete( key )
  @header.delete key.downcase
end

#delete_ifObject



256
257
258
259
260
261
262
263
264
265
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 256

def delete_if
  @header.delete_if do |key,val|
    if Array === val
      val.delete_if {|v| yield key, v }
      val.empty?
    else
      yield key, val
    end
  end
end

#delete_no_send_fieldsObject



75
76
77
78
79
80
# File 'lib/action_mailer/vendor/tmail/net.rb', line 75

def delete_no_send_fields
  NOSEND_FIELDS.each do |nm|
    delete nm
  end
  delete_if {|n,v| v.empty? }
end

#destinations(default = nil) ⇒ Object



510
511
512
513
514
515
516
517
518
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 510

def destinations( default = nil )
  ret = []
  %w( to cc bcc ).each do |nm|
    if h = @header[nm]
      h.addrs.each {|i| ret.push i.address }
    end
  end
  ret.empty? ? default : ret
end

#disposition(default = nil) ⇒ Object Also known as: content_disposition



449
450
451
452
453
454
455
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 449

def disposition( default = nil )
  if h = @header['content-disposition']
    h.disposition || default
  else
    default
  end
end

#disposition_param(name, default = nil) ⇒ Object



474
475
476
477
478
479
480
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 474

def disposition_param( name, default = nil )
  if h = @header['content-disposition']
    h[name] || default
  else
    default
  end
end

#each(&block) ⇒ Object



346
347
348
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 346

def each( &block )
  body_port().ropen {|f| f.each(&block) }
end

#each_destination(&block) ⇒ Object Also known as: each_dest



520
521
522
523
524
525
526
527
528
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 520

def each_destination( &block )
  destinations([]).each do |i|
    if Address === i
      yield i
    else
      i.each(&block)
    end
  end
end

#each_field(&block) ⇒ Object Also known as: each_value



219
220
221
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 219

def each_field( &block )
  @header.values.flatten.each(&block)
end

#each_headerObject Also known as: each_pair



205
206
207
208
209
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 205

def each_header
  @header.each do |key, val|
    [val].flatten.each {|v| yield key, v }
  end
end

#each_header_name(&block) ⇒ Object Also known as: each_key



213
214
215
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 213

def each_header_name( &block )
  @header.each_key(&block)
end

#each_part(&block) ⇒ Object



382
383
384
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 382

def each_part( &block )
  parts().each(&block)
end

#epilogueObject



366
367
368
369
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 366

def epilogue
  parse_body
  @epilogue.dup
end

#epilogue=(str) ⇒ Object



371
372
373
374
375
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 371

def epilogue=( str )
  parse_body
  @epilogue = str
  str
end

#error_reply_addresses(default = nil) ⇒ Object



537
538
539
540
541
542
543
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 537

def error_reply_addresses( default = nil )
  if s = sender(nil)
    [s]
  else
    from_addrs(default)
  end
end

#friendly_from(default = nil) ⇒ Object



214
215
216
217
218
219
220
221
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 214

def friendly_from( default = nil )
  h = @header['from']
  a, = h.addrs
  return default unless a
  return a.phrase if a.phrase
  return h.comments.join(' ') unless h.comments.empty?
  a.spec
end

#from(default = nil) ⇒ Object



206
207
208
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 206

def from( default = nil )
  addrs2specs(from_addrs(nil)) || default
end

#from=(*strs) ⇒ Object



210
211
212
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 210

def from=( *strs )
  set_string_array_attr 'From', strs
end

#from_addr(default = nil) ⇒ Object



55
56
57
58
# File 'lib/action_mailer/vendor/tmail/obsolete.rb', line 55

def from_addr( default = nil )
  addr, = from_addrs(nil)
  addr || default
end

#from_address(default = nil) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/action_mailer/vendor/tmail/obsolete.rb', line 60

def from_address( default = nil )
  if a = from_addr(nil)
    a.spec
  else
    default
  end
end

#from_addrs(default = nil) ⇒ Object

originator



194
195
196
197
198
199
200
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 194

def from_addrs( default = nil )
  if h = @header['from']
    h.addrs
  else
    default
  end
end

#from_addrs=(arg) ⇒ Object Also known as: from_address=



202
203
204
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 202

def from_addrs=( arg )
  set_addrfield 'from', arg
end

#from_phrase(default = nil) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/action_mailer/vendor/tmail/obsolete.rb', line 70

def from_phrase( default = nil )
  if a = from_addr(nil)
    a.phrase
  else
    default
  end
end

#has_attachments?Boolean

Returns:

  • (Boolean)


9
10
11
# File 'lib/action_mailer/vendor/tmail/attachments.rb', line 9

def has_attachments?
  multipart? && parts.any? { |part| attachment?(part) }
end

#headerObject



159
160
161
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 159

def header
  @header.dup
end

#header_string(name, default = nil) ⇒ Object



37
38
39
40
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 37

def header_string( name, default = nil )
  h = @header[name.downcase] or return default
  h.to_s
end

#in_reply_to(default = nil) ⇒ Object



306
307
308
309
310
311
312
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 306

def in_reply_to( default = nil )
  if h = @header['in-reply-to']
    h.ids
  else
    default
  end
end

#in_reply_to=(*idstrs) ⇒ Object



314
315
316
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 314

def in_reply_to=( *idstrs )
  set_string_array_attr 'In-Reply-To', idstrs
end

#inspectObject



76
77
78
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 76

def inspect
  "\#<#{self.class} port=#{@port.inspect} bodyport=#{@body_port.inspect}>"
end

#key?(key) ⇒ Boolean Also known as: include?, has_key?

Returns:

  • (Boolean)


271
272
273
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 271

def key?( key )
  @header.key? key.downcase
end

#keysObject



267
268
269
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 267

def keys
  @header.keys
end

#main_type(default = nil) ⇒ Object



366
367
368
369
370
371
372
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 366

def main_type( default = nil )
  if h = @header['content-type']
    h.main_type || default
  else
    default
  end
end

#message_id(default = nil) ⇒ Object Also known as: msgid

identity & threading



294
295
296
297
298
299
300
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 294

def message_id( default = nil )
  if h = @header['message-id']
    h.id || default
  else
    default
  end
end

#message_id=(str) ⇒ Object Also known as: msgid=



302
303
304
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 302

def message_id=( str )
  set_string_attr 'Message-Id', str
end

#mime_encodeObject



90
91
92
93
94
95
96
# File 'lib/action_mailer/vendor/tmail/net.rb', line 90

def mime_encode
  if parts.empty?
    mime_encode_singlepart
  else
    mime_encode_multipart true
  end
end

#mime_encode_binary(body) ⇒ Object



114
115
116
117
118
# File 'lib/action_mailer/vendor/tmail/net.rb', line 114

def mime_encode_binary( body )
  self.body = [body].pack('m')
  self.set_content_type 'application', 'octet-stream'
  self.encoding = 'Base64'
end

#mime_encode_multipart(top = true) ⇒ Object



120
121
122
123
124
125
126
127
128
# File 'lib/action_mailer/vendor/tmail/net.rb', line 120

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

#mime_encode_singlepartObject



98
99
100
101
102
103
104
105
106
# File 'lib/action_mailer/vendor/tmail/net.rb', line 98

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

#mime_encode_text(body) ⇒ Object



108
109
110
111
112
# File 'lib/action_mailer/vendor/tmail/net.rb', line 108

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

#mime_version(default = nil) ⇒ Object

MIME headers



335
336
337
338
339
340
341
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 335

def mime_version( default = nil )
  if h = @header['mime-version']
    h.version || default
  else
    default
  end
end

#mime_version=(m, opt = nil) ⇒ Object



343
344
345
346
347
348
349
350
351
352
353
354
355
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 343

def mime_version=( m, opt = nil )
  if opt
    if h = @header['mime-version']
      h.major = m
      h.minor = opt
    else
      store 'Mime-Version', "#{m}.#{opt}"
    end
  else
    store 'Mime-Version', m
  end
  m
end

#multipart?Boolean

Returns:

  • (Boolean)


546
547
548
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 546

def multipart?
  main_type('').downcase == 'multipart'
end

#ordered_eachObject



236
237
238
239
240
241
242
243
244
245
246
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 236

def ordered_each
  list = @header.keys
  FIELD_ORDER.each do |name|
    if list.delete(name)
      [@header[name]].flatten.each {|v| yield name, v }
    end
  end
  list.each do |name|
    [@header[name]].flatten.each {|v| yield name, v }
  end
end

#partsObject



377
378
379
380
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 377

def parts
  parse_body
  @parts
end

#preambleObject



363
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 363

alias preamble  body

#quoted_bodyObject



350
351
352
353
354
355
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 350

def quoted_body
  parse_body
  @body_port.ropen {|f|
      return f.read
  }
end

#quoted_subjectObject

subject



283
284
285
286
287
288
289
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 283

def subject( default = nil )
  if h = @header['subject']
    h.body
  else
    default
  end
end

#ready_to_sendObject



64
65
66
67
68
# File 'lib/action_mailer/vendor/tmail/net.rb', line 64

def ready_to_send
  delete_no_send_fields
  add_message_id
  add_date
end

#references(default = nil) ⇒ Object



318
319
320
321
322
323
324
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 318

def references( default = nil )
  if h = @header['references']
    h.refs
  else
    default
  end
end

#references=(*strs) ⇒ Object



326
327
328
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 326

def references=( *strs )
  set_string_array_attr 'References', strs
end

#reply_addresses(default = nil) ⇒ Object



533
534
535
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 533

def reply_addresses( default = nil )
  reply_to_addrs(nil) or from_addrs(nil) or default
end

#reply_to(default = nil) ⇒ Object



236
237
238
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 236

def reply_to( default = nil )
  addrs2specs(reply_to_addrs(nil)) || default
end

#reply_to=(*strs) ⇒ Object



240
241
242
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 240

def reply_to=( *strs )
  set_string_array_attr 'Reply-To', strs
end

#reply_to_addrs(default = nil) ⇒ Object



224
225
226
227
228
229
230
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 224

def reply_to_addrs( default = nil )
  if h = @header['reply-to']
    h.addrs
  else
    default
  end
end

#reply_to_addrs=(arg) ⇒ Object



232
233
234
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 232

def reply_to_addrs=( arg )
  set_addrfield 'reply-to', arg
end

#send_text_to(smtp) ⇒ Object



43
44
45
46
47
48
# File 'lib/action_mailer/vendor/tmail/net.rb', line 43

def send_text_to( smtp )
  do_send_to(smtp) do
    ready_to_send
    mime_encode
  end
end

#send_to(smtp) ⇒ Object



37
38
39
40
41
# File 'lib/action_mailer/vendor/tmail/net.rb', line 37

def send_to( smtp )
  do_send_to(smtp) do
    ready_to_send
  end
end

#send_to_0(smtp, from, to) ⇒ Object



58
59
60
61
62
# File 'lib/action_mailer/vendor/tmail/net.rb', line 58

def send_to_0( smtp, from, to )
  smtp.ready(from, to) do |f|
    encoded "\r\n", 'j', f, ''
  end
end

#sender(default) ⇒ Object



261
262
263
264
265
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 261

def sender( default )
  f = @header['sender'] or return default
  a = f.addr            or return default
  a.spec
end

#sender=(str) ⇒ Object



267
268
269
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 267

def sender=( str )
  set_string_attr 'Sender', str
end

#sender_addr(default = nil) ⇒ Object



245
246
247
248
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 245

def sender_addr( default = nil )
  f = @header['sender'] or return default
  f.addr                or return default
end

#sender_addr=(addr) ⇒ Object



250
251
252
253
254
255
256
257
258
259
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 250

def sender_addr=( addr )
  if addr
    h = HeaderField.internal_new('sender', @config)
    h.addr = addr
    @header['sender'] = h
  else
    @header.delete 'sender'
  end
  addr
end

#set_content_type(str, sub = nil, param = nil) ⇒ Object Also known as: content_type=



382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 382

def set_content_type( str, sub = nil, param = nil )
  if sub
    main, sub = str, sub
  else
    main, sub = str.split(%r</>, 2)
    raise ArgumentError, "sub type missing: #{str.inspect}" unless sub
  end
  if h = @header['content-type']
    h.main_type = main
    h.sub_type  = sub
    h.params.clear
  else
    store 'Content-Type', "#{main}/#{sub}"
  end
  @header['content-type'].params.replace param if param

  str
end

#set_disposition(str, params = nil) ⇒ Object Also known as: disposition=, set_content_disposition, content_disposition=



459
460
461
462
463
464
465
466
467
468
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 459

def set_disposition( str, params = nil )
  if h = @header['content-disposition']
    h.disposition = str
    h.params.clear
  else
    store('Content-Disposition', str)
    h = @header['content-disposition']
  end
  h.params.replace params if params
end

#setup_forward(mail) ⇒ Object



157
158
159
160
161
162
163
# File 'lib/action_mailer/vendor/tmail/net.rb', line 157

def setup_forward( mail )
  m = Mail.new(StringPort.new(''))
  m.body = decoded
  m.set_content_type 'message', 'rfc822'
  m.encoding = encoding('7bit')
  mail.parts.push m
end

#setup_reply(m) ⇒ Object



138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/action_mailer/vendor/tmail/net.rb', line 138

def setup_reply( m )
  if tmp = reply_addresses(nil)
    m.to_addrs = tmp
  end

  mid = message_id(nil)
  tmp = references(nil) || []
  tmp.push mid if mid
  m.in_reply_to = [mid] if mid
  m.references = tmp unless tmp.empty?
  m.subject = 'Re: ' + subject('').sub(/\A(?:\s*re:)+/i, '')

  m
end

#strftime(fmt, default = nil) ⇒ Object



116
117
118
119
120
121
122
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 116

def strftime( fmt, default = nil )
  if t = date
    t.strftime(fmt)
  else
    default
  end
end

#sub_header(key, param) ⇒ Object



167
168
169
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 167

def sub_header(key, param)
  (hdr = self[key]) ? hdr[param] : nil
end

#sub_type(default = nil) ⇒ Object



374
375
376
377
378
379
380
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 374

def sub_type( default = nil )
  if h = @header['content-type']
    h.sub_type || default
  else
    default
  end
end

#subject(to_charset = 'utf-8') ⇒ Object

subject



276
277
278
279
280
281
282
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 276

def subject( default = nil )
  if h = @header['subject']
    h.body
  else
    default
  end
end

#subject=(str) ⇒ Object



285
286
287
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 285

def subject=( str )
  set_string_attr 'Subject', str
end

#to(default = nil) ⇒ Object



165
166
167
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 165

def to( default = nil )
  addrs2specs(to_addrs(nil)) || default
end

#to=(*strs) ⇒ Object



177
178
179
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 177

def to=( *strs )
  set_string_array_attr 'To', strs
end

#to_addrs(default = nil) ⇒ Object

destination



129
130
131
132
133
134
135
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 129

def to_addrs( default = nil )
  if h = @header['to']
    h.addrs
  else
    default
  end
end

#to_addrs=(arg) ⇒ Object



153
154
155
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 153

def to_addrs=( arg )
  set_addrfield 'to', arg
end

#transfer_encoding(default = nil) ⇒ Object Also known as: encoding, content_transfer_encoding



431
432
433
434
435
436
437
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 431

def transfer_encoding( default = nil )
  if h = @header['content-transfer-encoding']
    h.encoding || default
  else
    default
  end
end

#transfer_encoding=(str) ⇒ Object Also known as: encoding=, content_transfer_encoding=



439
440
441
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 439

def transfer_encoding=( str )
  set_string_attr 'Content-Transfer-Encoding', str
end

#type_param(name, default = nil) ⇒ Object



403
404
405
406
407
408
409
# File 'lib/action_mailer/vendor/tmail/facade.rb', line 403

def type_param( name, default = nil )
  if h = @header['content-type']
    h[name] || default
  else
    default
  end
end

#unquoted_body(to_charset = 'utf-8') ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/action_mailer/vendor/tmail/quoting.rb', line 7

def unquoted_body(to_charset = 'utf-8')
  from_charset = sub_header("content-type", "charset")
  case (content_transfer_encoding || "7bit").downcase
    when "quoted-printable"
      Unquoter.unquote_quoted_printable_and_convert_to(quoted_body,
        to_charset, from_charset, true)
    when "base64"
      Unquoter.unquote_base64_and_convert_to(quoted_body, to_charset,
        from_charset)
    when "7bit", "8bit"
      Unquoter.convert_to(quoted_body, to_charset, from_charset)
    when "binary"
      quoted_body
    else
      quoted_body
  end
end

#value?(val) ⇒ Boolean Also known as: has_value?

Returns:

  • (Boolean)


43
44
45
46
47
# File 'lib/action_mailer/vendor/tmail/obsolete.rb', line 43

def value?( val )
  HeaderField === val or return false

  [ @header[val.name.downcase] ].flatten.include? val
end

#valuesObject



37
38
39
40
41
# File 'lib/action_mailer/vendor/tmail/obsolete.rb', line 37

def values
  ret = []
  each_field {|v| ret.push v }
  ret
end

#values_at(*args) ⇒ Object Also known as: indexes, indices



275
276
277
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 275

def values_at( *args )
  args.map {|k| @header[k.downcase] }.flatten
end

#write_back(eol = "\n", charset = 'e') ⇒ Object



88
89
90
91
# File 'lib/action_mailer/vendor/tmail/mail.rb', line 88

def write_back( eol = "\n", charset = 'e' )
  parse_body
  @port.wopen {|stream| encoded eol, charset, stream }
end