Class: TMail::Mail

Inherits:
Object
  • Object
show all
Includes:
StrategyInterface, TextUtils
Defined in:
lib/tmail-pure/obsolete.rb,
lib/tmail-pure/net.rb,
lib/tmail-pure/mail.rb,
lib/tmail-pure/obsolete.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
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/tmail-pure/mail.rb', line 32

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.



48
49
50
# File 'lib/tmail-pure/mail.rb', line 48

def port
  @port
end

Class Method Details

.boundaryObject



115
116
117
# File 'lib/tmail-pure/obsolete.rb', line 115

def Mail.boundary
  ::TMail.new_boundary
end

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



24
25
26
# File 'lib/tmail-pure/mail.rb', line 24

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

.msgidObject



119
120
121
# File 'lib/tmail-pure/obsolete.rb', line 119

def Mail.msgid
  ::TMail.new_message_id
end

.parse(str) ⇒ Object



28
29
30
# File 'lib/tmail-pure/mail.rb', line 28

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

Instance Method Details

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



592
593
594
# File 'lib/tmail-pure/mail.rb', line 592

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

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



598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
# File 'lib/tmail-pure/mail.rb', line 598

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
    raise BadMessage, "multiple #{key}: header fields exist"\
        unless ALLOW_MULTIPLE.include?(dkey)
    @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



69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/tmail-pure/mail.rb', line 69

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



66
67
68
# File 'lib/tmail-pure/net.rb', line 66

def add_date
  self.date = Time.now
end

#add_message_id(fqdn = nil) ⇒ Object



62
63
64
# File 'lib/tmail-pure/net.rb', line 62

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

#base64_decodeObject



163
164
165
166
167
168
# File 'lib/tmail-pure/mail.rb', line 163

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



158
159
160
161
# File 'lib/tmail-pure/mail.rb', line 158

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

#bcc(default = nil) ⇒ Object



259
260
261
# File 'lib/tmail-pure/mail.rb', line 259

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

#bcc=(*strs) ⇒ Object



271
272
273
# File 'lib/tmail-pure/mail.rb', line 271

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

#bcc_addrs(default = nil) ⇒ Object



234
235
236
237
# File 'lib/tmail-pure/mail.rb', line 234

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

#bcc_addrs=(arg) ⇒ Object



247
248
249
# File 'lib/tmail-pure/mail.rb', line 247

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

#bodyObject Also known as: preamble



767
768
769
770
771
772
# File 'lib/tmail-pure/mail.rb', line 767

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

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



774
775
776
777
778
# File 'lib/tmail-pure/mail.rb', line 774

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

#body_portObject



758
759
760
761
# File 'lib/tmail-pure/mail.rb', line 758

def body_port
  parse_body
  @body_port
end

#cc(default = nil) ⇒ Object



255
256
257
# File 'lib/tmail-pure/mail.rb', line 255

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

#cc=(*strs) ⇒ Object



267
268
269
# File 'lib/tmail-pure/mail.rb', line 267

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

#cc_addrs(default = nil) ⇒ Object



229
230
231
232
# File 'lib/tmail-pure/mail.rb', line 229

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

#cc_addrs=(arg) ⇒ Object



243
244
245
# File 'lib/tmail-pure/mail.rb', line 243

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

#charset(default = nil) ⇒ Object



453
454
455
456
# File 'lib/tmail-pure/mail.rb', line 453

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

#charset=(str) ⇒ Object



458
459
460
461
462
463
464
465
466
467
# File 'lib/tmail-pure/mail.rb', line 458

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



671
672
673
# File 'lib/tmail-pure/mail.rb', line 671

def clear
  @header.clear
end

#content_type(default = nil) ⇒ Object



412
413
414
415
# File 'lib/tmail-pure/mail.rb', line 412

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

#create_empty_mailObject



110
111
112
# File 'lib/tmail-pure/net.rb', line 110

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

#create_forwardObject



133
134
135
# File 'lib/tmail-pure/net.rb', line 133

def create_forward
  setup_forward create_empty_mail()
end

#create_replyObject



114
115
116
# File 'lib/tmail-pure/net.rb', line 114

def create_reply
  setup_reply create_empty_mail()
end

#date(default = nil) ⇒ Object

date time



201
202
203
204
# File 'lib/tmail-pure/mail.rb', line 201

def date(default = nil)
  h = @header['date'] or return default
  h.date
end

#date=(time) ⇒ Object



206
207
208
209
210
211
212
213
# File 'lib/tmail-pure/mail.rb', line 206

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

#delete(key) ⇒ Object



675
676
677
# File 'lib/tmail-pure/mail.rb', line 675

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

#delete_ifObject



679
680
681
682
683
684
685
686
687
688
# File 'lib/tmail-pure/mail.rb', line 679

def delete_if
  @header.delete_if {|key, val|
    if val.is_a?(Array)
      val.delete_if {|v| yield key, v }
      val.empty?
    else
      yield key, val
    end
  }
end

#delete_no_send_fieldsObject



55
56
57
58
59
60
# File 'lib/tmail-pure/net.rb', line 55

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

#destinations(default = nil) ⇒ Object



134
135
136
137
138
# File 'lib/tmail-pure/mail.rb', line 134

def destinations(default = nil)
  result = to([]) + cc([]) + bcc([])
  return default if result.empty?
  result
end

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



488
489
490
491
492
493
494
# File 'lib/tmail-pure/mail.rb', line 488

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

#disposition_param(name, default = nil) ⇒ Object



510
511
512
513
514
515
516
# File 'lib/tmail-pure/mail.rb', line 510

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

#each(&block) ⇒ Object



763
764
765
# File 'lib/tmail-pure/mail.rb', line 763

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

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



140
141
142
# File 'lib/tmail-pure/mail.rb', line 140

def each_destination(&block)
  destinations([]).each(&block)
end

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



642
643
644
# File 'lib/tmail-pure/mail.rb', line 642

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

#each_headerObject Also known as: each_pair



628
629
630
631
632
# File 'lib/tmail-pure/mail.rb', line 628

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



636
637
638
# File 'lib/tmail-pure/mail.rb', line 636

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

#each_part(&block) ⇒ Object



799
800
801
# File 'lib/tmail-pure/mail.rb', line 799

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

#epilogueObject



783
784
785
786
# File 'lib/tmail-pure/mail.rb', line 783

def epilogue
  parse_body
  @epilogue.dup
end

#epilogue=(str) ⇒ Object



788
789
790
791
792
# File 'lib/tmail-pure/mail.rb', line 788

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

#error_reply_addresses(default = nil) ⇒ Object



150
151
152
153
154
155
156
# File 'lib/tmail-pure/mail.rb', line 150

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

#friendly_from(default = nil) ⇒ Object



121
122
123
124
125
126
127
128
# File 'lib/tmail-pure/mail.rb', line 121

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



291
292
293
# File 'lib/tmail-pure/mail.rb', line 291

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

#from=(*strs) ⇒ Object



295
296
297
# File 'lib/tmail-pure/mail.rb', line 295

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

#from_addr(default = nil) ⇒ Object



46
47
48
49
# File 'lib/tmail-pure/obsolete.rb', line 46

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

#from_address(default = nil) ⇒ Object



130
131
132
# File 'lib/tmail-pure/mail.rb', line 130

def from_address(default = nil)
  from([]).first || default
end

#from_addrs(default = nil) ⇒ Object

originator



279
280
281
282
283
284
285
# File 'lib/tmail-pure/mail.rb', line 279

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

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



287
288
289
# File 'lib/tmail-pure/mail.rb', line 287

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

#from_phrase(default = nil) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/tmail-pure/obsolete.rb', line 53

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

#headerObject



588
589
590
# File 'lib/tmail-pure/mail.rb', line 588

def header
  @header.dup
end

#header_string(name, default = nil) ⇒ Object



192
193
194
195
# File 'lib/tmail-pure/mail.rb', line 192

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

#in_reply_to(default = nil) ⇒ Object



370
371
372
373
# File 'lib/tmail-pure/mail.rb', line 370

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

#in_reply_to=(*idstrs) ⇒ Object



375
376
377
# File 'lib/tmail-pure/mail.rb', line 375

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

#inspectObject



50
51
52
# File 'lib/tmail-pure/mail.rb', line 50

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

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

Returns:

  • (Boolean)


694
695
696
# File 'lib/tmail-pure/mail.rb', line 694

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

#keysObject



690
691
692
# File 'lib/tmail-pure/mail.rb', line 690

def keys
  @header.keys
end

#main_type(default = nil) ⇒ Object



417
418
419
420
# File 'lib/tmail-pure/mail.rb', line 417

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

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

identity & threading



361
362
363
364
# File 'lib/tmail-pure/mail.rb', line 361

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

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



366
367
368
# File 'lib/tmail-pure/mail.rb', line 366

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

#mime_encodeObject



70
71
72
73
74
75
76
# File 'lib/tmail-pure/net.rb', line 70

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

#mime_encode_binary(body) ⇒ Object



94
95
96
97
98
# File 'lib/tmail-pure/net.rb', line 94

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



100
101
102
103
104
105
106
107
108
# File 'lib/tmail-pure/net.rb', line 100

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



78
79
80
81
82
83
84
85
86
# File 'lib/tmail-pure/net.rb', line 78

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



88
89
90
91
92
# File 'lib/tmail-pure/net.rb', line 88

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



392
393
394
395
# File 'lib/tmail-pure/mail.rb', line 392

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

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



397
398
399
400
401
402
403
404
405
406
407
408
409
# File 'lib/tmail-pure/mail.rb', line 397

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)


170
171
172
# File 'lib/tmail-pure/mail.rb', line 170

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

#ordered_eachObject



659
660
661
662
663
664
665
666
667
668
669
# File 'lib/tmail-pure/mail.rb', line 659

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



794
795
796
797
# File 'lib/tmail-pure/mail.rb', line 794

def parts
  parse_body
  @parts
end

#ready_to_sendObject



44
45
46
47
48
# File 'lib/tmail-pure/net.rb', line 44

def ready_to_send
  delete_no_send_fields
  add_message_id
  add_date
end

#references(default = nil) ⇒ Object



379
380
381
382
# File 'lib/tmail-pure/mail.rb', line 379

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

#references=(*strs) ⇒ Object



384
385
386
# File 'lib/tmail-pure/mail.rb', line 384

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

#reply_addresses(default = nil) ⇒ Object



146
147
148
# File 'lib/tmail-pure/mail.rb', line 146

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

#reply_to(default = nil) ⇒ Object



309
310
311
# File 'lib/tmail-pure/mail.rb', line 309

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

#reply_to=(*strs) ⇒ Object



313
314
315
# File 'lib/tmail-pure/mail.rb', line 313

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

#reply_to_addrs(default = nil) ⇒ Object



300
301
302
303
# File 'lib/tmail-pure/mail.rb', line 300

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

#reply_to_addrs=(arg) ⇒ Object



305
306
307
# File 'lib/tmail-pure/mail.rb', line 305

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

#send_text_to(smtp) ⇒ Object



23
24
25
26
27
28
# File 'lib/tmail-pure/net.rb', line 23

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

#send_to(smtp) ⇒ Object



17
18
19
20
21
# File 'lib/tmail-pure/net.rb', line 17

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

#send_to_0(smtp, from, to) ⇒ Object



38
39
40
41
42
# File 'lib/tmail-pure/net.rb', line 38

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

#sender(default) ⇒ Object



334
335
336
337
338
# File 'lib/tmail-pure/mail.rb', line 334

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

#sender=(str) ⇒ Object



340
341
342
# File 'lib/tmail-pure/mail.rb', line 340

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

#sender_addr(default = nil) ⇒ Object



318
319
320
321
# File 'lib/tmail-pure/mail.rb', line 318

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

#sender_addr=(addr) ⇒ Object



323
324
325
326
327
328
329
330
331
332
# File 'lib/tmail-pure/mail.rb', line 323

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=



427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
# File 'lib/tmail-pure/mail.rb', line 427

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(pos, params = nil) ⇒ Object Also known as: disposition=, set_content_disposition, content_disposition=



498
499
500
501
502
503
504
# File 'lib/tmail-pure/mail.rb', line 498

def set_disposition(pos, params = nil)
  @header.delete 'content-disposition'
  return pos unless pos
  store('Content-Disposition', pos)
  @header['content-disposition'].params.replace params if params
  pos
end

#setup_forward(mail) ⇒ Object



137
138
139
140
141
142
143
# File 'lib/tmail-pure/net.rb', line 137

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



118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/tmail-pure/net.rb', line 118

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



215
216
217
218
# File 'lib/tmail-pure/mail.rb', line 215

def strftime(fmt, default = nil)
  t = date or return default
  t.strftime(fmt)
end

#sub_type(default = nil) ⇒ Object



422
423
424
425
# File 'lib/tmail-pure/mail.rb', line 422

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

#subject(default = nil) ⇒ Object

subject



348
349
350
351
# File 'lib/tmail-pure/mail.rb', line 348

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

#subject=(str) ⇒ Object



353
354
355
# File 'lib/tmail-pure/mail.rb', line 353

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

#to(default = nil) ⇒ Object



251
252
253
# File 'lib/tmail-pure/mail.rb', line 251

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

#to=(*strs) ⇒ Object



263
264
265
# File 'lib/tmail-pure/mail.rb', line 263

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

#to_addrs(default = nil) ⇒ Object

destination



224
225
226
227
# File 'lib/tmail-pure/mail.rb', line 224

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

#to_addrs=(arg) ⇒ Object



239
240
241
# File 'lib/tmail-pure/mail.rb', line 239

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

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



470
471
472
473
474
475
476
# File 'lib/tmail-pure/mail.rb', line 470

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=



478
479
480
# File 'lib/tmail-pure/mail.rb', line 478

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

#type_param(name, default = nil) ⇒ Object



448
449
450
451
# File 'lib/tmail-pure/mail.rb', line 448

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

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

Returns:

  • (Boolean)


35
36
37
38
# File 'lib/tmail-pure/obsolete.rb', line 35

def value?(val)
  return false unless val.is_a?(HeaderField)
  [@header[val.name.downcase]].flatten.include?(val)
end

#valuesObject



27
28
29
30
31
32
33
# File 'lib/tmail-pure/obsolete.rb', line 27

def values
  result = []
  each_field do |f|
    result.push f
  end
  result
end

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



698
699
700
# File 'lib/tmail-pure/mail.rb', line 698

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

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



62
63
64
65
66
67
# File 'lib/tmail-pure/mail.rb', line 62

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