x bugfix: contacts.txt isn't parsed correctly when there are spaces in
aliases
x bugfix: @ signs in names make sendmail die silently
-_ bugfix: sent.mbox and >From
-_ bugfix: tokenized email addresses (amazon.com, etc)
+x bugfix: sent.mbox and >From
+x bugfix: tokenized email addresses (amazon.com, etc)
x bugfix: trailing spaces in buffermanager.ask
x bugfix: need to URL-unescape maildir folders
x bugfix: downcasing tab completion
@f.seek offset
begin
RMail::Mailbox::MBoxReader.new(@f).each_message do |input|
- return RMail::Parser.read(input)
+ m = RMail::Parser.read(input)
+ if m.body
+ m.body.gsub!(/^>From /, "From ")
+ end
+ return m
end
rescue RMail::Parser::Error => e
raise FatalSourceError, "error parsing mbox file: #{e.message}"
BufferManager.flash "Sending..."
begin
- IO.popen(acct.sendmail, "w") { |p| write_full_message_to p, date }
+ IO.popen(acct.sendmail, "w") { |p| write_full_message_to p, date, false }
raise SendmailCommandFailed, "Couldn't execute #{acct.sendmail}" unless $? == 0
- SentManager.write_sent_message(date, from_email) { |f| write_full_message_to f, date }
+ SentManager.write_sent_message(date, from_email) { |f| write_full_message_to f, date, true }
BufferManager.kill_buffer buffer
BufferManager.flash "Message sent!"
true
BufferManager.flash "Saved for later editing."
end
- def write_full_message_to f, date=Time.now
+ def write_full_message_to f, date=Time.now, escape=false
m = RMail::Message.new
@header.each do |k, v|
next if v.nil? || v.empty?
if @attachments.empty?
m.header["Content-Type"] = "text/plain; charset=#{$encoding}"
m.body = @body.join
+ m.body = sanitize_body m.body if escape
m.body += sig_lines.join("\n") unless $config[:edit_signature]
else
body_m = RMail::Message.new
body_m.body = @body.join
+ body_m.body = sanitize_body body_m.body if escape
body_m.body += sig_lines.join("\n") unless $config[:edit_signature]
body_m.header["Content-Type"] = "text/plain; charset=#{$encoding}"
body_m.header["Content-Disposition"] = "inline"
f.puts m.to_s
end
+ ## TODO: remove this. redundant with write_full_message_to.
+ ##
## this is going to change soon: draft messages (currently written
## with full=false) will be output as yaml.
def write_message f, full=true, date=Time.now
end
f.puts
- f.puts @body.map { |l| l =~ /^From / ? ">#{l}" : l }
+ f.puts sanitize_body(@body.join)
f.puts sig_lines if full unless $config[:edit_signature]
end
private
+ def sanitize_body body
+ body.gsub(/^From /, ">From ")
+ end
+
def mentions_attachments?
@body.any? { |l| l =~ /^[^>]/ && l =~ /\battach(ment|ed|ing|)\b/i }
end