markdown_gmail_sender 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 16edcd6d9d8c24ffd88b041a29cdb28ea90f757c
4
+ data.tar.gz: 904994b98bcec5d7d46f2b17c940deae419c384d
5
+ SHA512:
6
+ metadata.gz: 12c24b154fc4a4ddf7cc7fa05f2417a58ee0f93c007c51b4ca3d431b92f5c0ea71a6afa9d3ec8883e6d64606cad5a5f73191eb95b2b2f64195dfd9c961595f5d
7
+ data.tar.gz: 1d6e51ad9146b88d5604eef62bff26a0b1d38188f75c91f4d805a6bc399219ae2d7bda2e6d44e3b38074089d1c999cf5e6d0a2f96b7ebf4dd5d6a9c324d93673
Binary file
Binary file
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: markdown_gmail_sender.rb
4
+
5
+ require 'gmail'
6
+ require 'rdiscount'
7
+ require 'fileutils'
8
+
9
+
10
+ class MarkdownGmailSender
11
+
12
+ def initialize(accounts={}, compose_dir: '~/email/compose',
13
+ sent_dir: '~/email/sent')
14
+
15
+ @accounts = accounts
16
+
17
+ compose_dirpath = File.expand_path(compose_dir)
18
+ @sent_dir = File.expand_path(sent_dir)
19
+ FileUtils.mkdir_p @sent_dir
20
+
21
+ # scan the compose directory for email files to deliver
22
+
23
+ @messages = Dir.glob(File.join(compose_dirpath, '*.md')).map do |filepath|
24
+
25
+ s = File.read filepath
26
+
27
+ from = s[/from: ([\S]+)/,1]
28
+ to = s[/to: ([\S]+)/,1]
29
+ subject = s[/subject: ([^\n]+)/,1]
30
+ subject_line = s.lines.detect{|x| x =~ /subject: / }
31
+ body = s.lines[(s.lines.index(subject_line) + 1) .. -1].join.strip
32
+
33
+ {
34
+ filepath: filepath,
35
+ from: from, to: to,
36
+ subject: subject,
37
+ body_txt: body, body_html: RDiscount.new(body).to_html
38
+ }
39
+
40
+ end
41
+
42
+ end
43
+
44
+ def deliver_all()
45
+
46
+ @messages.each.with_index do |x, i|
47
+
48
+ username, password = x[:from], @accounts[x[:from]]
49
+ gmail = Gmail.new(username, password)
50
+
51
+ gmail.deliver do
52
+
53
+ to x[:to]
54
+ subject x[:subject]
55
+
56
+ text_part do
57
+ body x[:body_txt]
58
+ end
59
+
60
+ html_part do
61
+ content_type 'text/html; charset=UTF-8'
62
+ body x[:body_html]
63
+ end
64
+
65
+ end
66
+
67
+ target = Time.now.strftime("m%d%m%yT%H%Ma")
68
+ target.succ! while File.exists? target
69
+
70
+ FileUtils.mv x[:filepath], File.join(@sent_dir, target + '.md')
71
+
72
+ puts "message #{(i+1).to_s} sent"
73
+
74
+ end
75
+
76
+ end
77
+
78
+ alias deliver deliver_all
79
+
80
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: markdown_gmail_sender
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTE2MDUzMDIzMjM1NloXDTE3MDUzMDIzMjM1NlowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBALXaeRDHUBEcpY3G5wKDawmPyWhWqHW/iVeSEHkotVIYRlYsZ8N29FRacHTS
19
+ /d4qiRzEV6fKf6fFSxW6GvItaFcbdnRAm8e21m/PCZmwwArBwnzySjBOfxTKzNoO
20
+ 1Rt80IXesEHQWjXpar44W1fPfHavUPS2l3l52D4EbztdS4KNgOW4XrGphbZFoiad
21
+ L9a7C4l8/RJndop9WLrkZvz1kLW7kcAfc1rTHTUCAEXsomj9iQLGzVl9ln4NuDCe
22
+ rvmJ4yBUDuBvb4i4f0xZm+027cygvGxO1iKqebSIuIRG5dVpiOF5k4W6oXO1ieUB
23
+ lywufAbFAjJywz6AIT88/Dhc/fMCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUBVtQvaCgZDE8L27mBXfLu0y24fwwJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAXcDK1aT1
27
+ sffllr3kKSq+QTHc3Elx7hHs8qoPvrBSgLm2kSF+8qlYS22g6vh/LYDzMfyhpib2
28
+ gCPUe++7f5ZaBdYCxbWu43h9y08OQdCx8G+cYZEmwP30HRBp61kMspVK0Dh3IUP5
29
+ N2JxwyVzFZnSQeiPCAiYgPfbB9SvpFI/VU9v/i75hnsP4amE7pcCe14rMsEgepo0
30
+ +q0g0nvJmpTYUKk6IfEQFzljhj988cTfdR4mBKEUyayetj0ybG6DGe8soEl771Cb
31
+ OLGmpGkaE9Sobz20K+IVp5+s3z06CrVYK7TN2gXYiGZRGAxmnd3sd0F8Aewu4uWI
32
+ HiWyElQDGz9Bjw==
33
+ -----END CERTIFICATE-----
34
+ date: 2016-05-30 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: gmail
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.6'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 0.6.0
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '0.6'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.6.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: rdiscount
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '2.2'
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 2.2.0.1
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '2.2'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 2.2.0.1
76
+ description:
77
+ email: james@r0bertson.co.uk
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - lib/markdown_gmail_sender.rb
83
+ homepage: https://github.com/jrobertson/markdown_gmail_sender
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.5.1
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Scans a *compose* folder (file directory) for messages (files in markdown
107
+ format) to send using the gmail gem.
108
+ test_files: []
@@ -0,0 +1,5 @@
1
+ ho��l��� d�׼s��J��R ��F�ѯ�z<��?Z0�9
2
+ "_�PZ��;�K݃p�)B �K�d2�S���vl$� &�#�{/|�R�
3
+ �����n�u��1Coޣ@
4
+ �ҷ;C�e�c <�x"���L��q���
5
+ T\Y�$H#��������'|3l/�0`4D�JLB�J-��hY]c��C���c��8�xʠ��8D���T��;{A,�c��n�&�djӓ��w;[Sζ� �=#" ���