markdown_mail_sender 0.1.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3e47bd09ee5de38cd21b2c79250238d6f2ad4b44
4
+ data.tar.gz: 7ed7221510a648c636f46271a15dbaa69f6664e6
5
+ SHA512:
6
+ metadata.gz: 507b9231374792f493ea0e91a43db7ae24ecb2c99f235f47093e1ddfdcc7f410dff0b887000b4a6da3f96c7e8d6935a0b84d90bad293a7b76e3a3bbf74b3c63e
7
+ data.tar.gz: c9443c75400f473855e466aabe2c6cd2b164f8b28988886d3e8a3607e8e4e1f7b695aa13a5b9a032a7faa4af8684544186a4fae76e0aadbeea72173b7ddced18
Binary file
Binary file
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: markdown_mail_sender.rb
4
+
5
+ require 'net/smtp'
6
+ require 'rdiscount'
7
+ require 'fileutils'
8
+
9
+
10
+ class MarkdownMailSender
11
+
12
+ def initialize(user, password, compose_dir: '~/email/compose',
13
+ sent_dir: '~/email/sent', smtp_host: nil, from_domain: smtp_host)
14
+
15
+ @user, @password = user, password
16
+ @smtp_host, @mail_from_domain = smtp_host, from_domain
17
+
18
+ compose_dirpath = File.expand_path(compose_dir)
19
+ @sent_dir = File.expand_path(sent_dir)
20
+ FileUtils.mkdir_p @sent_dir
21
+
22
+ # scan the compose directory for email files to deliver
23
+
24
+ @messages = Dir.glob(File.join(compose_dirpath, '*.md')).map \
25
+ do |msg_filepath|
26
+
27
+ s = File.read msg_filepath
28
+
29
+ regex = %r{
30
+
31
+ (?<email>(?:.*<)?\w+(?:\.\w+)?@\S+>?){0}
32
+ (?<filepath>\s*[\w\/\.]+\s+){0}
33
+
34
+ from:\s(?<from>\g<email>)\s+
35
+ to:\s(?<to>\g<email>)\s+
36
+ (?:attachments?:\s+(?<attachments>\g<filepath>*))?
37
+ subject:\s+(?<subject> [^\n]+)\n
38
+ (?<body> .*)
39
+
40
+ }xm =~ s
41
+
42
+ files = attachments.nil? ? [] : attachments.split.map(&:strip)
43
+
44
+ {
45
+ filepath: msg_filepath, from: from, to: to, attachments: files,
46
+ subject: subject, body_txt: body,
47
+ body_html: RDiscount.new(body).to_html
48
+ }
49
+
50
+ end
51
+
52
+ end
53
+
54
+ def deliver_all()
55
+
56
+ @messages.each.with_index do |x, i|
57
+
58
+ puts 'xx: ' + x.inspect
59
+
60
+ raw_marker = "AUNIQUEMARKER"
61
+ marker = "\n--#{raw_marker}"
62
+
63
+ from, to, subject = %i(from to subject).map {|name| x[name]}
64
+
65
+ header =<<EOF
66
+ From: #{from}
67
+ To: #{to}
68
+ Subject: #{subject}
69
+ MIME-Version: 1.0
70
+ Content-Type: multipart/mixed; boundary=#{raw_marker}
71
+ EOF
72
+
73
+ # Define the message action
74
+ txt_part =<<EOF
75
+ Content-Type: text/plain
76
+ Content-Transfer-Encoding:8bit
77
+
78
+ #{x[:body_txt]}
79
+ EOF
80
+
81
+ html_part =<<EOF
82
+ Content-Type: text/html
83
+
84
+ #{x[:body_html]}
85
+ EOF
86
+
87
+ a = [header, txt_part, html_part]
88
+
89
+ if x[:attachments].any? then
90
+
91
+ attachments = x[:attachments].map {|x| file_part x}
92
+ a.concat attachments
93
+
94
+ end
95
+
96
+ mailtext = a.join(marker + "\n") + marker + "--"
97
+
98
+ Net::SMTP.start(@smtp_host, 25, @mail_from_domain, @user,
99
+ @password, :login) do |smtp|
100
+
101
+ smtp.send_message mailtext, from, to
102
+
103
+ end
104
+
105
+
106
+ target = Time.now.strftime("m%d%m%yT%H%Ma")
107
+ target.succ! while File.exists? target
108
+
109
+ FileUtils.mv x[:filepath], File.join(@sent_dir, target + '.md')
110
+
111
+ end
112
+
113
+ end
114
+
115
+ alias deliver deliver_all
116
+
117
+ def file_part(filepath)
118
+
119
+ # Read a file and encode it into base64 format
120
+
121
+ filecontent = File.read filepath
122
+ encodedcontent = [filecontent].pack("m") # base64
123
+
124
+ filename = File.basename filepath
125
+
126
+ <<EOF
127
+ Content-Type: multipart/mixed; name="#{filename}"
128
+ Content-Transfer-Encoding:base64
129
+ Content-Disposition: attachment; filename="#{filename}"
130
+
131
+ #{encodedcontent}
132
+ EOF
133
+
134
+ end
135
+
136
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: markdown_mail_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
+ 8ixkARkWAmV1MB4XDTE2MDYyMzExMDU0NVoXDTE3MDYyMzExMDU0NVowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBAK1G/P91SkRwCwsloDOn3vc5+Tlif3KBdqhxlvT/t/Ai2YB0y64p6UPI1+QW
19
+ ppoUimTC9ko4ChII8nVUrhtBc2OmhXd+rKLqfx7MpC0VedMGz2rYeAVZ7OnVqxkC
20
+ BV8WmKFPYkNW/xB/Li9/6s8VjLP/OvlIvjLaFlLWIDjRXmrQZ9/urN46yrdE2JPs
21
+ kw1yQIdDHfHKq8z3xf7x0nSgfyQMR/48hSqnAeaItVEHgZ0GzpC9EhGHQqOzXXXQ
22
+ sfHjje+NsF55w0EmJ4jK5cCW1cV8sIl6N4BX/Q50QpRyv+HAoqTOBMywo2l0BOGA
23
+ nCb/n/pxjaLuz2HNCCC1KnNATssCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUQGQHQoXDrCGKvgi98x4Ehynsx18wJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEARe7NKznl
27
+ pA17KM+8FuKzf/GEj84lPCKlZxBDNAc8wdnrr37xznO6kBrms68P3uU03pdeCZNQ
28
+ z9mxoyVP4owdTHOcfLeoLcpeGkHQsDBvPQOUBkrHptUmFTbLB/j9DuT1zddMbBEQ
29
+ vLrgomspG7090tSqfUcbxtZfyjPbYMTiTXQwoRM0UPk6Sr1A5miAjuIh/BCdyPxw
30
+ fJvP6El63Ei0f93/BNbRapodjDeZFhDtHht2vnwzpySN11MbZzXQtJY/W6ojR+3n
31
+ /lI2nqMMq5f39gxDkuM9dlpQCTSlNYaMUH/Ygfnaqi9j9ntJiW9/yjiYUGV7wzeS
32
+ h4yZiygx7MCysQ==
33
+ -----END CERTIFICATE-----
34
+ date: 2016-06-23 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rdiscount
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.2'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 2.2.0.1
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.2'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 2.2.0.1
56
+ description:
57
+ email: james@r0bertson.co.uk
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/markdown_mail_sender.rb
63
+ homepage: https://github.com/jrobertson/markdown_mail_sender
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.5.1
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Sends an email from a file directory containing a Markdown file representing
87
+ the email message.
88
+ test_files: []
@@ -0,0 +1,3 @@
1
+ L�9�6��aS��"�qȀ��s��J$1K�������T+# v������MZ�X`�����L�+Z��
2
+ �ҡ=�?���f�
3
+ ��Q{@n