Kensei 0.0.2
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 +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--
|