Changeset 8620
- Timestamp:
- 01/11/08 01:55:20 (4 months ago)
- Files:
-
- trunk/actionmailer/CHANGELOG (modified) (1 diff)
- trunk/actionmailer/lib/action_mailer/vendor.rb (modified) (1 diff)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1 (moved) (moved from trunk/actionmailer/lib/action_mailer/vendor/tmail-1.1.0)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/encode.rb (modified) (12 diffs)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/header.rb (modified) (2 diffs)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/interface.rb (modified) (37 diffs)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/mail.rb (modified) (4 diffs)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/mailbox.rb (modified) (1 diff)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/net.rb (modified) (1 diff)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/quoting.rb (modified) (5 diffs)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/scanner_r.rb (modified) (2 diffs)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/scanner.rb (modified) (1 diff)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/utils.rb (modified) (3 diffs)
- trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/version.rb (modified) (1 diff)
- trunk/actionmailer/test/mail_service_test.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/actionmailer/CHANGELOG
r8536 r8620 2 2 3 3 * Fixed that you don't have to call super in ActionMailer::TestCase#setup #10406 [jamesgolick] 4 5 * Updated TMail to version 1.2.1 [raasdnil] 6 7 * Fixed test in mail_service_test.rb => 'test_decode_encoded_attachment_filename' which had an incorrect decode value (should have spaces in the file after decode) [raasdnil] 4 8 5 9 trunk/actionmailer/lib/action_mailer/vendor.rb
r8112 r8620 3 3 4 4 begin 5 gem 'tmail', '~> 1. 1.0'5 gem 'tmail', '~> 1.2.1' 6 6 rescue Gem::LoadError 7 $:.unshift "#{File.dirname(__FILE__)}/vendor/tmail-1. 1.0"7 $:.unshift "#{File.dirname(__FILE__)}/vendor/tmail-1.2.1" 8 8 end 9 9 trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/encode.rb
r8084 r8620 1 =begin rdoc 2 3 = Text Encoding class 4 5 =end 6 #-- 7 # Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net> 8 # 9 # Permission is hereby granted, free of charge, to any person obtaining 10 # a copy of this software and associated documentation files (the 11 # "Software"), to deal in the Software without restriction, including 12 # without limitation the rights to use, copy, modify, merge, publish, 13 # distribute, sublicense, and/or sell copies of the Software, and to 14 # permit persons to whom the Software is furnished to do so, subject to 15 # the following conditions: 16 # 17 # The above copyright notice and this permission notice shall be 18 # included in all copies or substantial portions of the Software. 19 # 20 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 # 28 # Note: Originally licensed under LGPL v2+. Using MIT license for Rails 29 # with permission of Minero Aoki. 30 #++ 1 # = TITLE: 2 # 3 # Text Encoding class 4 # 5 # = COPYRIGHT: 6 # 7 # Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net> 8 # 9 # Permission is hereby granted, free of charge, to any person obtaining 10 # a copy of this software and associated documentation files (the 11 # "Software"), to deal in the Software without restriction, including 12 # without limitation the rights to use, copy, modify, merge, publish, 13 # distribute, sublicense, and/or sell copies of the Software, and to 14 # permit persons to whom the Software is furnished to do so, subject to 15 # the following conditions: 16 # 17 # The above copyright notice and this permission notice shall be 18 # included in all copies or substantial portions of the Software. 19 # 20 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 # 28 # Note: Originally licensed under LGPL v2+. Using MIT license for Rails 29 # with permission of Minero Aoki. 31 30 32 31 require 'nkf' 33 require 'tmail/base64 .rb'32 require 'tmail/base64' 34 33 require 'tmail/stringio' 35 34 require 'tmail/utils' … … 53 52 end 54 53 module_function :create_dest 55 54 56 55 def encoded( eol = "\r\n", charset = 'j', dest = nil ) 57 56 accept_strategy Encoder, eol, charset, dest 58 57 end 59 58 60 59 def decoded( eol = "\n", charset = 'e', dest = nil ) 61 60 # Turn the E-Mail into a string and return it with all … … 63 62 accept_strategy Decoder, eol, charset, dest 64 63 end 65 64 66 65 alias to_s decoded 67 66 68 67 def accept_strategy( klass, eol, charset, dest = nil ) 69 68 dest ||= '' … … 71 70 dest 72 71 end 73 72 74 73 end 75 74 … … 122 121 @f << decode(str) 123 122 end 124 123 125 124 def space 126 125 @f << ' ' … … 132 131 @f << str 133 132 end 134 133 135 134 def meta( str ) 136 135 @f << str … … 183 182 184 183 SPACER = "\t" 185 MAX_LINE_LEN = 70 184 MAX_LINE_LEN = 78 185 RFC_2822_MAX_LENGTH = 998 186 186 187 187 OPTIONS = { … … 203 203 @preserve_quotes 204 204 end 205 205 206 206 def preserve_quotes 207 207 @preserve_quotes … … 379 379 end 380 380 end 381 381 382 382 METHOD_ID = { 383 383 ?j => :extract_J, … … 452 452 # puts "+ #{lwsp.inspect}" 453 453 fold if restsize() <= 0 454 flush 454 flush(@folded) 455 455 @lwsp = lwsp 456 456 end 457 457 458 def flush 458 def flush(folded = false) 459 459 # puts '---- flush ----' 460 460 # puts "spc >>>#{@lwsp.inspect}<<<" 461 461 # puts "txt >>>#{@text.inspect}<<<" 462 462 @f << @lwsp << @text 463 @curlen += (@lwsp.size + @text.size) 463 if folded 464 @curlen = 0 465 else 466 @curlen += (@lwsp.size + @text.size) 467 end 464 468 @text = '' 465 469 @lwsp = '' … … 468 472 def fold 469 473 # puts '---- fold ----' 470 @f << @eol 474 unless @f.string =~ /^.*?:$/ 475 @f << @eol 476 @lwsp = SPACER 477 else 478 fold_header 479 @folded = true 480 end 471 481 @curlen = 0 472 @lwsp = SPACER 482 end 483 484 def fold_header 485 # Called because line is too long - so we need to wrap. 486 # First look for whitespace in the text 487 # if it has text, fold there 488 # check the remaining text, if too long, fold again 489 # if it doesn't, then don't fold unless the line goes beyond 998 chars 490 491 # Check the text to see if there is whitespace, or if not 492 @wrapped_text = [] 493 until @text == '' 494 fold_the_string 495 end 496 @text = @wrapped_text.join("#{@eol}#{SPACER}") 497 end 498 499 def fold_the_string 500 whitespace_location = @text =~ /\s/ || @text.length 501 # Is the location of the whitespace shorter than the RCF_2822_MAX_LENGTH? 502 # if there is no whitespace in the string, then this 503 unless mazsize(whitespace_location) <= 0 504 @wrapped_text << @text.slice!(0...whitespace_location) 505 # If it is not less, we have to wrap it destructively 506 else 507 slice_point = RFC_2822_MAX_LENGTH - @curlen - @lwsp.length 508 @wrapped_text << @text.slice!(0...slice_point) 509 end 473 510 end 474 511 … … 477 514 end 478 515 516 def mazsize(whitespace_location) 517 # Per RFC2822, the maximum length of a line is 998 chars 518 RFC_2822_MAX_LENGTH - (@curlen + @lwsp.size + whitespace_location) 519 end 520 479 521 end 480 522 trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/header.rb
r8084 r8620 55 55 end 56 56 57 # Returns a HeaderField object matching the header you specify in the "name" param. 58 # Requires an initialized TMail::Port to be passed in. 59 # 60 # The method searches the header of the Port you pass into it to find a match on 61 # the header line you pass. Once a match is found, it will unwrap the matching line 62 # as needed to return an initialized HeaderField object. 63 # 64 # If you want to get the Envelope sender of the email object, pass in "EnvelopeSender", 65 # if you want the From address of the email itself, pass in 'From'. 66 # 67 # This is because a mailbox doesn't have the : after the From that designates the 68 # beginning of the envelope sender (which can be different to the from address of 69 # the emial) 70 # 71 # Other fields can be passed as normal, "Reply-To", "Received" etc. 72 # 73 # Note: Change of behaviour in 1.2.1 => returns nil if it does not find the specified 74 # header field, otherwise returns an instantiated object of the correct header class 75 # 76 # For example: 77 # port = TMail::FilePort.new("/test/fixtures/raw_email_simple") 78 # h = TMail::HeaderField.new_from_port(port, "From") 79 # h.addrs.to_s #=> "Mikel Lindsaar <mikel@nowhere.com>" 80 # h = TMail::HeaderField.new_from_port(port, "EvelopeSender") 81 # h.addrs.to_s #=> "mike@anotherplace.com.au" 82 # h = TMail::HeaderField.new_from_port(port, "SomeWeirdHeaderField") 83 # h #=> nil 57 84 def new_from_port( port, name, conf = DEFAULT_CONFIG ) 58 re = Regep.new('\A(' + Regexp.quote(name) + '):', 'i') 85 if name == "EnvelopeSender" 86 name = "From" 87 re = Regexp.new('\A(From) ', 'i') 88 else 89 re = Regexp.new('\A(' + Regexp.quote(name) + '):', 'i') 90 end 59 91 str = nil 60 92 port.ropen {|f| … … 67 99 end 68 100 } 69 new(name, str, Config.to_config(conf)) 101 new(name, str, Config.to_config(conf)) if str 70 102 end 71 103 trunk/actionmailer/lib/action_mailer/vendor/tmail-1.2.1/tmail/interface.rb
r8084 r8620 1 1 =begin rdoc 2 2 3 = Facade.rb Provides an interface to the TMail object3 = interface.rb Provides an interface to the TMail object 4 4 5 5 =end … … 30 30 #++ 31 31 32 # TMail::Mail objects get accessed primarily through the methods in this file. 33 # 34 # 35 32 36 require 'tmail/utils' 33 37 … … 36 40 class Mail 37 41 42 # Allows you to query the mail object with a string to get the contents 43 # of the field you want. 44 # 45 # Returns a string of the exact contnts of the field 46 # 47 # mail.from = "mikel <mikel@lindsaar.net>" 48 # mail.header_string("From") #=> "mikel <mikel@lindsaar.net>" 38 49 def header_string( name, default = nil ) 39 50 h = @header[name.downcase] or return default … … 41 52 end 42 53 43 # ##44 # ## attributes45 # ##54 #:stopdoc: 55 #-- 56 #== Attributes 46 57 47 58 include TextUtils … … 93 104 private :addrs2specs 94 105 95 # 96 # date time 97 # 98 106 #:startdoc: 107 108 #== Date and Time methods 109 110 # Returns the date of the email message as per the "date" header value or returns 111 # nil by default (if no date field exists). 112 # 113 # You can also pass whatever default you want into this method and it will return 114 # that instead of nil if there is no date already set. 99 115 def date( default = nil ) 100 116 if h = @header['date'] … … 105 121 end 106 122 123 # Destructively sets the date of the mail object with the passed Time instance, 124 # returns a Time instance set to the date/time of the mail 125 # 126 # Example: 127 # 128 # now = Time.now 129 # mail.date = now 130 # mail.date #=> Sat Nov 03 18:47:50 +1100 2007 131 # mail.date.class #=> Time 107 132 def date=( time ) 108 133 if time … … 114 139 end 115 140 141 # Returns the time of the mail message formatted to your taste using a 142 # strftime format string. If no date set returns nil by default or whatever value 143 # you pass as the second optional parameter. 144 # 145 # time = Time.now # (on Nov 16 2007) 146 # mail.date = time 147 # mail.strftime("%D") #=> "11/16/07" 116 148 def strftime( fmt, default = nil ) 117 149 if t = date … … 122 154 end 123 155 124 # 125 # destination 126 # 127 156 #== Destination methods 157 158 # Return a TMail::Addresses instance for each entry in the "To:" field of the mail object header. 159 # 160 # If the "To:" field does not exist, will return nil by default or the value you 161 # pass as the optional parameter. 162 # 163 # Example: 164 # 165 # mail = TMail::Mail.new 166 # mail.to_addrs #=> nil 167 # mail.to_addrs([]) #=> [] 168 # mail.to = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 169 # mail.to_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 128 170 def to_addrs( default = nil ) 129 171 if h = @header['to'] … … 134 176 end 135 177 136 def cc_addrs( default = nil ) 178 # Return a TMail::Addresses instance for each entry in the "Cc:" field of the mail object header. 179 # 180 # If the "Cc:" field does not exist, will return nil by default or the value you 181 # pass as the optional parameter. 182 # 183 # Example: 184 # 185 # mail = TMail::Mail.new 186 # mail.cc_addrs #=> nil 187 # mail.cc_addrs([]) #=> [] 188 # mail.cc = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 189 # mail.cc_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 190 def cc_addrs( default = nil ) 137 191 if h = @header['cc'] 138 192 h.addrs … … 142 196 end 143 197 198 # Return a TMail::Addresses instance for each entry in the "Bcc:" field of the mail object header. 199 # 200 # If the "Bcc:" field does not exist, will return nil by default or the value you 201 # pass as the optional parameter. 202 # 203 # Example: 204 # 205 # mail = TMail::Mail.new 206 # mail.bcc_addrs #=> nil 207 # mail.bcc_addrs([]) #=> [] 208 # mail.bcc = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 209 # mail.bcc_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 144 210 def bcc_addrs( default = nil ) 145 211 if h = @header['bcc'] … … 150 216 end 151 217 218 # Destructively set the to field of the "To:" header to equal the passed in string. 219 # 220 # TMail will parse your contents and turn each valid email address into a TMail::Address 221 # object before assigning it to the mail message. 222 # 223 # Example: 224 # 225 # mail = TMail::Mail.new 226 # mail.to = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 227 # mail.to_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 152 228 def to_addrs=( arg ) 153 229 set_addrfield 'to', arg 154 230 end 155 231 232 # Destructively set the to field of the "Cc:" header to equal the passed in string. 233 # 234 # TMail will parse your contents and turn each valid email address into a TMail::Address 235 # object before assigning it to the mail message. 236 # 237 # Example: 238 # 239 # mail = TMail::Mail.new 240 # mail.cc = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 241 # mail.cc_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 156 242 def cc_addrs=( arg ) 157 243 set_addrfield 'cc', arg 158 244 end 159 245 246 # Destructively set the to field of the "Bcc:" header to equal the passed in string. 247 # 248 # TMail will parse your contents and turn each valid email address into a TMail::Address 249 # object before assigning it to the mail message. 250 # 251 # Example: 252 # 253 # mail = TMail::Mail.new 254 # mail.bcc = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 255 # mail.bcc_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 160 256 def bcc_addrs=( arg ) 161 257 set_addrfield 'bcc', arg 162 258 end 163 259 260 # Returns who the email is to as an Array of email addresses as opposed to an Array of 261 # TMail::Address objects which is what Mail#to_addrs returns 262 # 263 # Example: 264 # 265 # mail = TMail::Mail.new 266 # mail.to = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 267 # mail.to #=> ["mikel@me.org", "mikel@you.org"] 164 268 def to( default = nil ) 165 269 addrs2specs(to_addrs(nil)) || default 166 270 end 167 271 272 # Returns who the email cc'd as an Array of email addresses as opposed to an Array of 273 # TMail::Address objects which is what Mail#to_addrs returns 274 # 275 # Example: 276 # 277 # mail = TMail::Mail.new 278 # mail.cc = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 279 # mail.cc #=> ["mikel@me.org", "mikel@you.org"] 168 280 def cc( default = nil ) 169 281 addrs2specs(cc_addrs(nil)) || default 170 282 end 171 283 284 # Returns who the email bcc'd as an Array of email addresses as opposed to an Array of 285 # TMail::Address objects which is what Mail#to_addrs returns 286 # 287 # Example: 288 # 289 # mail = TMail::Mail.new 290 # mail.bcc = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 291 # mail.bcc #=> ["mikel@me.org", "mikel@you.org"] 172 292 def bcc( default = nil ) 173 293 addrs2specs(bcc_addrs(nil)) || default 174 294 end 175 295 296 # Destructively sets the "To:" field to the passed array of strings (which should be valid 297 # email addresses) 298 # 299 # Example: 300 # 301 # mail = TMail::Mail.new 302 # mail.to = ["mikel@abc.com", "Mikel <mikel@xyz.com>"] 303 # mail.to #=> ["mikel@abc.org", "mikel@xyz.org"] 304 # mail['to'].to_s #=> "mikel@abc.com, Mikel <mikel@xyz.com>" 176 305 def to=( *strs ) 177 306 set_string_array_attr 'To', strs 178 307 end 179 308 309 # Destructively sets the "Cc:" field to the passed array of strings (which should be valid 310 # email addresses) 311 # 312 # Example: 313 # 314 # mail = TMail::Mail.new 315 # mail.cc = ["mikel@abc.com", "Mikel <mikel@xyz.com>"] 316 # mail.cc #=> ["mikel@abc.org", "mikel@xyz.org"] 317 # mail['cc'].to_s #=> "mikel@abc.com, Mikel <mikel@xyz.com>" 180 318 def cc=( *strs ) 181 319 set_string_array_attr 'Cc', strs 182 320 end 183 321 322 # Destructively sets the "Bcc:" field to the passed array of strings (which should be valid 323 # email addresses) 324 # 325 # Example: 326 # 327 # mail = TMail::Mail.new 328 # mail.bcc = ["mikel@abc.com", "Mikel <mikel@xyz.com>"] 329 # mail.bcc #=> ["mikel@abc.org", "mikel@xyz.org"] 330 # mail['bcc'].to_s #=> "mikel@abc.com, Mikel <mikel@xyz.com>" 184 331 def bcc=( *strs ) 185 332 set_string_array_attr 'Bcc', strs 186 333 end 187 334 188 # 189 # originator 190 # 191 335 #== Originator methods 336 337 # Return a TMail::Addresses instance for each entry in the "From:" field of the mail object header. 338 # 339 # If the "From:" field does not exist, will return nil by default or the value you 340 # pass as the optional parameter. 341 # 342 # Example: 343 # 344 # mail = TMail::Mail.new 345 # mail.from_addrs #=> nil 346 # mail.from_addrs([]) #=> [] 347 # mail.from = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 348 # mail.from_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 192 349 def from_addrs( default = nil ) 193 350 if h = @header['from'] … … 198 355 end 199 356 357 # Destructively set the to value of the "From:" header to equal the passed in string. 358 # 359 # TMail will parse your contents and turn each valid email address into a TMail::Address 360 # object before assigning it to the mail message. 361 # 362 # Example: 363 # 364 # mail = TMail::Mail.new 365 # mail.from_addrs = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 366 # mail.from_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 200 367 def from_addrs=( arg ) 201 368 set_addrfield 'from', arg 202 369 end 203 370 371 # Returns who the email is from as an Array of email address strings instead to an Array of 372 # TMail::Address objects which is what Mail#from_addrs returns 373 # 374 # Example: 375 # 376 # mail = TMail::Mail.new 377 # mail.from = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 378 # mail.from #=> ["mikel@me.org", "mikel@you.org"] 204 379 def from( default = nil ) 205 380 addrs2specs(from_addrs(nil)) || default 206 381 end 207 382 383 # Destructively sets the "From:" field to the passed array of strings (which should be valid 384 # email addresses) 385 # 386 # Example: 387 # 388 # mail = TMail::Mail.new 389 # mail.from = ["mikel@abc.com", "Mikel <mikel@xyz.com>"] 390 # mail.from #=> ["mikel@abc.org", "mikel@xyz.org"] 391 # mail['from'].to_s #=> "mikel@abc.com, Mikel <mikel@xyz.com>" 208 392 def from=( *strs ) 209 393 set_string_array_attr 'From', strs 210 394 end 211 395 396 # Returns the "friendly" human readable part of the address 397 # 398 # Example: 399 # 400 # mail = TMail::Mail.new 401 # mail.from = "Mikel Lindsaar <mikel@abc.com>" 402 # mail.friendly_from #=> "Mikel Lindsaar" 212 403 def friendly_from( default = nil ) 213 404 h = @header['from'] … … 219 410 end 220 411 221 412 # Return a TMail::Addresses instance for each entry in the "Reply-To:" field of the mail object header. 413 # 414 # If the "Reply-To:" field does not exist, will return nil by default or the value you 415 # pass as the optional parameter. 416 # 417 # Example: 418 # 419 # mail = TMail::Mail.new 420 # mail.reply_to_addrs #=> nil 421 # mail.reply_to_addrs([]) #=> [] 422 # mail.reply_to = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 423 # mail.reply_to_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 222 424 def reply_to_addrs( default = nil ) 223 425 if h = @header['reply-to'] 224 h.addrs 225 else 226 default 227 end 228 end 229 426 h.addrs.blank? ? default : h.addrs 427 else 428 default 429 end 430 end 431 432 # Destructively set the to value of the "Reply-To:" header to equal the passed in argument. 433 # 434 # TMail will parse your contents and turn each valid email address into a TMail::Address 435 # object before assigning it to the mail message. 436 # 437 # Example: 438 # 439 # mail = TMail::Mail.new 440 # mail.reply_to_addrs = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 441 # mail.reply_to_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 230 442 def reply_to_addrs=( arg ) 231 443 set_addrfield 'reply-to', arg 232 444 end 233 445 446 # Returns who the email is from as an Array of email address strings instead to an Array of 447 # TMail::Address objects which is what Mail#reply_to_addrs returns 448 # 449 # Example: 450 # 451 # mail = TMail::Mail.new 452 # mail.reply_to = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 453 # mail.reply_to #=> ["mikel@me.org", "mikel@you.org"] 234 454 def reply_to( default = nil ) 235 455 addrs2specs(reply_to_addrs(nil)) || default 236 456 end 237 457 458 # Destructively sets the "Reply-To:" field to the passed array of strings (which should be valid 459 # email addresses) 460 # 461 # Example: 462 # 463 # mail = TMail::Mail.new 464 # mail.reply_to = ["mikel@abc.com", "Mikel <mikel@xyz.com>"] 465 # mail.reply_to #=> ["mikel@abc.org", "mikel@xyz.org"] 466 # mail['reply_to'].to_s #=> "mikel@abc.com, Mikel <mikel@xyz.com>" 238 467 def reply_to=( *strs ) 239 468 set_string_array_attr 'Reply-To', strs 240 469 end 241 470 242 471 # Return a TMail::Addresses instance of the "Sender:" field of the mail object header. 472 # 473 # If the "Sender:" field does not exist, will return nil by default or the value you 474 # pass as the optional parameter. 475 # 476 # Example: 477 # 478 # mail = TMail::Mail.new 479 # mail.sender #=> nil 480 # mail.sender([]) #=> [] 481 # mail.sender = "Mikel <mikel@me.org>" 482 # mail.reply_to_addrs #=> [#<TMail::Address mikel@me.org>] 243 483 def sender_addr( default = nil ) 244 484 f = @header['sender'] or return default … … 246 486 end 247 487 488 # Destructively set the to value of the "Sender:" header to equal the passed in argument. 489 # 490 # TMail will parse your contents and turn each valid email address into a TMail::Address 491 # object before assigning it to the mail message. 492 # 493 # Example: 494 # 495 # mail = TMail::Mail.new 496 # mail.sender_addrs = "Mikel <mikel@me.org>, another Mikel <mikel@you.org>" 497 # mail.sender_addrs #=> [#<TMail::Address mikel@me.org>, #<TMail::Address mikel@you.org>] 248 498 def sender_addr=( addr ) 249 499 if addr … … 257 507 end 258 508 259 def sender( default ) 509 # Returns who the sender of this mail is as string instead to an Array of 510 # TMail::Address objects which is what Mail#sender_addr returns 511 # 512 # Example: 513 # 514 # mail = TMail::Mail.new 515 # mail.sender = "Mikel <mikel@me.org>" 516 # mail.sender #=> "mikel@me.org" 517 def sender( default = nil ) 260 518 f = @header['sender'] or return default 261 519 a = f.addr or return default … … 263 521 end 264 522 523 # Destructively sets the "Sender:" field to the passed string (which should be a valid 524 # email address) 525 # 526 # Example: 527 # 528 # mail = TMail::Mail.new 529 # mail.sender = "mikel@abc.com" 530 # mail.sender #=> "mikel@abc.org" 531 # mail['sender'].to_s #=> "mikel@abc.com" 265 532 def sender=( str ) 266 533 set_string_attr 'Sender', str 267 534 end 268 535 269 270 # 271 # subject 272 # 273 536 #== Subject methods 537 538 # Returns the subject of the mail instance. 539 # 540 # If the subject field does not exist, returns nil by default or you can pass in as 541 # the parameter for what you want the default value to be. 542 # 543 # Example: 544 # 545 # mail = TMail::Mail.new 546 # mail.subject #=> nil 547 # mail.subject("") #=> "" 548 # mail.subject = "Hello" 549 # mail.subject #=> "Hello" 274 550 def subject( default = nil ) 275 551 if h = @header['subject'] … … 281 557 alias quoted_subject subject 282 558 559 # Destructively sets the passed string as the subject of the mail message. 560 # 561 # Example 562 # 563 # mail = TMail::Mail.new 564 # mail.subject #=> "This subject" 565 # mail.subject = "Another subject" 566 # mail.subject #=> "Another subject" 283 567 def subject=( str ) 284 568 set_string_attr 'Subject', str 285 569 end 286 570 287 # 288 # identity & threading 289 # 290 571 #== Message Identity & Threading Methods 572 573 # Returns the message ID for this mail object instance. 574 # 575 # If the message_id field does not exist, returns nil by default or you can pass in as 576 # the parameter for what you want the default value to be. 577 # 578 # Example: 579 # 580 # mail = TMail::Mail.new 581 # mail.message_id #=> nil 582 # mail.message_id(TMail.new_message_id) #=> "<47404c5326d9c_2ad4fbb80161@baci.local.tmail>" 583 # mail.message_id = TMail.new_message_id 584 # mail.message_id #=> "<47404c5326d9c_2ad4fbb80161@baci.local.tmail>" 291 585 def message_id( default = nil ) 292 586 if h = @header['message-id'] … … 297 591 end 298 592 593 # Destructively sets the message ID of the mail object instance to the passed in string 594 # 595 # Example: 596 # 597 # mail = TMail::Mail.new 598 # mail.message_id = "this_is_my_badly_formatted_message_id" 599 # mail.message_id #=> "this_is_my_badly_formatted_message_id" 299 600 def message_id=( str ) 300 601 set_string_attr 'Message-Id', str 301 602 end 302 603 604 # Returns the "In-Reply-To:" field contents as an array of this mail instance if it exists 605 # 606 # If the in_reply_to field does not exist, returns nil by default or you can pass in as 607 # the parameter for what you want the default value to be. 608 # 609 # Example: 610 # 611 # mail = TMail::Mail.new 612 # mail.in_reply_to #=> nil 613 # mail.in_reply_to([]) #=> [] 614 # TMail::Mail.load("../test/fixtures/raw_email_reply") 615 # mail.in_reply_to #=> ["<348F04F142D69C21-291E56D292BC@xxxx.net>"] 303 616 def in_reply_to( default = nil ) 304 617 if h = @header['in-reply-to'] … … 309 622 end 310 623 624 # Destructively sets the value of the "In-Reply-To:" field of an email. 625 # 626 # Accepts an array of a single string of a message id 627 # 628 # Example: 629 # 630 # mail = TMail::Mail.new 631 # mail.in_reply_to = ["<348F04F142D69C21-291E56D292BC@xxxx.net>"] 632 # mail.in_reply_to #=> ["<348F04F142D69C21-291E56D292BC@xxxx.net>"] 311 633 def in_reply_to=( *idstrs ) 312 634 set_string_array_attr 'In-Reply-To', idstrs 313 635 end 314 636 637 # Returns the references of this email (prior messages relating to this message) 638 # as an array of message ID strings. Useful when you are trying to thread an 639 # email. 640 # 641 # If the references field does not exist, returns nil by default or you can pass in as 642 # the parameter for what you want the default value to be. 643 # 644 # Example: 645 # 646 # mail = TMail::Mail.new 647 # mail.references #=> nil 648 # mail.references([]) #=> [] 649 # mail = TMail::Mail.load("../test/fixtures/raw_email_reply") 650 # mail.references #=> ["<473FF3B8.9020707@xxx.org>", "<348F04F142D69C21-291E56D292BC@xxxx.net>"] 315 651 def references( default = nil ) 316 652 if h = @header['references'] … … 321 657 end 322 658 659 # Destructively sets the value of the "References:" field of an email. 660 # 661 # Accepts an array of strings of message IDs 662 # 663 # Example: 664 # 665 # mail = TMail::Mail.new 666 # mail.references = ["<348F04F142D69C21-291E56D292BC@xxxx.net>"] 667 # mail.references #=> ["<348F04F142D69C21-291E56D292BC@xxxx.net>"] 323 668 def references=( *strs ) 324 669 set_string_array_attr 'References', strs 325 670 end 326 671 327 # 328 # MIME headers 329 # 330 672 #== MIME header methods 673 674 # Returns the listed MIME version of this email from the "Mime-Version:" header field 675 # 676 # If the mime_version field does not exist, returns nil by default or you can pass in as 677 # the parameter for what you want the default value to be. 678 # 679 # Example: 680 # 681 # mail = TMail::Mail.new 682 # mail.mime_version #=> nil 683 # mail.mime_version([]) #=> [] 684 # mail = TMail::Mail.load("../test/fixtures/raw_email") 685 # mail.mime_version #=> "1.0" 331 686 def mime_version( default = nil ) 332 687 if h = @header['mime-version'] … … 351 706 end 352 707 708 # Returns the current "Content-Type" of the mail instance. 709 # 710 # If the content_type field does not exist, returns nil by default or you can pass in as 711 # the parameter for what you want the default value to be. 712 # 713 # Example: 714 # 715 # mail = TMail::Mail.new 716 # mail.content_type #=> nil 717 # mail.content_type([]) #=> [] 718 # mail = TMail::Mail.load("../test/fixtures/raw_email") 719 # mail.content_type #=> "text/plain" 353 720 def content_type( default = nil ) 354 721 if h = @header['content-type'] … … 359 726 end 360 727 728 # Returns the current main type of the "Content-Type" of the mail instance. 729 # 730 # If the content_type field does not exist, returns nil by default or you can pass in as 731 # the parameter for what you want the default value to be. 732 # 733 # Example: 734 # 735 # mail = TMail::Mail.new 736 # mail.main_type #=> nil 737 # mail.main_type([]) #=> [] 738 # mail = TMail::Mail.load("../test/fixtures/raw_email") 739 # mail.main_type #=> "text" 361 740 def main_type( default = nil ) 362 741 if h = @header['content-type'] … … 367 746 end 368 747 748 # Returns the current sub type of the "Content-Type" of the mail instance. 749 # 750 # If the content_type field does not exist, returns nil by default or you can pass in as 751 # the parameter for what you want the default value to be. 752 # 753 # Example: 754 # 755 # mail = TMail::Mail.new 756 # mail.sub_type #=> nil 757 # mail.sub_type([]) #=> [] 758 # mail = TMail::Mail.load("../test/fixtures/raw_email") 759 # mail.sub_type #=> "plain" 369 760 def sub_type( default = nil ) 370 761 if h = @header['content-type'] … … 375 766 end 376 767 768 # Destructively sets the "Content-Type:" header field of this mail object 769 # 770 # Allows you to set the main type, sub type as well as parameters to the field. 771 # The main type and sub type need to be a string. 772 # 773 # The optional params hash can be passed with keys as symbols and values as a string, 774 # or strings as keys and values. 775 # 776 # Example: 777 # 778 # mail = TMail::Mail.new 779 # mail.set_content_type("text", "plain") 780 # mail.to_s #=> "Content-Type: text/plain\n\n" 781 # 782 # mail.set_content_type("text", "plain", {:charset => "EUC-KR", :format => "flowed"}) 783 # mail.to_s #=> "Content-Type: text/plain; charset=EUC-KR; format=flowed\n\n" 784 # 785 # mail.set_content_type("text", "plain", {"charset" => "EUC-KR", "format" => "flowed"}) 786 # mail.to_s #=> "Content-Type: text/plain; charset=EUC-KR; format=flowed\n\n" 377 787 def set_content_type( str, sub = nil, param = nil ) 378 788 if sub … … 395 805 alias content_type= set_content_type 396 806 807 # Returns the named type parameter as a string, from the "Content-Type:" header. 808 # 809 # Example: 810 # 811 # mail = TMail::Mail.new 812 # mail.type_param("charset") #=> nil 813 # mail.type_param("charset", []) #=> [] 814 # mail.set_content_type("text", "plain", {:charset => "EUC-KR", :format => "flowed"}) 815 # mail.type_param("charset") #=> "EUC-KR" 816 # mail.type_param("format") #=> "flowed" 397 817 def type_param( name, default = nil ) 398 818 if h = @header['content-type'] … … 403 823 end 404 824 825 # Returns the character set of the email. Returns nil if no encoding set or returns 826 # whatever default you pass as a parameter - note passing the parameter does NOT change 827 # the mail object in any way. 828 # 829 # Example: 830 # 831 # mail = TMail::Mail.load("path_to/utf8_email") 832 # mail.charset #=> "UTF-8" 833 # 834 # mail = TMail::Mail.new 835 # mail.charset #=> nil 836 # mail.charset("US-ASCII") #=> "US-ASCII" 405 837 def charset( default = nil ) 406 838 if h = @header['content-type'] … … 411 843 end 412 844 845 # Destructively sets the character set used by this mail object to the passed string, you 846 # should note though that this does nothing to the mail body, just changes the header 847 # value, you will need to transliterate the body as wel