gmailer 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +4 -0
- data/README +11 -1
- data/gmailer.rb +56 -37
- metadata +2 -2
data/CHANGES
CHANGED
data/README
CHANGED
@@ -50,12 +50,22 @@ Or even
|
|
50
50
|
Or shorter
|
51
51
|
|
52
52
|
GMailer.connect(name, pwd) do |g|
|
53
|
+
# 'From' default gmail.com account
|
53
54
|
g.send(
|
54
55
|
:to => "who@what.com, my_friend@his_company.com, god@heaven.org"
|
55
56
|
:cc => "foo@bar.com"
|
56
57
|
:subject => "Hello There!",
|
57
58
|
:body => "Hi...\n\nBlah blah blah~...",
|
58
59
|
:files => ["./my_pic.jpg", "./my_cv.txt"])
|
60
|
+
|
61
|
+
# multiple verified email addresses and choose one 'From:' email address
|
62
|
+
g.send(
|
63
|
+
:from => "verified@email.com",
|
64
|
+
:to => "who@what.com, my_friend@his_company.com, god@heaven.org"
|
65
|
+
:cc => "foo@bar.com"
|
66
|
+
:subject => "Hello There!",
|
67
|
+
:body => "Hi...\n\nBlah blah blah~...",
|
68
|
+
:files => ["./my_pic.jpg", "./my_cv.txt"])
|
59
69
|
end
|
60
70
|
|
61
71
|
|
@@ -210,7 +220,7 @@ connect(connet hash)
|
|
210
220
|
e.g. connect(:username=>'user',:password=>'pass',:proxy_host=>'proxy-host',
|
211
221
|
:proxy_port=>8080,:proxy_user=>'proxy_user',:proxy_pass=>'proxy_pass')
|
212
222
|
|
213
|
-
|
223
|
+
connected?
|
214
224
|
To check if connected.
|
215
225
|
|
216
226
|
fetch(action hash)
|
data/gmailer.rb
CHANGED
@@ -50,7 +50,7 @@ GM_ACT_DELTRASH = 21 # delete trash message, forever
|
|
50
50
|
|
51
51
|
class GMailer
|
52
52
|
|
53
|
-
VERSION = "0.0.
|
53
|
+
VERSION = "0.0.8"
|
54
54
|
|
55
55
|
@cookie_str
|
56
56
|
@login
|
@@ -231,7 +231,7 @@ class GMailer
|
|
231
231
|
# return bool
|
232
232
|
# desc See if it is connected to GMail.
|
233
233
|
#
|
234
|
-
def
|
234
|
+
def connected?
|
235
235
|
!@cookie_str.empty?
|
236
236
|
end
|
237
237
|
|
@@ -241,11 +241,11 @@ class GMailer
|
|
241
241
|
# desc Fetch contents by URL query.
|
242
242
|
#
|
243
243
|
def __fetch(query)
|
244
|
-
if
|
244
|
+
if connected?
|
245
245
|
Debugger::say("Start fetching query: " + query)
|
246
246
|
query += "&zv=" + (rand(2000)*2147483.648).to_i.to_s
|
247
247
|
np = Net::HTTP::Proxy(@proxy_host,@proxy_port,@proxy_user,@proxy_pass).new(GM_LNK_HOST, 80)
|
248
|
-
#
|
248
|
+
# np.set_debug_output($stderr)
|
249
249
|
inbox = ''
|
250
250
|
np.start { |http|
|
251
251
|
response = http.get(GM_LNK_GMAIL + "?" + query,{'Cookie' => @cookie_str,'User-agent' => GM_USER_AGENT })
|
@@ -299,7 +299,7 @@ class GMailer
|
|
299
299
|
#
|
300
300
|
def fetch_box(type, box, pos)
|
301
301
|
|
302
|
-
if
|
302
|
+
if connected?
|
303
303
|
case type
|
304
304
|
when GM_STANDARD
|
305
305
|
q = "search=" + box.downcase + "&view=tl&start=" + pos.to_s
|
@@ -398,7 +398,7 @@ class GMailer
|
|
398
398
|
#
|
399
399
|
def attachments_of(convs, path)
|
400
400
|
|
401
|
-
if
|
401
|
+
if connected?
|
402
402
|
if (convs.class != Array)
|
403
403
|
convs = [convs] # array wrapper
|
404
404
|
end
|
@@ -428,7 +428,7 @@ class GMailer
|
|
428
428
|
#
|
429
429
|
def zip_attachments_of(convs, path)
|
430
430
|
|
431
|
-
if
|
431
|
+
if connected?
|
432
432
|
if (convs.class != Array)
|
433
433
|
convs = [convs] # array wrapper
|
434
434
|
end
|
@@ -457,7 +457,7 @@ class GMailer
|
|
457
457
|
#
|
458
458
|
def attachment(attid, msgid, filename, zipped=false)
|
459
459
|
|
460
|
-
if
|
460
|
+
if connected?
|
461
461
|
Debugger::say("Start getting attachment...")
|
462
462
|
|
463
463
|
if !zipped
|
@@ -486,7 +486,7 @@ class GMailer
|
|
486
486
|
# desc get label lists
|
487
487
|
#
|
488
488
|
def labels()
|
489
|
-
if
|
489
|
+
if connected?
|
490
490
|
fetch(:standard=>"inbox") {|s| s.label_list }
|
491
491
|
else
|
492
492
|
nil
|
@@ -518,7 +518,7 @@ class GMailer
|
|
518
518
|
# desc create label
|
519
519
|
#
|
520
520
|
def create_label(label)
|
521
|
-
if
|
521
|
+
if connected?
|
522
522
|
perform_action(GM_ACT_CREATELABEL, '', validate_label(label))
|
523
523
|
else
|
524
524
|
false
|
@@ -531,7 +531,7 @@ class GMailer
|
|
531
531
|
# desc create label
|
532
532
|
#
|
533
533
|
def delete_label(label)
|
534
|
-
if
|
534
|
+
if connected?
|
535
535
|
perform_action(GM_ACT_DELETELABEL, '', validate_label(label))
|
536
536
|
else
|
537
537
|
false
|
@@ -545,7 +545,7 @@ class GMailer
|
|
545
545
|
# desc create label
|
546
546
|
#
|
547
547
|
def rename_label(old_label,new_label)
|
548
|
-
if
|
548
|
+
if connected?
|
549
549
|
perform_action(GM_ACT_RENAMELABEL, '',
|
550
550
|
validate_label(old_label) +'^' + validate_label(new_label))
|
551
551
|
else
|
@@ -560,7 +560,7 @@ class GMailer
|
|
560
560
|
# desc apply label to message
|
561
561
|
#
|
562
562
|
def apply_label(id,label)
|
563
|
-
if
|
563
|
+
if connected?
|
564
564
|
perform_action(GM_ACT_APPLYLABEL, id, validate_label(label))
|
565
565
|
else
|
566
566
|
false
|
@@ -574,7 +574,7 @@ class GMailer
|
|
574
574
|
# desc remove label from message
|
575
575
|
#
|
576
576
|
def remove_label(id,label)
|
577
|
-
if
|
577
|
+
if connected?
|
578
578
|
perform_action(GM_ACT_REMOVELABEL, id, validate_label(label))
|
579
579
|
else
|
580
580
|
false
|
@@ -587,7 +587,7 @@ class GMailer
|
|
587
587
|
# desc remove label from message
|
588
588
|
#
|
589
589
|
def update_preference(hash_param)
|
590
|
-
if
|
590
|
+
if connected?
|
591
591
|
args = {}
|
592
592
|
hash_param.keys.each do |k|
|
593
593
|
case k
|
@@ -622,7 +622,7 @@ class GMailer
|
|
622
622
|
# desc apply star to a message
|
623
623
|
#
|
624
624
|
def apply_star(msgid)
|
625
|
-
if
|
625
|
+
if connected?
|
626
626
|
perform_action(GM_ACT_STAR,msgid, '')
|
627
627
|
else
|
628
628
|
false
|
@@ -635,7 +635,7 @@ class GMailer
|
|
635
635
|
# desc remove star from a message
|
636
636
|
#
|
637
637
|
def remove_star(msgid)
|
638
|
-
if
|
638
|
+
if connected?
|
639
639
|
perform_action(GM_ACT_UNSTAR,msgid, '')
|
640
640
|
else
|
641
641
|
false
|
@@ -648,7 +648,7 @@ class GMailer
|
|
648
648
|
# desc report a message as spam
|
649
649
|
#
|
650
650
|
def report_spam(msgid)
|
651
|
-
if
|
651
|
+
if connected?
|
652
652
|
perform_action(GM_ACT_SPAM,msgid, '')
|
653
653
|
else
|
654
654
|
false
|
@@ -661,7 +661,7 @@ class GMailer
|
|
661
661
|
# desc report a message as not spam
|
662
662
|
#
|
663
663
|
def not_spam(msgid)
|
664
|
-
if
|
664
|
+
if connected?
|
665
665
|
perform_action(GM_ACT_UNSPAM,msgid, '')
|
666
666
|
else
|
667
667
|
false
|
@@ -674,7 +674,7 @@ class GMailer
|
|
674
674
|
# desc delete a spam message forever
|
675
675
|
#
|
676
676
|
def delete_spam(msgid)
|
677
|
-
if
|
677
|
+
if connected?
|
678
678
|
perform_action(GM_ACT_DELSPAM,msgid, '')
|
679
679
|
else
|
680
680
|
false
|
@@ -687,7 +687,7 @@ class GMailer
|
|
687
687
|
# desc mark a message as read
|
688
688
|
#
|
689
689
|
def mark_read(msgid)
|
690
|
-
if
|
690
|
+
if connected?
|
691
691
|
perform_action(GM_ACT_READ,msgid, '')
|
692
692
|
else
|
693
693
|
false
|
@@ -700,7 +700,7 @@ class GMailer
|
|
700
700
|
# desc mark a message as unread
|
701
701
|
#
|
702
702
|
def mark_unread(msgid)
|
703
|
-
if
|
703
|
+
if connected?
|
704
704
|
perform_action(GM_ACT_UNREAD,msgid, '')
|
705
705
|
else
|
706
706
|
false
|
@@ -713,7 +713,7 @@ class GMailer
|
|
713
713
|
# desc move a message to trash
|
714
714
|
#
|
715
715
|
def trash_in(msgid)
|
716
|
-
if
|
716
|
+
if connected?
|
717
717
|
perform_action(GM_ACT_TRASH,msgid, '')
|
718
718
|
else
|
719
719
|
false
|
@@ -726,7 +726,7 @@ class GMailer
|
|
726
726
|
# desc move a message from trash to inbox
|
727
727
|
#
|
728
728
|
def trash_out(msgid)
|
729
|
-
if
|
729
|
+
if connected?
|
730
730
|
perform_action(GM_ACT_UNTRASH,msgid, '')
|
731
731
|
else
|
732
732
|
false
|
@@ -739,7 +739,7 @@ class GMailer
|
|
739
739
|
# desc delete a trash message forever
|
740
740
|
#
|
741
741
|
def delete_trash(msgid)
|
742
|
-
if
|
742
|
+
if connected?
|
743
743
|
perform_action(GM_ACT_DELTRASH,msgid, '')
|
744
744
|
else
|
745
745
|
false
|
@@ -752,7 +752,7 @@ class GMailer
|
|
752
752
|
# desc delete a message forever
|
753
753
|
#
|
754
754
|
def delete_message(msgid)
|
755
|
-
if
|
755
|
+
if connected?
|
756
756
|
perform_action(GM_ACT_DELFOREVER,msgid, '')
|
757
757
|
else
|
758
758
|
false
|
@@ -765,7 +765,7 @@ class GMailer
|
|
765
765
|
# desc archive a message
|
766
766
|
#
|
767
767
|
def archive(msgid)
|
768
|
-
if
|
768
|
+
if connected?
|
769
769
|
perform_action(GM_ACT_ARCHIVE,msgid, '')
|
770
770
|
else
|
771
771
|
false
|
@@ -778,7 +778,7 @@ class GMailer
|
|
778
778
|
# desc archive a message
|
779
779
|
#
|
780
780
|
def unarchive(msgid)
|
781
|
-
if
|
781
|
+
if connected?
|
782
782
|
perform_action(GM_ACT_INBOX,msgid, '')
|
783
783
|
else
|
784
784
|
false
|
@@ -790,7 +790,7 @@ class GMailer
|
|
790
790
|
# desc get preferences
|
791
791
|
#
|
792
792
|
def preference()
|
793
|
-
if
|
793
|
+
if connected?
|
794
794
|
fetch(:preference=>"all").preference
|
795
795
|
else
|
796
796
|
nil
|
@@ -802,7 +802,7 @@ class GMailer
|
|
802
802
|
# desc get message lists
|
803
803
|
#
|
804
804
|
def messages(hash_param)
|
805
|
-
if
|
805
|
+
if connected?
|
806
806
|
fetch(hash_param) {|s| s.box }
|
807
807
|
else
|
808
808
|
nil
|
@@ -816,7 +816,7 @@ class GMailer
|
|
816
816
|
#
|
817
817
|
def dump(query)
|
818
818
|
page = ''
|
819
|
-
if
|
819
|
+
if connected?
|
820
820
|
Debugger::say("Dumping...")
|
821
821
|
query += "&zv=" + (rand(2000)*2147483.648).to_i.to_s
|
822
822
|
np = Net::HTTP::Proxy(@proxy_host,@proxy_port,@proxy_user,@proxy_pass).new(GM_LNK_HOST, 80)
|
@@ -852,6 +852,7 @@ class GMailer
|
|
852
852
|
def send(*param)
|
853
853
|
if param.length==1 && param[0].class==Hash
|
854
854
|
param = param[0]
|
855
|
+
from = param[:from] || ''
|
855
856
|
to = param[:to] || ''
|
856
857
|
subject = param[:subject] || ''
|
857
858
|
body = param[:body] || ''
|
@@ -864,12 +865,23 @@ class GMailer
|
|
864
865
|
draft_id = param[:draft_id] || ''
|
865
866
|
elsif param.length==10
|
866
867
|
to, subject, body, cc, bcc, msg_id, thread_id, files, draft, draft_id = param
|
868
|
+
elsif param.length==11
|
869
|
+
from, to, subject, body, cc, bcc, msg_id, thread_id, files, draft, draft_id = param
|
867
870
|
else
|
868
871
|
raise ArgumentError, 'Invalid argument'
|
869
872
|
end
|
870
873
|
|
871
|
-
if
|
874
|
+
if connected?
|
872
875
|
Debugger::say("Starting to send mail...")
|
876
|
+
other_emails = fetch(:preference=>"all").other_emails
|
877
|
+
if other_emails.length>0
|
878
|
+
other_emails.each {|v|
|
879
|
+
from = v['email'] if from=='' && v['default']
|
880
|
+
}
|
881
|
+
from = @login + 'gmail.com' if from==''
|
882
|
+
else
|
883
|
+
from = nil
|
884
|
+
end
|
873
885
|
|
874
886
|
postdata = {}
|
875
887
|
if draft
|
@@ -884,6 +896,7 @@ class GMailer
|
|
884
896
|
postdata["th"] = thread_id
|
885
897
|
end
|
886
898
|
postdata["msgbody"] = stripslashes(body)
|
899
|
+
postdata["from"] = stripslashes(from) if from
|
887
900
|
postdata["to"] = stripslashes(to)
|
888
901
|
postdata["subject"] = stripslashes(subject)
|
889
902
|
postdata["cc"] = stripslashes(cc)
|
@@ -920,7 +933,7 @@ class GMailer
|
|
920
933
|
|
921
934
|
np = Net::HTTP::Proxy(@proxy_host,@proxy_port,@proxy_user,@proxy_pass).new(GM_LNK_HOST, 80)
|
922
935
|
response = nil
|
923
|
-
#
|
936
|
+
# np.set_debug_output($stderr)
|
924
937
|
np.start { |http|
|
925
938
|
response = http.post(GM_LNK_GMAIL, postdata,{'Cookie' => @cookie_str,'User-agent' => GM_USER_AGENT,'Content-type' => 'multipart/form-data; boundary=' + boundary } )
|
926
939
|
}
|
@@ -942,7 +955,7 @@ class GMailer
|
|
942
955
|
#
|
943
956
|
def perform_action(act, id, para)
|
944
957
|
|
945
|
-
if
|
958
|
+
if connected?
|
946
959
|
Debugger::say("Start performing action...")
|
947
960
|
|
948
961
|
if (act == GM_ACT_DELFOREVER)
|
@@ -987,7 +1000,7 @@ class GMailer
|
|
987
1000
|
end
|
988
1001
|
|
989
1002
|
np = Net::HTTP::Proxy(@proxy_host,@proxy_port,@proxy_user,@proxy_pass).new(GM_LNK_HOST, 80)
|
990
|
-
#
|
1003
|
+
# np.set_debug_output($stderr)
|
991
1004
|
np.start { |http|
|
992
1005
|
response = http.post(link, postdata,{'Cookie' => @cookie_str,'User-agent' => GM_USER_AGENT} )
|
993
1006
|
result = response.body
|
@@ -1068,7 +1081,7 @@ class GMailer
|
|
1068
1081
|
#
|
1069
1082
|
def invite(email)
|
1070
1083
|
|
1071
|
-
if
|
1084
|
+
if connected?
|
1072
1085
|
Debugger::say("Start sending invite...")
|
1073
1086
|
|
1074
1087
|
postdata = "act=ii&em=" + URI.escape(email)
|
@@ -1170,7 +1183,7 @@ class GMailSnapshot
|
|
1170
1183
|
attr_reader :std_box_new, :have_invit, :label_list, :label_new
|
1171
1184
|
attr_reader :box_name, :box_total, :box_pos, :box
|
1172
1185
|
attr_reader :conv_title, :conv_total, :conv_id, :conv_labels, :conv_starred, :conv
|
1173
|
-
attr_reader :contacts
|
1186
|
+
attr_reader :contacts, :other_emails
|
1174
1187
|
|
1175
1188
|
def initialize(type, raw, charset='UTF-8')
|
1176
1189
|
|
@@ -1389,6 +1402,12 @@ class GMailSnapshot
|
|
1389
1402
|
@label_list.push(v[0])
|
1390
1403
|
@label_total.push(v[1])
|
1391
1404
|
}
|
1405
|
+
@other_emails = []
|
1406
|
+
if raw["cfs"]
|
1407
|
+
raw["cfs"][1].each {|v|
|
1408
|
+
@other_emails.push({"name"=>decode(v[0]),"email"=>v[1],"default"=>(v[2]==1)})
|
1409
|
+
}
|
1410
|
+
end
|
1392
1411
|
@filter = []
|
1393
1412
|
@filter_rules = []
|
1394
1413
|
raw["fi"][1].each { |fi|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: gmailer
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.0.8
|
7
|
+
date: 2005-09-03
|
8
8
|
summary: "An class interface of the Google's webmail service"
|
9
9
|
require_paths:
|
10
10
|
- ''
|