vmail 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -178,7 +178,7 @@ To reply-all to a message, type `,a`.
178
178
 
179
179
  To forward a message, type `,f`.
180
180
 
181
- All these command open a message composition window. At the top, you will see
181
+ All these commands open a message composition window. At the top, you will see
182
182
  mail headers like this:
183
183
 
184
184
  from: Daniel Choi <dhchoi@gmail.com>
@@ -186,7 +186,7 @@ mail headers like this:
186
186
  subject:
187
187
 
188
188
  The `from:` field will be pre-filled from your `.vmailrc` configuration.
189
- You're responsible for fill in the `to:` and the `subject:` fields.
189
+ You're responsible for filling in the `to:` and the `subject:` fields.
190
190
  You can add a `cc:` and `bcc:` field if you want.
191
191
 
192
192
 
@@ -246,7 +246,7 @@ at the top of the message window:
246
246
 
247
247
  To download these attachments to a local directory, type `,A`. You'll be
248
248
  prompted for a directory path. Then vmail will save all the attachments in the
249
- message to this directory.
249
+ message to this directory, creating the directory if necessary.
250
250
 
251
251
  To send attachments, add something like this to your new message in the message
252
252
  composition window:
@@ -371,6 +371,9 @@ vmail gem is downloaded from).
371
371
 
372
372
  Please file bug reports and feature requests in the [vmail github issue tracker][tracker].
373
373
 
374
+ vmail is very young and in beta, so there are bound to be bugs and issues.
375
+ But in a few weeks, with your help, vmail will become stable.
376
+
374
377
  [tracker]:https://github.com/danchoi/vmail/issues
375
378
 
376
379
  ## How to contact the developer
@@ -33,7 +33,7 @@ class ContactsExtractor
33
33
  email = [address_struct.mailbox, address_struct.host].join('@')
34
34
  name = address_struct.name
35
35
  if name
36
- name = Mail::Encodings.unquote_and_convert_to(name, 'utf-8')
36
+ name = Mail::Encodings.unquote_and_convert_to(name, 'UTF-8')
37
37
  yield "#{name} <#{email}>"
38
38
  else
39
39
  yield email
@@ -118,7 +118,7 @@ module Vmail
118
118
  address = if address_struct.nil?
119
119
  "unknown"
120
120
  elsif address_struct.name
121
- "#{Mail::Encodings.unquote_and_convert_to(address_struct.name, 'utf-8')} <#{[address_struct.mailbox, address_struct.host].join('@')}>"
121
+ "#{Mail::Encodings.unquote_and_convert_to(address_struct.name, 'UTF-8')} <#{[address_struct.mailbox, address_struct.host].join('@')}>"
122
122
  else
123
123
  [address_struct.mailbox, address_struct.host].join('@')
124
124
  end
@@ -138,7 +138,7 @@ module Vmail
138
138
  date.strftime "%b %d %I:%M%P" rescue envelope.date.to_s
139
139
  end
140
140
  subject = envelope.subject || ''
141
- subject = Mail::Encodings.unquote_and_convert_to(subject, 'utf-8')
141
+ subject = Mail::Encodings.unquote_and_convert_to(subject, 'UTF-8')
142
142
  flags = format_flags(flags)
143
143
  first_col_width = max_uid.to_s.length
144
144
  mid_width = @width - (first_col_width + 33)
@@ -86,7 +86,7 @@ module Vmail
86
86
  text = part.body.decoded.gsub("\r", '')
87
87
  charset = part.content_type_parameters && part.content_type_parameters['charset']
88
88
  if charset
89
- Iconv.conv('utf-8//translit//ignore', charset, text)
89
+ Iconv.conv('UTF-8//TRANSLIT//IGNORE', charset, text)
90
90
  else
91
91
  text
92
92
  end
@@ -100,7 +100,7 @@ module Vmail
100
100
  stdin.close
101
101
  output = stdout.read
102
102
  charset = part.content_type_parameters && part.content_type_parameters['charset']
103
- charset ? Iconv.conv('utf-8//translit//ignore', charset, output) : output
103
+ charset ? Iconv.conv('UTF-8//TRANSLIT//IGNORE', charset, output) : output
104
104
  end
105
105
 
106
106
  def extract_headers(mail = @mail)
@@ -121,13 +121,13 @@ module Vmail
121
121
  end
122
122
 
123
123
  def encoding
124
- @encoding ||= @mail.header.charset || 'utf-8'
124
+ @encoding ||= @mail.header.charset || 'UTF-8'
125
125
  end
126
126
 
127
127
  def utf8(string)
128
128
  return '' unless string
129
129
  return string unless encoding
130
- Iconv.conv('utf-8//translit/ignore', encoding, string)
130
+ Iconv.conv('UTF-8//TRANSLIT/IGNORE', encoding, string)
131
131
  rescue
132
132
  puts $!
133
133
  string
@@ -1,3 +1,3 @@
1
1
  module Vmail
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 7
9
- version: 0.1.7
8
+ - 8
9
+ version: 0.1.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - Daniel Choi
@@ -118,7 +118,6 @@ files:
118
118
  - website/stylesheets-vmail/text.css
119
119
  - website/top.markdown
120
120
  - website/vmail-template.html
121
- - website/vmail.html
122
121
  has_rdoc: true
123
122
  homepage: http://danielchoi.com/software/vmail.html
124
123
  licenses: []
@@ -1,460 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5
- <title>Vmail</title>
6
- <link href="stylesheets-vmail/reset.css?1292364096" media="screen" rel="stylesheet" type="text/css" />
7
- <link href="stylesheets-vmail/960.css?1292364096" media="screen" rel="stylesheet" type="text/css" />
8
- <link href="stylesheets-vmail/text.css?1292364096" media="screen" rel="stylesheet" type="text/css" />
9
- <link href="stylesheets-vmail/site.css?1292364096" media="screen" rel="stylesheet" type="text/css" />
10
- <script type="text/javascript" src="http://w.sharethis.com/button/buttons.js"></script><script type="text/javascript">stLight.options({publisher:'8579b5f8-0860-4ea6-9ef1-6f0f58359a99'});</script>
11
- <script type="text/javascript" src="lightbox2/js/prototype.js"></script>
12
- <script type="text/javascript" src="lightbox2/js/scriptaculous.js?load=effects,builder"></script>
13
- <script type="text/javascript" src="lightbox2/js/lightbox.js"></script>
14
- <link rel="stylesheet" href="lightbox2/css/lightbox.css" type="text/css" media="screen" />
15
-
16
- </head>
17
- <body>
18
- <div class="container_12">
19
- <div class="grid_10 alpha" id="main">
20
- <h1>vmail</h1>
21
-
22
- <p>vmail is a Vim interface to Gmail. Here are some screenshots:</p>
23
-
24
- <p><a href="images-vmail/1.png" rel="lightbox[screens]"><img src="images-vmail/1-small.png" /></a>
25
- <a href="images-vmail/autocomplete.png" rel="lightbox[screens]"><img src="images-vmail/autocomplete-small.png" /></a>
26
- <a href="images-vmail/attach.png" rel="lightbox[screens]"><img src="images-vmail/attach-small.png" /></a></p>
27
-
28
-
29
- <p>Why vmail? Because some people love using Vim 1000 times more than using
30
- a web browser or a GUI mail program.</p>
31
-
32
- <h2>Prerequisites</h2>
33
-
34
- <ul>
35
- <li>a Gmail account</li>
36
- <li>a relatively recent version of Vim (vmail is developed against Vim 7.3)</li>
37
- <li>Ruby (vmail is developed using Ruby 1.9.2)</li>
38
- <li>RubyGems (if Ruby version is older than 1.9)</li>
39
- <li>the <code>lynx</code> text-only-mode web browser is required to view HTML mail parts in vmail</li>
40
- </ul>
41
-
42
-
43
- <p>The current version of vmail assumes a Unix environment. I'll try to make later versions accommodate Windows.</p>
44
-
45
- <h2>Installation</h2>
46
-
47
- <pre><code>gem install vmail
48
- </code></pre>
49
-
50
- <p>Test your installation by typing <code>vmail -h</code>. You should see vmail's help.</p>
51
-
52
- <p>On some systems you may run into a PATH issue, where the system can't find the
53
- <code>vmail</code> command after installation. Please report this if you encounter this
54
- problem, and mention what system you're using. You might want to try</p>
55
-
56
- <pre><code>sudo gem install vmail
57
- </code></pre>
58
-
59
- <p>to see if that puts <code>vmail</code> on your PATH.</p>
60
-
61
- <h2>Configuration file</h2>
62
-
63
- <p>To run vmail, create a yaml file called <code>.vmailrc</code> and save it either in the
64
- current directory (the directory from which you launch vmail) or in your home
65
- directory.</p>
66
-
67
- <p>The <code>.vmailrc</code> file should look something like this. Substitute your own values.</p>
68
-
69
- <pre><code>username: dhchoi@gmail.com
70
- password: password
71
- name: Daniel Choi
72
- signature: |
73
- --
74
- Sent from vmail. http://danielchoi.com/software/vmail.html
75
- </code></pre>
76
-
77
- <p>This file should be formatted in <a href="http://www.yaml.org/spec/1.2/spec.html">YAML syntax</a>.</p>
78
-
79
- <p>You can omit the password key-value pair if you'd rather not have the password
80
- saved in the file. In that case, you'll prompted for the password each time you
81
- start vmail.</p>
82
-
83
- <h2>Contacts autocompletion</h2>
84
-
85
- <p>vmail uses vim autocompletion to help you auto-complete email addresses.
86
- To use this feature, generate a <code>vmail-contacts.txt</code> file in the current or
87
- home directory. This is a simple list of your email contacts.
88
- Invoking vmail with the <code>-g</code> option generates this file for you by
89
- collecting all the recipients and cc's from your last 500 sent
90
- emails. You can adjust this number by using <code>-g</code> with a number argument.</p>
91
-
92
- <p>After vmail generates this file for you, you can edit it however and whenever
93
- you want, as long as there is one address per line.</p>
94
-
95
- <h2>Starting vmail</h2>
96
-
97
- <p>Once you've created the configuration file and (optionally) the contacts file,
98
- you can start vmail with</p>
99
-
100
- <pre><code>vmail
101
- </code></pre>
102
-
103
- <p>This opens the vmail/vim interface and shows you the last 100 messages in your
104
- Gmail inbox.</p>
105
-
106
- <p>You can have vmail show messages from any other mailbox (a.k.a. label) on
107
- startup by passing in the mailbox name as an argument:</p>
108
-
109
- <pre><code>vmail starred
110
- </code></pre>
111
-
112
- <p>You can also pass in search parameters:</p>
113
-
114
- <pre><code>vmail important from barackobama@whitehouse.gov
115
- </code></pre>
116
-
117
- <p>On startup, vmail loads 100 messages by default. You can increase or decrease
118
- this number by passing in a number after the mailbox name:</p>
119
-
120
- <pre><code>vmail inbox 700 subject unix
121
- </code></pre>
122
-
123
- <h2>Viewing messages</h2>
124
-
125
- <p>The first screen vmail shows you is a list of messages. You can view a message
126
- by moving the cursor line to it and pressing ENTER. This will split the screen
127
- and show the message content in the bottom pane.</p>
128
-
129
- <p>To full-screen the message, press SPACE when the cursor is in the message window.
130
- To go back to the split view, press ENTER.</p>
131
-
132
- <p>You can full-screen the list window by pressing SPACE while the cursor is in it.</p>
133
-
134
- <p>In the split view, you can jump between the two panes by just pressing ENTER
135
- from either window.</p>
136
-
137
- <p>You can also use <code>&lt;C-p&gt;</code> and <code>&lt;C-n&gt;</code> from either window to show the previous or
138
- next message.</p>
139
-
140
- <p>vmail loads a certain number messages at a time, starting with the most recent.
141
- If there are more messages that vmail hasn't loaded, you'll see a line at the
142
- top of the list that looks something like this:</p>
143
-
144
- <pre><code>&gt; Load 100 more messages. 156 remaining.
145
- </code></pre>
146
-
147
- <p>Put the cursor on this line and press ENTER to load more of these messages.</p>
148
-
149
- <p>Unread messages are marked with a <code>[+]</code> symbol.</p>
150
-
151
- <p>To view the raw RFC822 version of a message, type <code>,R</code> while viewing the message.</p>
152
-
153
- <h2>Starring, deleting, archiving, marking spam</h2>
154
-
155
- <p>To star a message, put the cursor on it and type <code>,*</code> or alternatively <code>s</code>.
156
- (Note that the comma before the * is part of the key sequence.) Starring a
157
- message copies it to the <code>starred</code> mailbox. Starred messages are marked with a
158
- <code>[*]</code> symbol and color-highlighted.</p>
159
-
160
- <p>To delete a message, put the cursor on it and type <code>,#</code> or alternatively <code>,d</code>.
161
- Deleting a message puts it in the <code>trash</code> mailbox. Deleting a message from the
162
- <code>trash</code> mailbox deletes it permanently.</p>
163
-
164
- <p>To archive a message, put the cursor on it and type <code>,e</code>. Archiving a message
165
- moves it to the <code>all</code> mailbox.</p>
166
-
167
- <p>To mark a message spam, put the cursor on it and type <code>,!</code>. This moves the
168
- message to to the <code>spam</code> mailbox.</p>
169
-
170
- <p>You can use range selections in the message list when you star, delete, mark as
171
- spam, or archive. Use <code>&lt;C-v&gt;</code> to start marking a range of lines (the vertical
172
- position of the cursor doesn't matter). Then type any of the above commands to
173
- perform an action on all the messages you selected.</p>
174
-
175
- <h2>Checking for new messages</h2>
176
-
177
- <p>To check for new messages in the current mailbox, press <code>u</code> in normal mode and
178
- watch the status line.</p>
179
-
180
- <h2>Switching mailboxes, moving messages, copying messages to another mailbox</h2>
181
-
182
- <p>To switch mailboxes, type <code>,m</code>. You'll see an autocomplete window appear at the top.
183
- The standard vim autocomplete keystrokes apply:</p>
184
-
185
- <ul>
186
- <li><code>C-p</code> and <code>C-n</code> move you up and down the match list</li>
187
- <li><code>C-e</code> closes the match list and lets you continue typing</li>
188
- <li><code>C-u</code>: when the match list is active, cycles forward through the match list and what you've typed so far; when the match list is inactive, erases what you've typed.</li>
189
- <li><code>C-x C-u</code> finds matches for what you've typed so far (when the match list window is closed)</li>
190
- <li><code>C-y</code> selects the highlighted match without triggering ENTER</li>
191
- <li>ENTER selects the highlighted match from the match list</li>
192
- </ul>
193
-
194
-
195
- <p>Tip: start typing the first 1-3 characters of the mailbox name, then press
196
- <code>C-u</code> or <code>C-p</code> until you highlight the right match, and finally press ENTER to
197
- select.</p>
198
-
199
- <p>To move a message to another mailbox, put the cursor on the message in the
200
- message list, and type <code>,b</code>. You'll be prompted to select the target mailbox.</p>
201
-
202
- <p>To copy a message to another mailbox, put the cursor on the message in the
203
- message list, and type <code>,B</code>. You'll be prompted to select the target mailbox.</p>
204
-
205
- <h2>Composing messages</h2>
206
-
207
- <p>To start writing a new a email message, type <code>,c</code>. That's a comma followed by
208
- the character 'c'.</p>
209
-
210
- <p>To reply to a message, type <code>,r</code>.</p>
211
-
212
- <p>To reply-all to a message, type <code>,a</code>.</p>
213
-
214
- <p>To forward a message, type <code>,f</code>.</p>
215
-
216
- <p>All these command open a message composition window. At the top, you will see
217
- mail headers like this:</p>
218
-
219
- <pre><code>from: Daniel Choi &lt;dhchoi@gmail.com&gt;
220
- to:
221
- subject:
222
- </code></pre>
223
-
224
- <p>The <code>from:</code> field will be pre-filled from your <code>.vmailrc</code> configuration.
225
- You're responsible for fill in the <code>to:</code> and the <code>subject:</code> fields.
226
- You can add a <code>cc:</code> and <code>bcc:</code> field if you want.</p>
227
-
228
- <p>When you fill in the recipient addresses, you can use vim autocompletion if you
229
- generated a <code>vmail-contacts.txt</code> file. Start typing a name or email address,
230
- then press <code>C-x C-u</code> to invoke autocompletion.</p>
231
-
232
- <p>Tip: Use <code>C-y</code> instead of ENTER to select a match. This will prevent you from
233
- creating a blank line in the middle of the email headers.</p>
234
-
235
- <p>Make sure your email addresses are separated by commas and that they all
236
- ultimately appear on the <strong>same, unbroken line</strong> for each field. Vim will
237
- probably break long lines automatically as you type them, so for now (pending a
238
- future enhancement), you'll have to rejoin the lines if breaks get inserted.</p>
239
-
240
- <p>After you fill in the headers, write your message. Make sure there is a
241
- blank line between the headers and the body of your message.</p>
242
-
243
- <p>When you're done writing, send the message by typing <code>,vs</code> in normal mode.</p>
244
-
245
- <p>While you're composing a message in the composition window, you can save a
246
- draft to a local file with the standard vim <code>:w</code> command:</p>
247
-
248
- <pre><code>:w my_draft_filename.txt
249
- </code></pre>
250
-
251
- <p>Make sure you append *.txt to the filename, or else vmail won't recognize it as
252
- a potential email when you reload it.</p>
253
-
254
- <p>Make sure you don't use <code>:wq</code> unless you mean to quit vmail immediately. After
255
- you save the draft to a file, you can go back to the message list by typing <code>q</code>
256
- in normal mode.</p>
257
-
258
- <p>To resume writing the draft later, just type <code>:e my_draft_filename.txt</code> to load
259
- the draft email into a buffer. (Use <code>:e!</code> if you're already in the message
260
- composition window. You can also use <code>:sp</code> if you want to open the draft email file in a
261
- split window, etc.) Resume editing. Send by typing <code>,vs</code>.</p>
262
-
263
- <p>At any point, you can quit the composition window by typing <code>q</code> in normal mode.</p>
264
-
265
- <h2>Attachments</h2>
266
-
267
- <p>The current version of vmail can handle attachments to a certain extent.</p>
268
-
269
- <p>When you're viewing a message with attachments, you'll see something like this
270
- at the top of the message window:</p>
271
-
272
- <pre><code>INBOX 2113 4 kb
273
- - image/png; name=canada.png
274
- - image/gif; name=arrow_right.gif
275
- ---------------------------------------
276
- from: Daniel Choi &lt;dhchoi@gmail.com&gt;
277
- date: Sun, Dec 12 08:39 AM -05:00 2010
278
- to: Daniel Choi &lt;dhchoi@gmail.com&gt;
279
- subject: attachment test
280
-
281
- see attached
282
- </code></pre>
283
-
284
- <p>To download these attachments to a local directory, type <code>,A</code>. You'll be
285
- prompted for a directory path. Then vmail will save all the attachments in the
286
- message to this directory.</p>
287
-
288
- <p>To send attachments, add something like this to your new message in the message
289
- composition window:</p>
290
-
291
- <pre><code>from: Daniel Choi &lt;dhchoi@gmail.com&gt;
292
- to: barackobama@whitehouse.gov
293
- subject: look at this!
294
-
295
- attach:
296
- - images/middle-east-map.png
297
- - images/policypaper.pdf
298
- - docs/
299
-
300
- I think you'll find this stuff interesting.
301
- </code></pre>
302
-
303
- <p>The <code>attach:</code> block is a YAML list. The items are paths (either relative or
304
- absolute) to the files you want to attach to your message. Note that you can
305
- also specify a directory, in which case vmail attaches every file it finds in
306
- that directory.</p>
307
-
308
- <p>One thing vmail doesn't do yet is let you forward a message with all its
309
- attachments intact. This feature will be implemented in the near future.</p>
310
-
311
- <h2>Printing messages to a file</h2>
312
-
313
- <p><code>,vp</code> from the message list prints (appends) the text content of all the selected
314
- messages to a file.</p>
315
-
316
- <h2>Invoking your web browser</h2>
317
-
318
- <p>When you're reading a message, <code>,o</code> opens the first hyperlink in the document
319
- on or after the cursor in your normal web browser.</p>
320
-
321
- <p>When you're reading a message with an html mail part, <code>,h</code> saves that part to a
322
- local file (<code>vmail-htmlpart.html</code>) and opens it in your normal web browser.</p>
323
-
324
- <p>By default, the command vmail uses to open your web browser is <code>open</code>. In OS X,
325
- this opens URLs and HTML files in the default web browser. You can change the
326
- browser vmail invokes by setting the VMAIL_BROWSER environmental variable
327
- before you start vmail, e.g.:</p>
328
-
329
- <pre><code>export VMAIL_BROWSER='elinks'
330
- </code></pre>
331
-
332
- <h2>Search queries</h2>
333
-
334
- <p>vmail can generate a message list by performing an IMAP search on the current mailbox.
335
- From the message list window, type <code>,s</code>. This will prompt you for a search query.
336
- The search query is an optional number specifying the number of messages to return,
337
- followed by a valid IMAP search query.</p>
338
-
339
- <p>Here are some example search queries.</p>
340
-
341
- <pre><code># the default
342
- 100 all
343
-
344
- # all messages from thematrix.com domain
345
- from thematrix.com
346
-
347
- # all messages from this person
348
- from barackobama@whitehouse.gov
349
-
350
- # subject field search; use double quotes to enclose multiple words
351
- subject "unix philosophy"
352
-
353
- # example of date range and multiple conditions
354
- before 30-Nov-2010 since 1-Nov-2010 from prx.org
355
- </code></pre>
356
-
357
- <p>Tip: When you're entering your search query, <code>&lt;C-u&gt;</code> clears the query line.</p>
358
-
359
- <p>Power-Tip: When you're at the search query prompt, <code>&lt;C-f&gt;</code> opens a mini-editor
360
- that contains the current query plus a history of previous vmail search
361
- queries. You can edit any line in this mini-editor and press ENTER to perform
362
- the query on that line.</p>
363
-
364
- <h2>Using vmail with MacVim</h2>
365
-
366
- <p>vmail uses standard Vim by default, but vmail also works with MacVim, but not
367
- perfectly. In particular, there seems to be a bug in MacVim that prevents
368
- vmail's status line activity messages from appearing properly. Nonetheless,
369
- most of vmail is functional in MacVim.</p>
370
-
371
- <p>To use MacVim as your vmail Vim engine, <code>export VMAIL_VIM=mvim</code> before starting
372
- vmail.</p>
373
-
374
- <p>Note that when vmail uses MacVim, the terminal window in which you invoke vmail
375
- will show vmail's logging output while MacVim is running. To quit vmail in
376
- MacVim mode, you will have to press CTRL-c in this window to stop the vmail
377
- process in after quitting the MacVim app.</p>
378
-
379
- <h2>vmail file byproducts</h2>
380
-
381
- <p>vmail generates a few file byproducts when it is running. It generates a
382
- temporary <code>vmailbuffer</code> file in the current directory to hold the message
383
- list. This should get deleted automatically when vmail quits.</p>
384
-
385
- <p>vmail also creates a <code>vmail-htmlpart.html</code> file in the current directory if you
386
- open an HTML mail part from vmail.</p>
387
-
388
- <p>Finally, vmail logs output to a <code>vmail.log</code> file which it creates in the
389
- current directory. You can tail this file in a separate terminal window to see
390
- what's going on behind the scenes as you use vmail.</p>
391
-
392
- <h2>Is my gmail password secure?</h2>
393
-
394
- <p>In short, yes. vmail uses TLS (<a href="http://en.wikipedia.org/wiki/Transport_Layer_Security">Transport Layer Security</a>) to perform IMAP
395
- and SMTP authentication. So vmail transmits your password securely over the
396
- network.</p>
397
-
398
- <p>You can also be sure that the vmail code doesn't do anything nefarious with
399
- your Gmail password because vmail is open source. Anyone can inspect the source
400
- code of the copy of vmail that runs on your computer and inspect the latest
401
- vmail code at the <a href="https://github.com/danchoi/vmail">github repository</a> and at <a href="https://rubygems.org/gems/vmail">rubygems.org</a> (where the
402
- vmail gem is downloaded from).</p>
403
-
404
- <h2>Bug reports, feature requests</h2>
405
-
406
- <p>Please file bug reports and feature requests in the <a href="https://github.com/danchoi/vmail/issues">vmail github issue tracker</a>.</p>
407
-
408
- <h2>How to contact the developer</h2>
409
-
410
- <p>My name is Daniel Choi. I am based in Cambridge, MA, and you can email me at dhchoi@gmail.com.</p>
411
-
412
-
413
- <h2>How to support the vmail project</h2>
414
-
415
- <p>If you find vmail very useful, feel free to drop me a note to say so. If you have
416
- a bug to report or a good feature to suggest, please file it on the <a href="https://github.com/danchoi/vmail/issues">issue tracker</a>.
417
- Few things make this software developer happier than knowing that people find my
418
- software useful.</p>
419
-
420
- <p>Please do not feel obligated to donate money simply because you use vmail. But if you
421
- want to donate some money to support the independent software developer behind
422
- vmail, use this PayPal button:</p>
423
-
424
- <p><form action="https://www.paypal.com/cgi-bin/webscr" method="post">
425
- <input type="hidden" name="cmd" value="_s-xclick">
426
- <input type="hidden" name="hosted_button_id" value="YC3S3D5RFMJSC">
427
- <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
428
- <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
429
- </form></p>
430
-
431
- </div>
432
- <div class="grid_2 omega">
433
-
434
- <div class="sidebar">
435
-
436
- <h4>share this</h4>
437
-
438
- <span class="st_twitter_large" displayText="Tweet"></span><span class="st_facebook_large" displayText="Facebook"></span><span class="st_ybuzz_large" displayText="Yahoo! Buzz"></span><span class="st_gbuzz_large" displayText="Google Buzz"></span><span class="st_email_large" displayText="Email"></span><span class="st_sharethis_large" displayText="ShareThis"></span>
439
-
440
- <h4>links</h4>
441
- <ul>
442
- <li><a href="https://github.com/danchoi/vmail">github repo</a></li>
443
- <li><a href="https://rubygems.org/gems/vmail">rubygems page</a></li>
444
- </ul>
445
- </div>
446
-
447
- </div>
448
- </div>
449
-
450
- <script type="text/javascript">
451
- var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
452
- document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
453
- </script>
454
- <script type="text/javascript">
455
- var pageTracker = _gat._getTracker("UA-4028996-5");
456
- pageTracker._initData();
457
- pageTracker._trackPageview();
458
- </script>
459
- </body>
460
- </html>