Kensei 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/README.md +24 -0
- data/Rakefile +7 -0
- data/bin/kensei +6 -0
- data/kensei.gemspec +29 -0
- data/lib/kensei.rb +217 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207330_0.15143.thomanil-VirtualBox,U=1,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +70 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207331_0.15143.thomanil-VirtualBox,U=2,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +79 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207332_0.15143.thomanil-VirtualBox,U=3,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +81 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207332_2.15143.thomanil-VirtualBox,U=4,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207333_1.15143.thomanil-VirtualBox,U=5,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207334_0.15143.thomanil-VirtualBox,U=6,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207334_1.15143.thomanil-VirtualBox,U=9,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207334_2.15143.thomanil-VirtualBox,U=10,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207335_0.15143.thomanil-VirtualBox,U=11,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207336_0.15143.thomanil-VirtualBox,U=12,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +55 -0
- data/test/fixture/Maildir/kensei-first/All Mail/cur/1356207336_1.15143.thomanil-VirtualBox,U=13,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +12 -0
- data/test/fixture/Maildir/kensei-first/INBOX/cur/1356207332_1.15143.thomanil-VirtualBox,U=1,FMD5=7e33429f656f1e6e9d79b29c3f82c57e:2,S +70 -0
- data/test/fixture/Maildir/kensei-first/INBOX/cur/1356207333_0.15143.thomanil-VirtualBox,U=2,FMD5=7e33429f656f1e6e9d79b29c3f82c57e:2,S +79 -0
- data/test/fixture/Maildir/kensei-first/INBOX/cur/1356207333_2.15143.thomanil-VirtualBox,U=5,FMD5=7e33429f656f1e6e9d79b29c3f82c57e:2,S +55 -0
- data/test/fixture/Maildir/kensei-first/Sent Mail/cur/1356207337_0.15143.thomanil-VirtualBox,U=1,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/Sent Mail/cur/1356207337_1.15143.thomanil-VirtualBox,U=2,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/Sent Mail/cur/1356207338_0.15143.thomanil-VirtualBox,U=3,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/Sent Mail/cur/1356207338_1.15143.thomanil-VirtualBox,U=5,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/Sent Mail/cur/1356207339_0.15143.thomanil-VirtualBox,U=6,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/Sent Mail/cur/1356207339_1.15143.thomanil-VirtualBox,U=7,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/Sent Mail/cur/1356207340_0.15143.thomanil-VirtualBox,U=8,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +12 -0
- data/test/fixture/Maildir/kensei-first/Trash/cur/1356207341_0.15143.thomanil-VirtualBox,U=1,FMD5=a7e253cd8dd95da3e20daf45519a8dc2:2,S +75 -0
- data/test/fixture/Maildir/kensei-first/Trash/cur/1356207341_1.15143.thomanil-VirtualBox,U=2,FMD5=a7e253cd8dd95da3e20daf45519a8dc2:2,S +9 -0
- data/test/fixture/Maildir/kensei-first/misc/cur/1356207342_0.15143.thomanil-VirtualBox,U=1,FMD5=bc957e26ff41470c556ee5d09e96880b:2,S +81 -0
- data/test/fixture/Maildir/kensei-first/security/cur/1356207343_0.15143.thomanil-VirtualBox,U=1,FMD5=e91e6348157868de9dd8b25c81aebfb9:2,S +55 -0
- data/test/fixture/Maildir/kenseisecond/All Mail/cur/1356207346_1.15143.thomanil-VirtualBox,U=2,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +79 -0
- data/test/fixture/Maildir/kenseisecond/All Mail/cur/1356207346_2.15143.thomanil-VirtualBox,U=3,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +81 -0
- data/test/fixture/Maildir/kenseisecond/All Mail/cur/1356207347_1.15143.thomanil-VirtualBox,U=4,FMD5=883ba13d52aa35908bd3344dc0604026:2,S +12 -0
- data/test/fixture/Maildir/kenseisecond/All Mail/new/1356207346_0.15143.thomanil-VirtualBox,U=1,FMD5=883ba13d52aa35908bd3344dc0604026:2, +70 -0
- data/test/fixture/Maildir/kenseisecond/INBOX/cur/1356207347_2.15143.thomanil-VirtualBox,U=3,FMD5=7e33429f656f1e6e9d79b29c3f82c57e:2,S +81 -0
- data/test/fixture/Maildir/kenseisecond/INBOX/new/1356207347_0.15143.thomanil-VirtualBox,U=1,FMD5=7e33429f656f1e6e9d79b29c3f82c57e:2, +70 -0
- data/test/fixture/Maildir/kenseisecond/Sent Mail/cur/1356207349_0.15143.thomanil-VirtualBox,U=1,FMD5=af48cce153be383d91f6c4a7c19fe087:2,S +12 -0
- data/test/fixture/Maildir/kenseisecond/help/cur/1356207351_0.15143.thomanil-VirtualBox,U=1,FMD5=657f8b8da628ef83cf69101b6817150a:2,S +81 -0
- data/test/fixture/Maildir/kenseisecond/nagging/cur/1356207351_1.15143.thomanil-VirtualBox,U=1,FMD5=be0b69d13a0baed63cc899dc05b36d80:2,S +79 -0
- data/test/test_helper.rb +14 -0
- data/test/test_kensei.rb +76 -0
- metadata +153 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
DESCRIPTION:
|
3
|
+
===========
|
4
|
+
|
5
|
+
The ruby "backend" of Kensei - the email major mode for Emacs.
|
6
|
+
|
7
|
+
The Kensei rubygem is basically glue code and provides an easy-to-use
|
8
|
+
API facade for the Emacs frontend code. The kensei emacs lisp code
|
9
|
+
calls the kensei gem as a standard CLI tool, passing the name of the
|
10
|
+
API method and any params as regular arguments. The kensei gem returns
|
11
|
+
results as json.
|
12
|
+
|
13
|
+
INSTALL:
|
14
|
+
========
|
15
|
+
|
16
|
+
`sudo gem install kensei`. However it also depends on other CLI tools,
|
17
|
+
and is just meant to be called by the Kensei Emacs mode - see the
|
18
|
+
actual Kensei homepage for the full story.
|
19
|
+
|
20
|
+
LICENSE:
|
21
|
+
========
|
22
|
+
|
23
|
+
Kensei is free software licensed under the
|
24
|
+
[GNU Affero General Public License (AGPL)](http://www.gnu.org/licenses/agpl-3.0.html).
|
data/Rakefile
ADDED
data/bin/kensei
ADDED
data/kensei.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "kensei"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "Kensei"
|
7
|
+
s.version = Kensei::VERSION
|
8
|
+
s.authors = ["Thomas Kjeldahl Nilsson"]
|
9
|
+
s.email = ["thomas@kjeldahlnilsson.net"]
|
10
|
+
s.homepage = "https://kenseimail.org"
|
11
|
+
s.summary = %q{Rubygem backend for Kensei, the Emacs mail major mode}
|
12
|
+
s.description = %q{Rubygem backend for Kensei, the Emacs mail major mode}
|
13
|
+
|
14
|
+
s.rubyforge_project = "kensei"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
|
24
|
+
s.add_runtime_dependency "mail"
|
25
|
+
|
26
|
+
s.add_development_dependency "minitest"
|
27
|
+
s.add_development_dependency "shoulda"
|
28
|
+
s.add_development_dependency "shoulda-context"
|
29
|
+
end
|
data/lib/kensei.rb
ADDED
@@ -0,0 +1,217 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'mail'
|
4
|
+
require 'json'
|
5
|
+
require 'pathname'
|
6
|
+
|
7
|
+
class Kensei
|
8
|
+
VERSION = "0.0.2"
|
9
|
+
DEFAULT_MAILDIR = File.expand_path("~/Maildir")
|
10
|
+
|
11
|
+
attr_accessor :maildir_path
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
maildir_path = DEFAULT_MAILDIR
|
15
|
+
end
|
16
|
+
|
17
|
+
def call_from_cli
|
18
|
+
if ARGV.length == 0
|
19
|
+
puts "Usage: kensei API_METHOD [PARAMS...]"
|
20
|
+
exit 1
|
21
|
+
end
|
22
|
+
|
23
|
+
method = ARGV[0].to_sym
|
24
|
+
params = ARGV[1..(ARGV.length-1)]
|
25
|
+
|
26
|
+
if !self.respond_to? method
|
27
|
+
raise "No method '#{method}' currently present in Kensei rubygem API'"
|
28
|
+
end
|
29
|
+
|
30
|
+
puts self.send(method, *params).to_json
|
31
|
+
end
|
32
|
+
|
33
|
+
def version
|
34
|
+
Kensei::VERSION
|
35
|
+
end
|
36
|
+
|
37
|
+
def account_ids
|
38
|
+
Dir[maildir_path+"/*"].map do |path|
|
39
|
+
Pathname.new(path).basename.to_s
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def unread_count(account_id)
|
44
|
+
d = Dir[maildir_path+"/"+account_id+"/"+"INBOX/new/*"]
|
45
|
+
d.entries.count
|
46
|
+
end
|
47
|
+
|
48
|
+
def unified_unread_count
|
49
|
+
account_ids.map {|id| unread_count(id) }.reduce(:+)
|
50
|
+
end
|
51
|
+
|
52
|
+
def folder_list(account_id)
|
53
|
+
d = Dir[maildir_path+"/"+account_id+"/"+"*"]
|
54
|
+
folders = d.entries.map {|path| Pathname.new(path).basename.to_s}.sort
|
55
|
+
end
|
56
|
+
|
57
|
+
def email_list(account_id, folder_id, ordered_by)
|
58
|
+
raise "not implemented yet"
|
59
|
+
end
|
60
|
+
|
61
|
+
def unified_inbox_email_list(ordered_by)
|
62
|
+
#TODO fetch INBOX contents, read and unread, of all account_ids
|
63
|
+
raise "not implemented yet"
|
64
|
+
end
|
65
|
+
|
66
|
+
def email_data(email_id)
|
67
|
+
raise "not implemented yet"
|
68
|
+
end
|
69
|
+
|
70
|
+
def synchronize_now
|
71
|
+
`offlineimap`
|
72
|
+
end
|
73
|
+
|
74
|
+
def synchronize_every(minute_interval)
|
75
|
+
# TODO update kensei crontab
|
76
|
+
raise "not implemented yet"
|
77
|
+
end
|
78
|
+
|
79
|
+
def from_address(account_id)
|
80
|
+
accounts = `cat ~/.msmtprc | grep "^account"`.split("\n")
|
81
|
+
account_number = accounts.index{|account| account =~ /#{account_id}/}
|
82
|
+
from_lines = `cat ~/.msmtprc | grep "^from"`.split("\n")
|
83
|
+
from_address = from_lines[account_number].gsub(/^from/, "").strip
|
84
|
+
end
|
85
|
+
|
86
|
+
def new_email_body(account_id, to, subject, body)
|
87
|
+
from = from_address(account_id)
|
88
|
+
email = <<EMAIL_BODY
|
89
|
+
To: #{to}
|
90
|
+
From: #{from}
|
91
|
+
Subject: #{subject}
|
92
|
+
#{body}
|
93
|
+
EMAIL_BODY
|
94
|
+
end
|
95
|
+
|
96
|
+
def send_email(account_id, to, subject, body)
|
97
|
+
email = new_email_body(account_id, to, subject, body)
|
98
|
+
File.open("/tmp/last-sent", 'w') { |file| file.write(email) }
|
99
|
+
`cat /tmp/last-sent | msmtp -a #{account_id} #{to}`
|
100
|
+
end
|
101
|
+
|
102
|
+
def delete_email(email_id)
|
103
|
+
raise "not implemented yet"
|
104
|
+
end
|
105
|
+
|
106
|
+
def archive_email(email_id)
|
107
|
+
raise "not implemented yet"
|
108
|
+
end
|
109
|
+
|
110
|
+
def move_email(email_id, new_folder)
|
111
|
+
raise "not implemented yet"
|
112
|
+
end
|
113
|
+
|
114
|
+
def search_email(query)
|
115
|
+
raise "not implemented yet"
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
# Creating/updating config files for new gmail accounts
|
121
|
+
|
122
|
+
def add_gmail_account(address, password, account_name)
|
123
|
+
sanitized_acct_name = account_name.gsub(" ", "")
|
124
|
+
update_offlinemap_cfg(address, password, sanitized_acct_name)
|
125
|
+
update_msmtp_cfg(address, password, sanitized_acct_name)
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
def imap_cfg_general_section(account_name)
|
130
|
+
<<GENERALCONFIG
|
131
|
+
# Generated by Kensei.
|
132
|
+
|
133
|
+
[general]
|
134
|
+
accounts = #{account_name}
|
135
|
+
ui = quiet
|
136
|
+
|
137
|
+
|
138
|
+
GENERALCONFIG
|
139
|
+
end
|
140
|
+
|
141
|
+
def imap_cfg_acct_section(address, password, account_name)
|
142
|
+
<<CONFIG
|
143
|
+
[Account #{account_name}]
|
144
|
+
localrepository = #{account_name}-local
|
145
|
+
remoterepository = #{account_name}-remote
|
146
|
+
status_backend = sqlite
|
147
|
+
maxconnections=3
|
148
|
+
|
149
|
+
[Repository #{account_name}-local]
|
150
|
+
type = Maildir
|
151
|
+
localfolders = ~/Maildir/#{account_name}
|
152
|
+
|
153
|
+
[Repository #{account_name}-remote]
|
154
|
+
type = Gmail
|
155
|
+
remoteuser = #{address}
|
156
|
+
remotepass = #{password}
|
157
|
+
nametrans = lambda foldername: foldername.replace("[Gmail]/","")
|
158
|
+
realdelete = no
|
159
|
+
|
160
|
+
|
161
|
+
CONFIG
|
162
|
+
end
|
163
|
+
|
164
|
+
def update_offlinemap_cfg(address, password, account_name)
|
165
|
+
`touch ~/.offlineimaprc && chmod 600 ~/.offlineimaprc`
|
166
|
+
`mkdir -p ~/Maildir/#{account_name}`
|
167
|
+
|
168
|
+
curr_cfg = `cat ~/.offlineimaprc`
|
169
|
+
if curr_cfg =~ /\[general\]/
|
170
|
+
current_account_list = `grep "accounts =" ~/.offlineimaprc`.chomp
|
171
|
+
updated_account_list = current_account_list+", "+account_name
|
172
|
+
`sed -i "s/^.*accounts.*$/#{updated_account_list}/" ~/.offlineimaprc`
|
173
|
+
else
|
174
|
+
`echo '#{imap_cfg_general_section(account_name)}' > ~/.offlineimaprc`
|
175
|
+
end
|
176
|
+
|
177
|
+
`echo '#{imap_cfg_acct_section(address, password, account_name)}' >> ~/.offlineimaprc`
|
178
|
+
end
|
179
|
+
|
180
|
+
def smtp_cfg_general_section()
|
181
|
+
<<GENERALCONFIG
|
182
|
+
# Generated by Kensei.
|
183
|
+
|
184
|
+
defaults
|
185
|
+
auth on
|
186
|
+
tls on
|
187
|
+
|
188
|
+
|
189
|
+
GENERALCONFIG
|
190
|
+
end
|
191
|
+
|
192
|
+
def smtp_cfg_acct_section(address, password, account_name)
|
193
|
+
<<CONFIG
|
194
|
+
account #{account_name}
|
195
|
+
host smtp.gmail.com
|
196
|
+
port 587
|
197
|
+
from #{address}
|
198
|
+
user #{address}
|
199
|
+
password #{password}
|
200
|
+
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
201
|
+
|
202
|
+
|
203
|
+
CONFIG
|
204
|
+
end
|
205
|
+
|
206
|
+
def update_msmtp_cfg(address, password, account_name)
|
207
|
+
`touch ~/.msmtprc && chmod 600 ~/.msmtprc`
|
208
|
+
|
209
|
+
curr_cfg = `cat ~/.msmtprc`
|
210
|
+
if !(curr_cfg =~ /defaults/)
|
211
|
+
`echo '#{smtp_cfg_general_section}' >> ~/.msmtprc`
|
212
|
+
end
|
213
|
+
|
214
|
+
`echo '#{smtp_cfg_acct_section(address, password, account_name)}' >> ~/.msmtprc`
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
MIME-Version: 1.0
|
2
|
+
Received: by 10.112.4.227; Sat, 10 Nov 2012 07:18:48 -0800 (PST)
|
3
|
+
Date: Sat, 10 Nov 2012 07:18:48 -0800
|
4
|
+
Message-ID: <CABQd01MhrVLEspALKVNvfK8v=jf+_JhAqyb4VRRzi+gfBOhXrw@mail.gmail.com>
|
5
|
+
Subject: Get Gmail on your mobile phone
|
6
|
+
From: Gmail Team <mail-noreply@google.com>
|
7
|
+
To: Kensei Test Account <kensei.test@gmail.com>
|
8
|
+
Content-Type: multipart/alternative; boundary=f46d0421a8c1c0866204ce259508
|
9
|
+
|
10
|
+
--f46d0421a8c1c0866204ce259508
|
11
|
+
Content-Type: text/plain; charset=ISO-8859-1
|
12
|
+
Content-Transfer-Encoding: quoted-printable
|
13
|
+
|
14
|
+
[image: Access Gmail on your mobile phone]
|
15
|
+
<http://www.google.com/intl/en/mobile/mail/#utm_source=3Dwel-eml&utm_medium=
|
16
|
+
=3Deml&utm_campaign=3Den>
|
17
|
+
|
18
|
+
The days of needing your computer to get to your inbox are long gone. You
|
19
|
+
can now use Gmail on your mobile phone to access your email from anywhere.
|
20
|
+
Get Gmail for your phone
|
21
|
+
=BB<http://www.google.com/intl/en/mobile/mail/#utm_source=3Dwel-eml&utm_med=
|
22
|
+
ium=3Deml&utm_campaign=3Den>
|
23
|
+
|
24
|
+
--f46d0421a8c1c0866204ce259508
|
25
|
+
Content-Type: text/html; charset=ISO-8859-1
|
26
|
+
|
27
|
+
<html>
|
28
|
+
<font face="Arial, Helvetica, sans-serif">
|
29
|
+
<p>
|
30
|
+
<a href="http://www.google.com/intl/en/mobile/mail/#utm_source=wel-eml&utm_medium=eml&utm_campaign=en">
|
31
|
+
<img src="https://mail.google.com/mail/images/phones.png"
|
32
|
+
alt="Access Gmail on your mobile phone"
|
33
|
+
style="border:0px;"/>
|
34
|
+
</a>
|
35
|
+
</p>
|
36
|
+
<p>The days of needing your computer to get to your inbox are long gone. You can
|
37
|
+
now use Gmail on your mobile phone to access your email from anywhere.</p>
|
38
|
+
|
39
|
+
<table cellpadding="0" cellspacing="0">
|
40
|
+
<col style="width: 1px;"/>
|
41
|
+
<col/>
|
42
|
+
<col style="width: 1px;"/>
|
43
|
+
<tr>
|
44
|
+
<td></td>
|
45
|
+
<td height="1px" style="background-color: #ddd"></td>
|
46
|
+
<td></td>
|
47
|
+
</tr>
|
48
|
+
<tr>
|
49
|
+
<td style="background-color: #ddd"></td>
|
50
|
+
<td background="https://mail.google.com/mail/images/welcome-button-background.png"
|
51
|
+
style="background-color: #ddd; background-repeat: repeat-x;
|
52
|
+
padding: 10px; font-size: larger">
|
53
|
+
<a href="http://www.google.com/intl/en/mobile/mail/#utm_source=wel-eml&utm_medium=eml&utm_campaign=en"
|
54
|
+
style="font-weight: bold; color: #000; text-decoration: none;
|
55
|
+
display: block;">
|
56
|
+
Get Gmail for your phone »</a>
|
57
|
+
</td>
|
58
|
+
<td style="background-color: #ddd"></td>
|
59
|
+
</tr>
|
60
|
+
<tr>
|
61
|
+
<td></td>
|
62
|
+
<td height="1px" style="background-color: #ddd"></td>
|
63
|
+
<td></td>
|
64
|
+
</tr>
|
65
|
+
</table>
|
66
|
+
</p>
|
67
|
+
</font>
|
68
|
+
</html>
|
69
|
+
|
70
|
+
--f46d0421a8c1c0866204ce259508--
|
@@ -0,0 +1,79 @@
|
|
1
|
+
MIME-Version: 1.0
|
2
|
+
Received: by 10.112.4.227; Sat, 10 Nov 2012 07:18:48 -0800 (PST)
|
3
|
+
Date: Sat, 10 Nov 2012 07:18:48 -0800
|
4
|
+
Message-ID: <CABQd01N+VFn89guaFCcBu+x=rJudno+yarZPZF1=CqWDz=sQnw@mail.gmail.com>
|
5
|
+
Subject: Import your contacts and old email
|
6
|
+
From: Gmail Team <mail-noreply@google.com>
|
7
|
+
To: Kensei Test Account <kensei.test@gmail.com>
|
8
|
+
Content-Type: multipart/alternative; boundary=00151748de9ec3315804ce259570
|
9
|
+
|
10
|
+
--00151748de9ec3315804ce259570
|
11
|
+
Content-Type: text/plain; charset=ISO-8859-1
|
12
|
+
Content-Transfer-Encoding: quoted-printable
|
13
|
+
|
14
|
+
You can import your contacts and mail from Yahoo!, Hotmail, AOL, and many
|
15
|
+
other web mail or POP accounts. If you want, we'll even keep importing your
|
16
|
+
mail for the next 30 days.
|
17
|
+
Import contacts and mail
|
18
|
+
=BB<https://mail.google.com/mail/#settings/accounts>
|
19
|
+
|
20
|
+
We know it can be a pain to switch email accounts, and we hope this makes
|
21
|
+
the transition to Gmail a bit easier.
|
22
|
+
|
23
|
+
- The Gmail Team
|
24
|
+
|
25
|
+
Please note that importing is not available if you're using Internet
|
26
|
+
Explorer 6.0. To take advantage of the latest Gmail features, please upgrad=
|
27
|
+
e
|
28
|
+
to a fully supported
|
29
|
+
browser<http://support.google.com/mail/bin/answer.py?answer=3D6557&hl=3Den&=
|
30
|
+
utm_source=3Dwel-eml&utm_medium=3Deml&utm_campaign=3Den>
|
31
|
+
.
|
32
|
+
|
33
|
+
--00151748de9ec3315804ce259570
|
34
|
+
Content-Type: text/html; charset=ISO-8859-1
|
35
|
+
|
36
|
+
<html>
|
37
|
+
<font face="Arial, Helvetica, sans-serif">
|
38
|
+
<p>You can import your contacts and mail from Yahoo!, Hotmail, AOL, and many
|
39
|
+
other web mail or POP accounts. If you want, we'll even keep importing your
|
40
|
+
mail for the next 30 days.</p>
|
41
|
+
|
42
|
+
<table cellpadding="0" cellspacing="0">
|
43
|
+
<col style="width: 1px" /><col /><col style="width: 1px" />
|
44
|
+
<tr>
|
45
|
+
<td></td>
|
46
|
+
<td height="1px" style="background-color: #ddd"></td>
|
47
|
+
<td></td>
|
48
|
+
</tr>
|
49
|
+
<tr>
|
50
|
+
<td style="background-color: #ddd"></td>
|
51
|
+
<td background="https://mail.google.com/mail/images/welcome-button-background.png"
|
52
|
+
style="background-color: #ddd; background-repeat: repeat-x"
|
53
|
+
><a href="https://mail.google.com/mail/#settings/accounts"
|
54
|
+
style="font-weight: bold; color: #000; text-decoration: none; display: block; padding: 0.5em 1em"
|
55
|
+
>Import contacts and mail »</a></td>
|
56
|
+
<td style="background-color: #ddd"></td>
|
57
|
+
</tr>
|
58
|
+
<tr>
|
59
|
+
<td></td>
|
60
|
+
<td height="1px" style="background-color: #ddd"></td>
|
61
|
+
<td></td>
|
62
|
+
</tr>
|
63
|
+
</table>
|
64
|
+
|
65
|
+
<p>We know it can be a pain to switch email accounts, and we hope this makes
|
66
|
+
the transition to Gmail a bit easier.</p>
|
67
|
+
|
68
|
+
<p>- The Gmail Team</p>
|
69
|
+
|
70
|
+
<p><font size="-2" color="#999">Please note that importing is not available if
|
71
|
+
you're using Internet Explorer 6.0. To take advantage of the latest Gmail
|
72
|
+
features, please
|
73
|
+
<a href="http://support.google.com/mail/bin/answer.py?answer=6557&hl=en&utm_source=wel-eml&utm_medium=eml&utm_campaign=en"><font color="#999">
|
74
|
+
upgrade to a fully supported browser</font></a>.</font></p>
|
75
|
+
|
76
|
+
</font>
|
77
|
+
</html>
|
78
|
+
|
79
|
+
--00151748de9ec3315804ce259570--
|