[PATCH v2 3/3] vim: improve the way messages are sent

2014-05-01 Thread Felipe Contreras
We want the proper encoding and content-type to be set when sending the
mail, but human-readable plain-text for composing. So split the code in
two parts: the presentation and the transport conversion.

This fixes an issue while sending non-ascii mails to strict servers; the
mail needs to be encoded.

Signed-off-by: Felipe Contreras 
---
 vim/notmuch.vim | 34 +-
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/vim/notmuch.vim b/vim/notmuch.vim
index 0cb94f6..331e930 100644
--- a/vim/notmuch.vim
+++ b/vim/notmuch.vim
@@ -86,17 +86,22 @@ endfunction
 function! s:compose_send()
let b:compose_done = 1
let fname = expand('%')
+   let lines = getline(5, '$')
 
-   " remove headers
-   0,4d
-   write
+ruby << EOF
+   # Generate proper mail to send
+   text = VIM::evaluate('lines').join("\n")
+   fname = VIM::evaluate('fname')
+   transport = Mail.new(text)
+   transport.message_id = generate_message_id
+   transport.charset = 'utf-8'
+   File.write(fname, transport.to_s)
+EOF
 
let cmdtxt = g:notmuch_sendmail . ' -t -f ' . s:reply_from . ' < ' . 
fname
let out = system(cmdtxt)
let err = v:shell_error
if err
-   undo
-   write
echohl Error
echo 'Eeek! unable to send mail'
echo out
@@ -572,9 +577,7 @@ ruby << EOF
end
m.cc = orig[:cc]
m.from = $email
-   m.message_id = generate_message_id
m.charset = 'utf-8'
-   m.content_transfer_encoding = '7bit'
end
 
lines = []
@@ -600,7 +603,7 @@ ruby << EOF
 
reply.body = body_lines.join("\n")
 
-   lines += reply.to_s.lines.map { |e| e.chomp }
+   lines += reply.present.lines.map { |e| e.chomp }
lines << ""
 
cur = lines.count - 1
@@ -611,18 +614,13 @@ ruby << EOF
def open_compose()
lines = []
 
-   lines << "Date: #{Time.now().strftime('%a, %-d %b %Y %T %z')}"
lines << "From: #{$email}"
lines << "To: "
cur = lines.count
 
lines << "Cc: "
lines << "Bcc: "
-   lines << "Message-Id: #{generate_message_id}"
lines << "Subject: "
-   lines << "Mime-Version: 1.0"
-   lines << "Content-Type: text/plain; charset=utf-8"
-   lines << "Content-Transfer-Encoding: 7bit"
lines << ""
lines << ""
lines << ""
@@ -928,6 +926,16 @@ ruby << EOF
end
text
end
+
+   def present
+   buffer = ''
+   header.fields.each do |f|
+   buffer << "%s: %s\r\n" % [f.name, 
f.to_s]
+   end
+   buffer << "\r\n"
+   buffer << body.to_s
+   buffer
+   end
end
end
 
-- 
1.9.2+fc1.19.g85b6256

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


[PATCH v2 3/3] vim: improve the way messages are sent

2014-05-01 Thread Felipe Contreras
We want the proper encoding and content-type to be set when sending the
mail, but human-readable plain-text for composing. So split the code in
two parts: the presentation and the transport conversion.

This fixes an issue while sending non-ascii mails to strict servers; the
mail needs to be encoded.

Signed-off-by: Felipe Contreras 
---
 vim/notmuch.vim | 34 +-
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/vim/notmuch.vim b/vim/notmuch.vim
index 0cb94f6..331e930 100644
--- a/vim/notmuch.vim
+++ b/vim/notmuch.vim
@@ -86,17 +86,22 @@ endfunction
 function! s:compose_send()
let b:compose_done = 1
let fname = expand('%')
+   let lines = getline(5, '$')

-   " remove headers
-   0,4d
-   write
+ruby << EOF
+   # Generate proper mail to send
+   text = VIM::evaluate('lines').join("\n")
+   fname = VIM::evaluate('fname')
+   transport = Mail.new(text)
+   transport.message_id = generate_message_id
+   transport.charset = 'utf-8'
+   File.write(fname, transport.to_s)
+EOF

let cmdtxt = g:notmuch_sendmail . ' -t -f ' . s:reply_from . ' < ' . 
fname
let out = system(cmdtxt)
let err = v:shell_error
if err
-   undo
-   write
echohl Error
echo 'Eeek! unable to send mail'
echo out
@@ -572,9 +577,7 @@ ruby << EOF
end
m.cc = orig[:cc]
m.from = $email
-   m.message_id = generate_message_id
m.charset = 'utf-8'
-   m.content_transfer_encoding = '7bit'
end

lines = []
@@ -600,7 +603,7 @@ ruby << EOF

reply.body = body_lines.join("\n")

-   lines += reply.to_s.lines.map { |e| e.chomp }
+   lines += reply.present.lines.map { |e| e.chomp }
lines << ""

cur = lines.count - 1
@@ -611,18 +614,13 @@ ruby << EOF
def open_compose()
lines = []

-   lines << "Date: #{Time.now().strftime('%a, %-d %b %Y %T %z')}"
lines << "From: #{$email}"
lines << "To: "
cur = lines.count

lines << "Cc: "
lines << "Bcc: "
-   lines << "Message-Id: #{generate_message_id}"
lines << "Subject: "
-   lines << "Mime-Version: 1.0"
-   lines << "Content-Type: text/plain; charset=utf-8"
-   lines << "Content-Transfer-Encoding: 7bit"
lines << ""
lines << ""
lines << ""
@@ -928,6 +926,16 @@ ruby << EOF
end
text
end
+
+   def present
+   buffer = ''
+   header.fields.each do |f|
+   buffer << "%s: %s\r\n" % [f.name, 
f.to_s]
+   end
+   buffer << "\r\n"
+   buffer << body.to_s
+   buffer
+   end
end
end

-- 
1.9.2+fc1.19.g85b6256