vmail 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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--
|