vmail 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/NOTES +7 -2
- data/README.markdown +310 -72
- data/lib/vmail.rb +8 -0
- data/lib/vmail.vim +53 -21
- data/lib/vmail/imap_client.rb +19 -4
- data/lib/vmail/message_formatter.rb +32 -11
- data/lib/vmail/options.rb +14 -13
- data/lib/vmail/version.rb +1 -1
- data/test/fixtures/rfc_part.eml +306 -0
- data/test/message_formatter_test.rb +12 -1
- data/vmail.gemspec +3 -3
- data/website/.gitignore +1 -0
- data/website/bottom.markdown +20 -0
- data/website/gen.rb +22 -0
- data/website/images-vmail/1-small.png +0 -0
- data/website/images-vmail/1.png +0 -0
- data/website/images-vmail/attach-small.png +0 -0
- data/website/images-vmail/attach.png +0 -0
- data/website/images-vmail/autocomplete-small.png +0 -0
- data/website/images-vmail/autocomplete.png +0 -0
- data/website/lightbox2/css/lightbox.css +27 -0
- data/website/lightbox2/images/bullet.gif +0 -0
- data/website/lightbox2/images/close.gif +0 -0
- data/website/lightbox2/images/closelabel.gif +0 -0
- data/website/lightbox2/images/donate-button.gif +0 -0
- data/website/lightbox2/images/download-icon.gif +0 -0
- data/website/lightbox2/images/image-1.jpg +0 -0
- data/website/lightbox2/images/loading.gif +0 -0
- data/website/lightbox2/images/nextlabel.gif +0 -0
- data/website/lightbox2/images/prevlabel.gif +0 -0
- data/website/lightbox2/images/thumb-1.jpg +0 -0
- data/website/lightbox2/index.html +63 -0
- data/website/lightbox2/js/builder.js +136 -0
- data/website/lightbox2/js/effects.js +1122 -0
- data/website/lightbox2/js/lightbox.js +498 -0
- data/website/lightbox2/js/prototype.js +4221 -0
- data/website/lightbox2/js/scriptaculous.js +58 -0
- data/website/stylesheets-vmail/960.css +1 -0
- data/website/stylesheets-vmail/reset.css +1 -0
- data/website/stylesheets-vmail/site.css +59 -0
- data/website/stylesheets-vmail/syntax-colors.css +33 -0
- data/website/stylesheets-vmail/text.css +1 -0
- data/website/top.markdown +9 -0
- data/website/vmail-template.html +50 -0
- data/website/vmail.html +438 -0
- metadata +48 -10
- data/gmail.vim +0 -180
- data/wrapper.rb +0 -8
data/lib/vmail.vim
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
let s:mailbox = $VMAIL_MAILBOX
|
2
2
|
let s:query = $VMAIL_QUERY
|
3
|
+
let s:browser_command = $VMAIL_BROWSER
|
3
4
|
let s:append_file = ''
|
4
5
|
|
5
6
|
let s:drb_uri = $DRB_URI
|
@@ -23,7 +24,7 @@ let s:forward_template_command = s:client_script . "forward_template "
|
|
23
24
|
let s:deliver_command = s:client_script . "deliver "
|
24
25
|
let s:save_draft_command = s:client_script . "save_draft "
|
25
26
|
let s:save_attachments_command = s:client_script . "save_attachments "
|
26
|
-
let s:
|
27
|
+
let s:open_html_part_command = s:client_script . "open_html_part "
|
27
28
|
let s:message_bufname = "MessageWindow"
|
28
29
|
|
29
30
|
function! VmailStatusLine()
|
@@ -141,7 +142,6 @@ function! s:show_raw()
|
|
141
142
|
setlocal nomodifiable
|
142
143
|
endfunction
|
143
144
|
|
144
|
-
|
145
145
|
function! s:focus_list_window()
|
146
146
|
let winnr = bufwinnr(s:listbufnr)
|
147
147
|
if winnr == -1
|
@@ -155,10 +155,10 @@ function! s:focus_list_window()
|
|
155
155
|
if has("syntax")
|
156
156
|
syn clear
|
157
157
|
syn match BufferFlagged /^.*[*].*$/hs=s
|
158
|
-
hi def BufferFlagged ctermfg=red
|
158
|
+
hi def BufferFlagged ctermfg=red
|
159
159
|
endif
|
160
160
|
" vertically center the cursor line
|
161
|
-
normal z.
|
161
|
+
" normal z.
|
162
162
|
call feedkeys("\<c-l>") " prevents screen artifacts when user presses return too fast
|
163
163
|
endfunction
|
164
164
|
|
@@ -256,6 +256,8 @@ func! s:delete_messages(flag) range
|
|
256
256
|
if len(uids) > 2
|
257
257
|
call feedkeys("\<cr>")
|
258
258
|
endif
|
259
|
+
call s:focus_message_window()
|
260
|
+
close
|
259
261
|
redraw
|
260
262
|
echo len(uids) . " message" . (len(uids) == 1 ? '' : 's') . " marked " . a:flag
|
261
263
|
endfunc
|
@@ -278,11 +280,12 @@ func! s:archive_messages() range
|
|
278
280
|
exec a:firstline . "," . a:lastline . "delete"
|
279
281
|
setlocal nomodifiable
|
280
282
|
write
|
283
|
+
call s:focus_message_window()
|
284
|
+
close
|
281
285
|
redraw
|
282
286
|
echo len(uids) . " message" . (len(uids) == 1 ? '' : 's') . " archived"
|
283
287
|
endfunc
|
284
288
|
|
285
|
-
|
286
289
|
" --------------------------------------------------------------------------------
|
287
290
|
" append text bodies of a set of messages to a file
|
288
291
|
func! s:append_messages_to_file() range
|
@@ -445,6 +448,10 @@ function! s:select_mailbox()
|
|
445
448
|
close
|
446
449
|
call s:focus_message_window()
|
447
450
|
close
|
451
|
+
" check if mailbox is a real mailbox
|
452
|
+
if (index(s:mailboxes, mailbox) == -1)
|
453
|
+
return
|
454
|
+
endif
|
448
455
|
let s:mailbox = mailbox
|
449
456
|
let command = s:select_mailbox_command . shellescape(s:mailbox)
|
450
457
|
call system(command)
|
@@ -581,8 +588,12 @@ function! CompleteContact(findstart, base)
|
|
581
588
|
endwhile
|
582
589
|
return start
|
583
590
|
else
|
584
|
-
" find contacts
|
585
|
-
|
591
|
+
" find contacts
|
592
|
+
" model regex: match at beginning of line, or inside < > wrapping
|
593
|
+
" email addr
|
594
|
+
" '\(^ho\|<ho\)'
|
595
|
+
let regex = shellescape('\(^' . a:base . '\|<' . a:base . '\)')
|
596
|
+
let matches = system("grep -i " . regex . " " . $VMAIL_CONTACTS_FILE)
|
586
597
|
return split(matches, "\n")
|
587
598
|
endif
|
588
599
|
endfun
|
@@ -599,6 +610,7 @@ function! s:send_message()
|
|
599
610
|
call system(s:deliver_command, mail)
|
600
611
|
redraw
|
601
612
|
echo "sent! press q to go back to message list"
|
613
|
+
redraw
|
602
614
|
endfunction
|
603
615
|
|
604
616
|
func! s:save_draft()
|
@@ -616,10 +628,11 @@ endfunc
|
|
616
628
|
|
617
629
|
" call from inside message window with <Leader>h
|
618
630
|
func! s:open_html_part()
|
619
|
-
let command = s:
|
631
|
+
let command = s:open_html_part_command . s:current_uid
|
632
|
+
" the command saves the html part to a local file
|
620
633
|
let outfile = system(command)
|
621
634
|
" todo: allow user to change open in browser command?
|
622
|
-
exec "!
|
635
|
+
exec "!" . s:browser_command . ' ' . outfile
|
623
636
|
endfunc
|
624
637
|
|
625
638
|
func! s:save_attachments()
|
@@ -633,15 +646,19 @@ func! s:save_attachments()
|
|
633
646
|
endfunc
|
634
647
|
" --------------------------------------------------------------------------------
|
635
648
|
|
636
|
-
func! s:
|
649
|
+
func! s:maximize_window()
|
637
650
|
if winnr('$') > 1
|
638
651
|
only
|
639
|
-
normal z.
|
640
|
-
else
|
641
|
-
call feedkeys("\<cr>")
|
652
|
+
" normal z.
|
642
653
|
endif
|
643
654
|
endfunc
|
644
655
|
|
656
|
+
func! s:open_href()
|
657
|
+
call search("http:", 'c')
|
658
|
+
let href = matchstr(getline(line('.')), 'http\S\+')
|
659
|
+
let command = "!" . s:browser_command . ' ' . shellescape(href)
|
660
|
+
exec command
|
661
|
+
endfunc
|
645
662
|
|
646
663
|
" --------------------------------------------------------------------------------
|
647
664
|
" MAPPINGS
|
@@ -653,8 +670,6 @@ func! s:message_window_mappings()
|
|
653
670
|
noremap <silent> <buffer> <Leader>R :call <SID>show_raw()<cr>
|
654
671
|
noremap <silent> <buffer> <Leader>R :call <SID>show_raw()<cr>
|
655
672
|
noremap <silent> <buffer> <Leader>f :call <SID>compose_forward()<CR><cr>
|
656
|
-
" TODO improve this
|
657
|
-
noremap <silent> <buffer> <Leader>o yE :!open '<C-R>"'<CR><CR>
|
658
673
|
noremap <silent> <buffer> <c-j> :call <SID>show_next_message()<CR>
|
659
674
|
noremap <silent> <buffer> <c-k> :call <SID>show_previous_message()<CR>
|
660
675
|
nmap <silent> <buffer> <leader>j <c-j>
|
@@ -662,8 +677,12 @@ func! s:message_window_mappings()
|
|
662
677
|
noremap <silent> <buffer> <Leader>c :call <SID>compose_message()<CR>
|
663
678
|
noremap <silent> <buffer> <Leader>h :call <SID>open_html_part()<CR><cr>
|
664
679
|
nnoremap <silent> <buffer> q :close<cr>
|
680
|
+
|
665
681
|
nnoremap <silent> <buffer> <leader># :call <SID>focus_list_window()<cr>:call <SID>delete_messages("Deleted")<cr>
|
682
|
+
nmap <silent> <buffer> <leader>d <leader>#
|
666
683
|
nnoremap <silent> <buffer> <leader>* :call <SID>focus_list_window()<cr>:call <SID>toggle_star()<cr>
|
684
|
+
nmap <silent> <buffer> s <leader>*
|
685
|
+
|
667
686
|
nnoremap <silent> <buffer> <Leader>b :call <SID>focus_list_window()<cr>call <SID>move_to_mailbox(0)<CR>
|
668
687
|
nnoremap <silent> <buffer> <Leader>B :call <SID>focus_list_window()<cr>call <SID>move_to_mailbox(1)<CR>
|
669
688
|
nnoremap <silent> <buffer> <leader>e :call <SID>focus_list_window()<cr>:call <SID>archive_messages()<cr>
|
@@ -671,14 +690,18 @@ func! s:message_window_mappings()
|
|
671
690
|
nnoremap <silent> <buffer> <Leader>m :call <SID>focus_list_window()<cr>:call <SID>mailbox_window()<CR>
|
672
691
|
nnoremap <silent> <buffer> <Leader>A :call <SID>save_attachments()<cr>
|
673
692
|
" go fullscreen
|
674
|
-
nnoremap <silent> <buffer> <Space> :call <SID>
|
693
|
+
nnoremap <silent> <buffer> <Space> :call <SID>maximize_window()<cr>
|
675
694
|
endfunc
|
676
695
|
|
677
696
|
func! s:message_list_window_mappings()
|
678
697
|
noremap <silent> <buffer> <cr> :call <SID>show_message()<CR>
|
679
698
|
noremap <silent> <buffer> q :qal!<cr>
|
699
|
+
|
680
700
|
noremap <silent> <buffer> <leader>* :call <SID>toggle_star()<CR>
|
701
|
+
nmap <silent> <buffer> s <leader>*
|
681
702
|
noremap <silent> <buffer> <leader># :call <SID>delete_messages("Deleted")<CR>
|
703
|
+
nmap <silent> <buffer> <leader>d <leader>#
|
704
|
+
|
682
705
|
noremap <silent> <buffer> <leader>! :call <SID>delete_messages("[Gmail]/Spam")<CR>
|
683
706
|
noremap <silent> <buffer> <leader>e :call <SID>archive_messages()<CR>
|
684
707
|
"open a link browser (os x)
|
@@ -694,18 +717,27 @@ func! s:message_list_window_mappings()
|
|
694
717
|
noremap <silent> <buffer> <Leader>a :call <SID>show_message()<cr>:call <SID>compose_reply(1)<CR>
|
695
718
|
noremap <silent> <buffer> <c-j> :call <SID>show_next_message_in_list()<cr>
|
696
719
|
noremap <silent> <buffer> <c-k> :call <SID>show_previous_message_in_list()<cr>
|
697
|
-
nnoremap <silent> <buffer> <Space> :call <SID>
|
720
|
+
nnoremap <silent> <buffer> <Space> :call <SID>maximize_window()<cr>
|
698
721
|
endfunc
|
699
722
|
|
700
723
|
func! s:compose_window_mappings()
|
701
|
-
" NOTE send_message is a global mapping, so user can load a saved
|
702
|
-
" message from a file and send it
|
703
|
-
nnoremap <silent> <Leader>vs :call <SID>send_message()<CR>
|
704
|
-
nnoremap <silent> <buffer> <Leader>vd :call <SID>save_draft()<CR>
|
705
724
|
noremap <silent> <buffer> <leader>q :call <SID>cancel_compose()<cr>
|
706
725
|
nmap <silent> <buffer> q <leader>q
|
707
726
|
endfunc
|
708
727
|
|
728
|
+
func! s:global_mappings()
|
729
|
+
" NOTE send_message is a global mapping, so user can load a saved
|
730
|
+
" message from a file and send it
|
731
|
+
nnoremap <silent> <leader>vs :call <SID>send_message()<CR>
|
732
|
+
nnoremap <silent> <leader>vd :call <SID>save_draft()<CR>
|
733
|
+
noremap <silent> <leader>o :call <SID>open_href()<cr>
|
734
|
+
endfunc
|
735
|
+
|
736
|
+
"TODO see if using LocalLeader and maplocalleader makes more sense
|
737
|
+
let mapleader = ","
|
738
|
+
|
739
|
+
call s:global_mappings()
|
740
|
+
|
709
741
|
call s:create_list_window()
|
710
742
|
|
711
743
|
call s:create_message_window()
|
data/lib/vmail/imap_client.rb
CHANGED
@@ -91,7 +91,15 @@ module Vmail
|
|
91
91
|
@imap.uid_fetch(uid_set, ["FLAGS", "ENVELOPE", "RFC822.SIZE" ])
|
92
92
|
end
|
93
93
|
log "extracting headers"
|
94
|
-
lines = results.
|
94
|
+
lines = results.
|
95
|
+
sort_by {|x|
|
96
|
+
begin
|
97
|
+
Time.parse(x.attr['ENVELOPE'].date)
|
98
|
+
rescue ArgumentError
|
99
|
+
Time.now
|
100
|
+
end
|
101
|
+
}.
|
102
|
+
map {|x| format_header(x, max_uid)}
|
95
103
|
log "returning result"
|
96
104
|
return lines.join("\n")
|
97
105
|
end
|
@@ -118,7 +126,12 @@ module Vmail
|
|
118
126
|
total_recips = (envelope.to + envelope.cc).size
|
119
127
|
address += " + #{total_recips - 1}"
|
120
128
|
end
|
121
|
-
date =
|
129
|
+
date = begin
|
130
|
+
Time.parse(envelope.date).localtime
|
131
|
+
rescue ArgumentError
|
132
|
+
Time.now
|
133
|
+
end
|
134
|
+
|
122
135
|
date_formatted = if date.year != Time.now.year
|
123
136
|
date.strftime "%b %d %Y" rescue envelope.date.to_s
|
124
137
|
else
|
@@ -239,7 +252,6 @@ module Vmail
|
|
239
252
|
@current_mail = mail # used later to show raw message or extract attachments if any
|
240
253
|
log "saving current mail with parts: #{@current_mail.parts.inspect}"
|
241
254
|
formatter = Vmail::MessageFormatter.new(mail)
|
242
|
-
part = formatter.find_text_part
|
243
255
|
out = formatter.process_body
|
244
256
|
size = fetch_data.attr["RFC822.SIZE"]
|
245
257
|
@current_message = <<-EOF
|
@@ -249,6 +261,9 @@ module Vmail
|
|
249
261
|
|
250
262
|
#{out}
|
251
263
|
EOF
|
264
|
+
rescue
|
265
|
+
log "parsing error"
|
266
|
+
"Error encountered parsing this message:\n#{$!}"
|
252
267
|
end
|
253
268
|
|
254
269
|
def format_parts_info(parts)
|
@@ -483,7 +498,7 @@ EOF
|
|
483
498
|
@current_mail.body
|
484
499
|
end
|
485
500
|
return if html_part.nil?
|
486
|
-
outfile = 'htmlpart.html'
|
501
|
+
outfile = 'vmail-htmlpart.html'
|
487
502
|
File.open(outfile, 'w') {|f| f.puts(html_part.decoded)}
|
488
503
|
# client should handle opening the html file
|
489
504
|
return outfile
|
@@ -25,31 +25,52 @@ module Vmail
|
|
25
25
|
lines.flatten
|
26
26
|
end
|
27
27
|
|
28
|
-
def process_body
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
def process_body(target = @mail)
|
29
|
+
if target.header['Content-Type'].to_s =~ /multipart\/mixed/
|
30
|
+
target.parts.map {|part|
|
31
|
+
if part.multipart?
|
32
|
+
part = find_text_or_html_part(target.parts)
|
33
|
+
format_part(part)
|
34
|
+
else
|
35
|
+
format_part(part)
|
36
|
+
end
|
37
|
+
}.join("\n#{'-' * 39}\n")
|
38
|
+
elsif target.header['Content-Type'].to_s =~ /multipart\/alternative/
|
39
|
+
part = find_text_or_html_part(target.parts)
|
40
|
+
format_part(part)
|
41
|
+
else
|
42
|
+
format_part(target)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def format_part(part)
|
47
|
+
if part && part.respond_to?(:header)
|
48
|
+
case part.header["Content-Type"].to_s
|
49
|
+
when /text\/html/
|
34
50
|
format_html_body(part)
|
35
|
-
|
51
|
+
when /text\/plain/
|
52
|
+
format_text_body(part)
|
53
|
+
when /message\/rfc/
|
54
|
+
m = Mail.new(part.body.decoded)
|
55
|
+
process_body(m)
|
56
|
+
else # just format_text on it anyway
|
36
57
|
format_text_body(part)
|
37
58
|
end
|
38
59
|
else
|
39
|
-
"NO BODY"
|
60
|
+
"[NO BODY]"
|
40
61
|
end
|
41
62
|
rescue
|
42
63
|
puts $!
|
43
|
-
|
64
|
+
"[error:] #{$!}"
|
44
65
|
end
|
45
66
|
|
46
|
-
def
|
67
|
+
def find_text_or_html_part(parts = @mail.parts)
|
47
68
|
if parts.empty?
|
48
69
|
return @mail
|
49
70
|
end
|
50
71
|
part = parts.detect {|part| part.multipart?}
|
51
72
|
if part
|
52
|
-
|
73
|
+
find_text_or_html_part(part.parts)
|
53
74
|
else
|
54
75
|
# no multipart part
|
55
76
|
part = parts.detect {|part| (part.header["Content-Type"].to_s =~ /text\/plain/) }
|
data/lib/vmail/options.rb
CHANGED
@@ -57,6 +57,8 @@ EOF
|
|
57
57
|
if @contacts_file.nil?
|
58
58
|
puts "No contacts file found for auto-completion. See help for how to generate it."
|
59
59
|
sleep 0.5
|
60
|
+
else
|
61
|
+
puts "Using contacts file #{@contacts_file}"
|
60
62
|
end
|
61
63
|
|
62
64
|
@config = YAML::load(File.read(@config_file))
|
@@ -96,34 +98,33 @@ EOF
|
|
96
98
|
INSTRUCTIONS = <<-EOF
|
97
99
|
CONFIGURATION FILE
|
98
100
|
|
99
|
-
To run vmail,
|
100
|
-
|
101
|
-
|
101
|
+
To run vmail, create a yaml file called .vmailrc and save it either in the
|
102
|
+
current directory (the directory from which you launch vmail) or in your home
|
103
|
+
directory.
|
102
104
|
|
103
|
-
|
105
|
+
The .vmailrc file should look something like this. Substitute your own values.
|
104
106
|
|
105
107
|
username: dhchoi@gmail.com
|
106
108
|
password: password
|
107
109
|
name: Daniel Choi
|
108
110
|
signature: |
|
109
111
|
--
|
110
|
-
Sent via vmail.
|
112
|
+
Sent via vmail. http://danielchoi.com/software/vmail.html
|
111
113
|
|
112
|
-
This file should be formatted
|
114
|
+
This file should be formatted in YAML syntax.
|
113
115
|
http://www.yaml.org/spec/1.2/spec.html
|
114
116
|
|
115
117
|
You can omit the password key-value pair if you'd rather not have the password
|
116
|
-
|
118
|
+
saved in the file. In that case, you'll prompted for the password each time you
|
117
119
|
start vmail.
|
118
120
|
|
119
121
|
CONTACTS AUTOCOMPLETION
|
120
122
|
|
121
|
-
|
122
|
-
To use this feature, generate a
|
123
|
-
home directory. This is a simple list of
|
123
|
+
vmail uses vim autocompletion to help you auto-complete email addresses.
|
124
|
+
To use this feature, generate a vmail-contacts.txt file in the current or
|
125
|
+
home directory. This is a simple list of your email contacts.
|
124
126
|
Invoking vmail with the -g option generates this file for you by
|
125
|
-
collecting all the recipients and cc's from your last 500
|
126
|
-
emails.
|
127
|
-
|
127
|
+
collecting all the recipients and cc's from your last 500 sent
|
128
|
+
emails. You can adjust this number by using -g with a number argument.
|
128
129
|
EOF
|
129
130
|
end
|
data/lib/vmail/version.rb
CHANGED
@@ -0,0 +1,306 @@
|
|
1
|
+
Return-Path: <Joshua.Robin@state.ma.us>
|
2
|
+
Received: by 10.213.2.204 with SMTP id 12cs7788ebk; Mon, 13 Dec 2010 17:30:19 -0800
|
3
|
+
Received: by 10.229.246.82 with SMTP id lx18mr4342235qcb.0.1292290218892; Mon, 13 Dec 2010 17:30:18 -0800
|
4
|
+
Received: from mmp-mitc-1.state.ma.us (mmp-mitc-1.state.ma.us [170.63.135.243]) by mx.google.com with ESMTP id p9si13679281qcg.75.2010.12.13.17.30.18; Mon, 13 Dec 2010 17:30:18 -0800
|
5
|
+
Received: from state.ma.us (itd-smtp-dmz.state.ma.us [170.63.135.245]) by mmp-mitc-1.state.ma.us with ESMTP id BT-MMP-56018; Mon, 13 Dec 2010 20:30:17 -0500
|
6
|
+
Received: from ([146.243.132.136]) by CF-Appliance-01.state.ma.us with ESMTP id 5503384.856631672; Mon, 13 Dec 2010 20:30:13 -0500
|
7
|
+
Received: from 146.243.132.243 ([146.243.132.243]) by
|
8
|
+
EOT-MAIL.MHD.Root.eot.gov ([146.243.132.237]) with Microsoft Exchange Server
|
9
|
+
HTTP-DAV ; Tue, 14 Dec 2010 01:30:37 +0000
|
10
|
+
Date: Mon, 13 Dec 2010 20:30:18 -0500
|
11
|
+
From: "Robin, Joshua \(DOT\)" <Joshua.Robin@state.ma.us>
|
12
|
+
To: "Robin, Joshua (DOT)" <Joshua.Robin@state.ma.us>
|
13
|
+
Message-ID: <020a01cb9b2e$829914e7$f384f392@MHD.Root.eot.gov>
|
14
|
+
Subject: Fwd: MassDOT Developers Holiday Meeting - Next Tuesday, December 14,
|
15
|
+
2010
|
16
|
+
Mime-Version: 1.0
|
17
|
+
Content-Type: multipart/mixed;
|
18
|
+
boundary="----=_NextPart_000_020B_01CB9B2E.829914E7";
|
19
|
+
charset=UTF-8
|
20
|
+
Content-Transfer-Encoding: 7bit
|
21
|
+
Delivered-To: dhchoi@gmail.com
|
22
|
+
Received-SPF: pass (google.com: best guess record for domain of
|
23
|
+
Joshua.Robin@state.ma.us designates 170.63.135.243 as permitted sender)
|
24
|
+
client-ip=170.63.135.243;
|
25
|
+
Authentication-Results: mx.google.com; spf=pass (google.com: best guess record
|
26
|
+
for domain of Joshua.Robin@state.ma.us designates 170.63.135.243 as permitted
|
27
|
+
sender) smtp.mail=Joshua.Robin@state.ma.us
|
28
|
+
x-mimeole: Produced By Microsoft Exchange V6.5
|
29
|
+
Thread-Topic: MassDOT Developers Holiday Meeting - Next Tuesday, December 14,
|
30
|
+
2010
|
31
|
+
Thread-Index: AcubLoKZqc0CaHEvTHevxE1vULW7fw==
|
32
|
+
Importance: Normal
|
33
|
+
|
34
|
+
This is a multi-part message in MIME format.
|
35
|
+
|
36
|
+
------=_NextPart_000_020B_01CB9B2E.829914E7
|
37
|
+
Date: Mon, 13 Dec 2010 21:18:42 -0500
|
38
|
+
Mime-Version: 1.0
|
39
|
+
Content-Type: multipart/alternative;
|
40
|
+
boundary="----=_Part_1_1292290225853";
|
41
|
+
charset=UTF-8
|
42
|
+
Content-Transfer-Encoding: 7bit
|
43
|
+
Content-ID: <4d06d4022052a_23e680983d90322e7@spartan.local.mail>
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
------=_Part_1_1292290225853
|
48
|
+
Date: Mon, 13 Dec 2010 21:18:42 -0500
|
49
|
+
Mime-Version: 1.0
|
50
|
+
Content-Type: text/plain;
|
51
|
+
charset=utf-8
|
52
|
+
Content-Transfer-Encoding: base64
|
53
|
+
Content-Disposition: inline
|
54
|
+
Content-ID: <4d06d4021e1fa_23e680983d9032041@spartan.local.mail>
|
55
|
+
|
56
|
+
DQpKdXN0IGEgcmVtaW5kZXIgYWJvdXQgVHVlc2RheSdzIGRldmVsb3BlciBt
|
57
|
+
ZWV0aW5nLiBEZXRhaWxzIGJlbG93LgoKQmVzdCwKSm9zaAoKSm9zaHVhIEsu
|
58
|
+
IFJvYmluCjYxNy41MDYuOTEzNwoKLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2Ug
|
59
|
+
LS0tLS0KRnJvbTogIkpvc2ggZnJvbSBNYXNzRE9UIiA8Sm9zaHVhLlJvYmlu
|
60
|
+
QHN0YXRlLm1hLnVzPgpEYXRlOiBNb24sIERlYyAxMywgMjAxMCA2OjUwIHBt
|
61
|
+
ClN1YmplY3Q6IE1hc3NET1QgRGV2ZWxvcGVycyBIb2xpZGF5IE1lZXRpbmcg
|
62
|
+
LSBOZXh0IFR1ZXNkYXksIERlY2VtYmVyIDE0LCAyMDEwClRvOiAiTWFzc0RP
|
63
|
+
VERldmVsb3BlcnMiIDxtYXNzZG90ZGV2ZWxvcGVyc0Bnb29nbGVncm91cHMu
|
64
|
+
Y29tPgoKDQo=
|
65
|
+
|
66
|
+
|
67
|
+
------=_Part_1_1292290225853
|
68
|
+
Date: Mon, 13 Dec 2010 21:18:42 -0500
|
69
|
+
Mime-Version: 1.0
|
70
|
+
Content-Type: text/html;
|
71
|
+
charset=utf-8
|
72
|
+
Content-Transfer-Encoding: base64
|
73
|
+
Content-Disposition: inline
|
74
|
+
Content-ID: <4d06d4021f76f_23e680983d90321d0@spartan.local.mail>
|
75
|
+
|
76
|
+
DQpKdXN0IGEgcmVtaW5kZXIgYWJvdXQgVHVlc2RheSYjMzk7cyBkZXZlbG9w
|
77
|
+
ZXIgbWVldGluZy4gRGV0YWlscyBiZWxvdy48YnI+PGJyPkJlc3QsPGJyPkpv
|
78
|
+
c2g8YnI+PGJyPkpvc2h1YSBLLiBSb2Jpbjxicj42MTcuNTA2LjkxMzc8YnI+
|
79
|
+
PGJyPi0tLS0tIEZvcndhcmRlZCBtZXNzYWdlIC0tLS0tPGJyPkZyb206ICZx
|
80
|
+
dW90O0pvc2ggZnJvbSBNYXNzRE9UJnF1b3Q7ICZsdDtKb3NodWEuUm9iaW5A
|
81
|
+
c3RhdGUubWEudXMmZ3Q7PGJyPkRhdGU6IE1vbiwgRGVjIDEzLCAyMDEwIDY6
|
82
|
+
NTAgcG08YnI+U3ViamVjdDogTWFzc0RPVCBEZXZlbG9wZXJzIEhvbGlkYXkg
|
83
|
+
TWVldGluZyAtIE5leHQgVHVlc2RheSwgRGVjZW1iZXIgMTQsIDIwMTA8YnI+
|
84
|
+
VG86ICZxdW90O01hc3NET1REZXZlbG9wZXJzJnF1b3Q7ICZsdDttYXNzZG90
|
85
|
+
ZGV2ZWxvcGVyc0Bnb29nbGVncm91cHMuY29tJmd0Ozxicj48YnI+DQo=
|
86
|
+
|
87
|
+
|
88
|
+
------=_Part_1_1292290225853--
|
89
|
+
|
90
|
+
|
91
|
+
------=_NextPart_000_020B_01CB9B2E.829914E7
|
92
|
+
Date: Mon, 13 Dec 2010 21:18:42 -0500
|
93
|
+
Mime-Version: 1.0
|
94
|
+
Content-Type: message/rfc822;
|
95
|
+
charset=UTF-8
|
96
|
+
Content-Transfer-Encoding: 7bit
|
97
|
+
Content-Disposition: attachment
|
98
|
+
Content-ID: <4d06d4022267b_23e680983d903236d@spartan.local.mail>
|
99
|
+
|
100
|
+
Received: from mmp-bos-1.state.ma.us ([146.243.4.195]) by EOT-MAIL.mhd.root.eot.gov with Microsoft SMTPSVC(6.0.3790.4675);
|
101
|
+
Mon, 13 Dec 2010 18:50:22 -0500
|
102
|
+
Return-Path: <massdotdevelopers+bncciglx7eefhcg4probboerstdgg@googlegroups.com>
|
103
|
+
Received: from state.ma.us (itd-smtp-bos.state.ma.us [146.243.4.197]) by mmp-bos-1.state.ma.us with ESMTP id BT-MMP-61494 for joshua.robin@eot.state.ma.us; Mon, 13 Dec 2010 18:49:57 -0500
|
104
|
+
Received: from ([209.85.216.57])
|
105
|
+
by cf-appliance-03.state.ma.us with ESMTP id 5503337.637401966;
|
106
|
+
Mon, 13 Dec 2010 18:49:53 -0500
|
107
|
+
Received: by qwe4 with SMTP id 4sf56431qwe.22
|
108
|
+
for <joshua.robin@eot.state.ma.us>; Mon, 13 Dec 2010 15:49:52 -0800 (PST)
|
109
|
+
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
110
|
+
d=googlegroups.com; s=beta;
|
111
|
+
h=domainkey-signature:received:x-beenthere:received:mime-version
|
112
|
+
:received:received:date:in-reply-to:x-ip:references:user-agent
|
113
|
+
:x-http-useragent:message-id:subject:from:to:x-original-sender
|
114
|
+
:reply-to:precedence:mailing-list:list-id:list-post:list-help
|
115
|
+
:list-archive:sender:list-subscribe:list-unsubscribe:content-type
|
116
|
+
:content-transfer-encoding;
|
117
|
+
bh=debdKLQY1iPuqITEebleJH6sD3ncMvreFZ5BLGBFAUc=;
|
118
|
+
b=WBI0D/ioYMIVHleC7fj/huf37UQX7JqjpqiMgmkdEDvbI0CenzxR3M29QDDm4j9P14
|
119
|
+
SSfXfsOuHMTCT7Wtsm1kD/456Yf4WbzZp90MHNuN3+lSJSolGgirauOZOybsd+RJa8LI
|
120
|
+
dqfYovLN0UsQlqvg75y2bdBhOqXyqYUTt6ydk=
|
121
|
+
DomainKey-Signature: a=rsa-sha1; c=nofws;
|
122
|
+
d=googlegroups.com; s=beta;
|
123
|
+
h=x-beenthere:mime-version:date:in-reply-to:x-ip:references
|
124
|
+
:user-agent:x-http-useragent:message-id:subject:from:to
|
125
|
+
:x-original-sender:reply-to:precedence:mailing-list:list-id
|
126
|
+
:list-post:list-help:list-archive:sender:list-subscribe
|
127
|
+
:list-unsubscribe:content-type:content-transfer-encoding;
|
128
|
+
b=h+zbFDxmB8/FfyAye39umXhx5BYu5Cc524mfsom/POHeFihJ7VWeGJFB9qrpbkkhCY
|
129
|
+
RTXmuchZP64eST40XJjA/6MX2OblidsBSpYdP+Dq0rSpNeVccaCthUrYmiGlMQbMeWqW
|
130
|
+
YbHuKueckpvuQQrX0wQCHNWXpdqiNOsNFuD44=
|
131
|
+
Received: by 10.224.19.134 with SMTP id a6mr215500qab.12.1292284192039;
|
132
|
+
Mon, 13 Dec 2010 15:49:52 -0800 (PST)
|
133
|
+
X-BeenThere: massdotdevelopers@googlegroups.com
|
134
|
+
Received: by 10.224.222.20 with SMTP id ie20ls415170qab.7.p; Mon, 13 Dec 2010
|
135
|
+
15:49:51 -0800 (PST)
|
136
|
+
Received: by 10.224.53.195 with SMTP id n3mr209795qag.32.1292284191672; Mon,
|
137
|
+
13 Dec 2010 15:49:51 -0800 (PST)
|
138
|
+
Received: by fu15g2000vbb.googlegroups.com with HTTP; Mon, 13 Dec 2010
|
139
|
+
15:49:51 -0800 (PST)
|
140
|
+
Date: Mon, 13 Dec 2010 15:49:51 -0800 (PST)
|
141
|
+
In-Reply-To: <d59d680d-cfc4-4d44-a155-cee632c8a0e4@o14g2000prn.googlegroups.com>
|
142
|
+
X-IP: 67.208.190.2
|
143
|
+
References: <d59d680d-cfc4-4d44-a155-cee632c8a0e4@o14g2000prn.googlegroups.com>
|
144
|
+
User-Agent: G2/1.0
|
145
|
+
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
|
146
|
+
AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10,gzip(gfe)
|
147
|
+
Message-ID: <0ce48b97-eb28-4b0c-87f7-c1de84d5cd99@fu15g2000vbb.googlegroups.com>
|
148
|
+
Subject: Re: MassDOT Developers Holiday Meeting - Next Tuesday, December 14, 2010
|
149
|
+
From: Josh from MassDOT <Joshua.Robin@state.ma.us>
|
150
|
+
To: MassDOTDevelopers <massdotdevelopers@googlegroups.com>
|
151
|
+
X-Original-Sender: joshua.robin@eot.state.ma.us
|
152
|
+
Reply-To: massdotdevelopers@googlegroups.com
|
153
|
+
Precedence: list
|
154
|
+
Mailing-list: list massdotdevelopers@googlegroups.com; contact massdotdevelopers+owners@googlegroups.com
|
155
|
+
List-ID: <massdotdevelopers.googlegroups.com>
|
156
|
+
List-Post: <http://groups.google.com/group/massdotdevelopers/post?hl=en_US>, <mailto:massdotdevelopers@googlegroups.com>
|
157
|
+
List-Help: <http://groups.google.com/support/?hl=en_US>, <mailto:massdotdevelopers+help@googlegroups.com>
|
158
|
+
List-Archive: <http://groups.google.com/group/massdotdevelopers?hl=en_US>
|
159
|
+
Sender: massdotdevelopers@googlegroups.com
|
160
|
+
List-Subscribe: <http://groups.google.com/group/massdotdevelopers/subscribe?hl=en_US>,
|
161
|
+
<mailto:massdotdevelopers+subscribe@googlegroups.com>
|
162
|
+
List-Unsubscribe: <http://groups.google.com/group/massdotdevelopers/subscribe?hl=en_US>,
|
163
|
+
<mailto:massdotdevelopers+unsubscribe@googlegroups.com>
|
164
|
+
X-spam: ESP<40>=
|
165
|
+
SHA:<0>
|
166
|
+
SHA_FLAGS:<0>
|
167
|
+
UHA:<10>
|
168
|
+
ISC:<0>
|
169
|
+
BAYES:<0>
|
170
|
+
SenderID:<-1>
|
171
|
+
DKIM:<1>
|
172
|
+
TS:<0>
|
173
|
+
SIG:<gHcABoAUAAITVFMyMC0xN0w1LTJPVTQtUFNES4AEAAEAA3zBgAIABQACgAgA
|
174
|
+
BAc1NTAzMzM3gBkABxhNZGJQNE5GcTZURzNQRm5YNE1DSndBPT2ADQAIDDIu
|
175
|
+
MC4zLjAyLTk1M4AEAAkDSU0ggAcACgY2LjcuMiAAAAAAgZYACYABAA8CgAgA
|
176
|
+
B1QriKfiWW1tgAQAAtFV2DmACAAT0ki8MXOad3CACAAJ0ki8MXOad3CACAAK
|
177
|
+
BbITBBADSfiACQALOSCBeEwXkBwAgAgACEzQY7hPJpS1gAQADAAADgmAZAAD
|
178
|
+
AAAADJ+xa+vsI1/TjO4NiQnVr+2Bo+nYshDoHlVMPWWxnqrWPRbndQlRt0K4
|
179
|
+
CeCaNl448PN9nCxV0AfGIDeiABTyHtTAUT3+qqhi8oFT51HNdpYianv67O4R
|
180
|
+
exiCeLHENg5wz4DIAAQAxmh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9m
|
181
|
+
PTNEZCZzb3VyY2U9M0RzX2Qmc2FkZHI9M0QmZGFkZHI9M0Q0Mi4zNTE4Mjks
|
182
|
+
LT0AaHR0cDovL3RhbGVydHMuY29tL3Jzc2ZlZWQyL2FsZXJ0c3Jzcy5hc3B4
|
183
|
+
AGh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9mPTNEZCZzb3U9AGh0dHA6
|
184
|
+
Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9tYXNzZG89AAAAAAA=>
|
185
|
+
DSC:<21> (google_group:<21>)
|
186
|
+
TRU_watch_spam: <0>
|
187
|
+
TRU_cn_scam_spam: <0>
|
188
|
+
TRU_adult_spam: <0>
|
189
|
+
TRU_back_scatter_new: <0>
|
190
|
+
TRU_medical_spam: <0>
|
191
|
+
TRU_cn_business_spam: <0>
|
192
|
+
TRU_spam1: <0>
|
193
|
+
TRU_marketing_spam: <0>
|
194
|
+
TRU_cn_profanity_spam: <0>
|
195
|
+
TRU_jp_adult_spam: <0>
|
196
|
+
TRU_cn_class_ad: <0>
|
197
|
+
URL Real-Time Signatures: <0>
|
198
|
+
TRU_html_image_spam: <0>
|
199
|
+
TRU_jp_misc_spam: <0>
|
200
|
+
TRU_embedded_image_spam: <0>
|
201
|
+
TRU_scam_spam: <0>
|
202
|
+
TRU_urllinks: <0>
|
203
|
+
TRU_cn_political: <0>
|
204
|
+
TRU_legal_spam: <0>
|
205
|
+
TRU_money_spam: <0>
|
206
|
+
TRU_cn_misc_spam: <0>
|
207
|
+
TRU_misc_spam: <0>
|
208
|
+
TRU_ru_spamsubj: <0>
|
209
|
+
TRU_lotto_spam: <0>
|
210
|
+
TRU_freehosting: <0>
|
211
|
+
TRU_profanity_spam: <0>
|
212
|
+
TRU_cn_entertainment_spam: <0>
|
213
|
+
TRU_stock_spam: <0>
|
214
|
+
TRU_phish_spam: <0>
|
215
|
+
TRU_spam2: <0>
|
216
|
+
TRU_playsites: <9>
|
217
|
+
MIME-Version: 1.0
|
218
|
+
Content-Type: text/plain; charset=windows-1252
|
219
|
+
Content-Transfer-Encoding: quoted-printable
|
220
|
+
X-OriginalArrivalTime: 13 Dec 2010 23:50:22.0140 (UTC) FILETIME=[8156CFC0:01CB9B20]
|
221
|
+
|
222
|
+
All,
|
223
|
+
|
224
|
+
I just wanted to remind you about our Developers Meeting tomorrow
|
225
|
+
night at 6pm at 10 Park Plaza in Boston. We will be meeting at the
|
226
|
+
information desk at the top of the escalators at 6pm.
|
227
|
+
|
228
|
+
For those who arrive later than 6, you will need to sign in at the
|
229
|
+
information desk and head to Suite 3170. If you have any issues
|
230
|
+
getting to the meeting please call me at 617.506.9137.
|
231
|
+
|
232
|
+
These are the directions to our building:
|
233
|
+
http://maps.google.com/maps?f=3Dd&source=3Ds_d&saddr=3D&daddr=3D42.351829,-=
|
234
|
+
71.066029&hl=3Den&geocode=3DFdU8hgIdU57D-w&mra=3Dltm&dirflg=3Dr&ttype=3Ddep=
|
235
|
+
&date=3D12/07/10&time=3D3:28pm&noexp=3D0&noal=3D0&sort=3Ddef&sll=3D42.35139=
|
236
|
+
2,-71.068003&sspn=3D0.005249,0.011362&ie=3DUTF8&t=3Dh&z=3D17&start=3D0
|
237
|
+
|
238
|
+
We will keep the meeting to an hour maximum and promise to have you
|
239
|
+
out the door by 7. Your input will be very valuable as we plan our
|
240
|
+
initiatives for 2011.
|
241
|
+
|
242
|
+
See you tomorrow!
|
243
|
+
Josh
|
244
|
+
|
245
|
+
|
246
|
+
On Dec 7, 5:52=A0pm, Josh from MassDOT <joshua.ro...@eot.state.ma.us>
|
247
|
+
wrote:
|
248
|
+
> Hi Everyone,
|
249
|
+
>
|
250
|
+
> I hope everyone is having a great holiday season. =A0It has been a few
|
251
|
+
> months since we released real-time data for all MBTA buses and the
|
252
|
+
> Red, Orange, and Blue Lines. =A0With these successes in 2010, we are
|
253
|
+
> making plans for 2011 and need your help!
|
254
|
+
>
|
255
|
+
> While we know everyone is busy this time of year, we will be hosting a
|
256
|
+
> developers meeting next Tuesday evening at 6pm at the State
|
257
|
+
> Transportation Building at 10 Park Plaza in Boston. =A0We promise to
|
258
|
+
> keep the meeting short but are planning to solicit your input on plans
|
259
|
+
> for 2011 including:
|
260
|
+
>
|
261
|
+
> =95 =A0 =A0 Our plans for releasing real-time commuter rail data. =A0We n=
|
262
|
+
eed your
|
263
|
+
> input on what the data format will be.
|
264
|
+
> =95 =A0 =A0 Our plan s for opening up an API to our customer comment form=
|
265
|
+
s so
|
266
|
+
> that riders can send in pictures of issues they see in the system.
|
267
|
+
> =95 =A0 =A0 Discuss the improvements made in the new T-Alerts RSS feed av=
|
268
|
+
ailable
|
269
|
+
> athttp://talerts.com/rssfeed2/alertsrss.aspx
|
270
|
+
> =95 =A0 =A0 Ideas on a tool for reporting poor predictions
|
271
|
+
> =95 =A0 =A0 We need your input on a marketing campaign for Spring 2011 to=
|
272
|
+
raise
|
273
|
+
> awareness of all your great apps!
|
274
|
+
> =95 =A0 =A0 Lastly, we need any other neat ideas you have! =A0Please resp=
|
275
|
+
ond to
|
276
|
+
> this tread with any items you would like added to the agenda.
|
277
|
+
>
|
278
|
+
> One place where you, the developer community, can help us is by
|
279
|
+
> providing us statistics on the use of your apps. =A0With more than 30
|
280
|
+
> apps launched, we want to be able to create a picture of the usage of
|
281
|
+
> apps. =A0Please use this form to let us know how your app is being used:h=
|
282
|
+
ttps://spreadsheets.google.com/viewform?formkey=3DdEtubURPV291UWFyM0hS...
|
283
|
+
>
|
284
|
+
> Again, next week=92s meeting will be on Tuesday, December 14th at 6pm at
|
285
|
+
> the State Transportation Building located at 10 Park Plaza in Boston.
|
286
|
+
> For directions please use this link:http://maps.google.com/maps?f=3Dd&sou=
|
287
|
+
rce=3Ds_d&saddr=3D&daddr=3D42.351829,-71...
|
288
|
+
>
|
289
|
+
> Thanks and looking forward to seeing you next week!
|
290
|
+
> Josh
|
291
|
+
>
|
292
|
+
> ____________________________________
|
293
|
+
> Joshua K. Robin
|
294
|
+
> Massachusetts Department of Transportation
|
295
|
+
> joshua.ro...@state.ma.us
|
296
|
+
|
297
|
+
--=20
|
298
|
+
You received this message because you are subscribed to the Google Groups "=
|
299
|
+
MassDOTDevelopers" group.
|
300
|
+
To post to this group, send email to massdotdevelopers@googlegroups.com.
|
301
|
+
To unsubscribe from this group, send email to massdotdevelopers+unsubscribe=
|
302
|
+
@googlegroups.com.
|
303
|
+
For more options, visit this group at http://groups.google.com/group/massdo=
|
304
|
+
tdevelopers?hl=3Den.
|
305
|
+
|
306
|
+
------=_NextPart_000_020B_01CB9B2E.829914E7--
|