inline_attachment 0.4.0 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +97 -0
- data/lib/inline_attachment.rb +44 -37
- data/rails/init.rb +1 -0
- metadata +106 -5
- data/README +0 -68
data/README.markdown
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
Inline Attachment
|
2
|
+
=================
|
3
|
+
|
4
|
+
This package adds full support for embedding inline images into your HTML emails
|
5
|
+
through ActionMailer.
|
6
|
+
|
7
|
+
Installation
|
8
|
+
------------
|
9
|
+
|
10
|
+
### As a Gem ###
|
11
|
+
|
12
|
+
To perform a system wide installation:
|
13
|
+
|
14
|
+
gem source -a http://gems.github.com
|
15
|
+
gem install JasonKing-inline_attachment
|
16
|
+
|
17
|
+
To use inline_attachment in your project, add the following line to your project's
|
18
|
+
config/environment.rb:
|
19
|
+
|
20
|
+
config.gem 'JasonKing-inline_attachment', :lib => 'inline_attachment'
|
21
|
+
|
22
|
+
|
23
|
+
### As a Rails Plugin ###
|
24
|
+
|
25
|
+
Use this to install as a plugin in a Ruby on Rails app:
|
26
|
+
|
27
|
+
$ script/plugin install git://github.com/JasonKing/inline_attachment.git
|
28
|
+
|
29
|
+
### As a Rails Plugin (using git submodules) ###
|
30
|
+
|
31
|
+
Use this if you prefer the idea of being able to easily switch between using edge or a tagged version:
|
32
|
+
|
33
|
+
$ git submodule add git://github.com/JasonKing/inline_attachment.git vendor/plugins/inline_attachment
|
34
|
+
|
35
|
+
|
36
|
+
Usage
|
37
|
+
-----
|
38
|
+
|
39
|
+
I've rewritten most of Edmond's great work in this version. I now override
|
40
|
+
path_to_image instead of `image_tag` because a big reason for all the Rails2
|
41
|
+
breakages was because `image_tag` was basically reproduced in previous versions,
|
42
|
+
so broke when that method changed.
|
43
|
+
|
44
|
+
Now we override the very simple path_to_image, and most importantly we really
|
45
|
+
just add our own stuff for ActionMailer templates, and resort to the existing
|
46
|
+
code for everything else.
|
47
|
+
|
48
|
+
I've also integrated in with the new implicit multipart stuff. So now, there is
|
49
|
+
so little code required!
|
50
|
+
|
51
|
+
#### notifier.rb
|
52
|
+
class Notifier < ActionMailer::Base
|
53
|
+
def signup
|
54
|
+
recipients %q{"Testing IA" <testing@handle.it>}
|
55
|
+
from %q{"Mr Tester" <tester@handle.it>}
|
56
|
+
subject "Here's a funky test"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
Oh yeah baby! Read it and weep! So how's this work? Well, you'll need
|
61
|
+
your templates named properly - see the _Multipart email_ section of the
|
62
|
+
ActionMailer::Base docs.
|
63
|
+
|
64
|
+
#### signup.text.plain.erb
|
65
|
+
Your username is: <%= @username %>
|
66
|
+
|
67
|
+
#### signup.text.html.erb
|
68
|
+
<html><head><title>Signup Notification</title></head><body>
|
69
|
+
<%= image_tag "logo.png" %>
|
70
|
+
<p>Your username is: <%=h @username %>
|
71
|
+
</body></html>
|
72
|
+
|
73
|
+
|
74
|
+
That's it! InlineAttachment will look for
|
75
|
+
`#{RAILS_ROOT}/public/images/logo.png` and will do the right thing and embed it
|
76
|
+
inline into the HTML version of the email. ActionMailer will do the right thing
|
77
|
+
and offer the recipient both the `text/plain` and `text/html` parts as alternatives.
|
78
|
+
|
79
|
+
**Note the filenames include the (unusual) major.minor MIME type, look above at
|
80
|
+
the filenames closely.**
|
81
|
+
|
82
|
+
|
83
|
+
Note, that you should still be able to use this in the 0.3.0 way if you have
|
84
|
+
code that uses that. But there were a lot of alternatives, and the examples in
|
85
|
+
here didn't show a crucial step of shuffling the parts around to be sure that
|
86
|
+
the image parts came after the html.
|
87
|
+
|
88
|
+
You can also do the old _manual_ method if you want.
|
89
|
+
|
90
|
+
|
91
|
+
Contributors
|
92
|
+
------------
|
93
|
+
|
94
|
+
* Jason King (JasonKing)
|
95
|
+
* Matt Griffin (betamatt) - file:// and chaining cleanup
|
96
|
+
* Logan Raarup (logandk) - pluginified
|
97
|
+
* Jeffrey Damick (jdamick) - bugfix
|
data/lib/inline_attachment.rb
CHANGED
@@ -15,64 +15,71 @@ module ActionMailer
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class Base
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
18
|
+
private
|
19
|
+
|
20
|
+
def create_mail_with_inline_attachment
|
21
|
+
# sniff out inline html parts with inline images and wrap them up in a
|
22
|
+
# multipart/related mime part
|
23
|
+
got_inlines = false
|
24
|
+
related_parts = []
|
25
|
+
for_deletion = []
|
26
|
+
@parts.each_with_index do |p,i|
|
27
|
+
if p.content_disposition == 'inline' && p.content_type =~ %r{^image/}i && p.headers[CID_NAME]
|
28
|
+
for_deletion << i
|
29
|
+
related_parts << p
|
30
|
+
got_inlines = true
|
31
|
+
end
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
if got_inlines && p.content_type =~ %r{text/html}i
|
34
|
+
@parts[i] = ActionMailer::Part.new( :content_type => "multipart/related" )
|
35
|
+
@parts[i].parts << p
|
36
|
+
related_parts.each do |rp|
|
37
|
+
@parts[i].parts << rp
|
38
|
+
end
|
39
|
+
got_inlines = false
|
40
|
+
related_parts = []
|
39
41
|
end
|
40
|
-
got_inlines = false
|
41
|
-
related_parts = []
|
42
42
|
end
|
43
|
+
for_deletion.sort{|a,b|b<=>a}.each {|i|@parts.delete_at(i)}
|
44
|
+
create_mail_without_inline_attachment
|
43
45
|
end
|
44
|
-
|
45
|
-
ia_original_create_mail
|
46
|
-
end
|
46
|
+
alias_method_chain :create_mail, :inline_attachment
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
module ActionView
|
51
51
|
module Helpers #:nodoc:
|
52
52
|
module AssetTagHelper
|
53
|
-
|
54
|
-
def path_to_image(source)
|
53
|
+
def path_to_image_with_inline_attachment(source)
|
55
54
|
@part_container ||= @controller
|
56
55
|
if @part_container.is_a?(ActionMailer::Base) or @part_container.is_a?(ActionMailer::Part)
|
57
|
-
|
58
|
-
|
56
|
+
if source =~ %r{file://}
|
57
|
+
# Handle attached files from the local filesystem. Should sandbox this somehow.
|
58
|
+
file_path = source.sub(%r{file://}, '')
|
59
|
+
else
|
60
|
+
# Public image files
|
61
|
+
file_path = "#{RAILS_ROOT}/public#{path_to_image_without_inline_attachment(source).split('?').first}"
|
62
|
+
end
|
63
|
+
|
59
64
|
if File.exists?(file_path)
|
60
65
|
basename = File.basename(file_path)
|
61
66
|
ext = basename.split('.').last
|
62
67
|
cid = Time.now.to_f.to_s + "#{basename}@inline_attachment"
|
63
|
-
file = File.open(file_path, 'rb')
|
64
68
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
69
|
+
File.open(file_path, 'rb') do |file|
|
70
|
+
@part_container.inline_attachment(:content_type => "image/#{ext}",
|
71
|
+
:body => file.read,
|
72
|
+
:filename => basename,
|
73
|
+
:cid => "<#{cid}>",
|
74
|
+
:disposition => "inline")
|
75
|
+
end
|
76
|
+
|
71
77
|
return "cid:#{cid}"
|
72
78
|
end
|
73
79
|
end
|
74
|
-
return
|
80
|
+
return path_to_image_without_inline_attachment(source)
|
75
81
|
end
|
82
|
+
alias_method_chain :path_to_image, :inline_attachment
|
76
83
|
end
|
77
84
|
end
|
78
85
|
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "inline_attachment"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inline_attachment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason King
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-16 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,7 +22,105 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "1.15"
|
24
24
|
version:
|
25
|
-
description:
|
25
|
+
description: |
|
26
|
+
Inline Attachment
|
27
|
+
=================
|
28
|
+
|
29
|
+
This package adds full support for embedding inline images into your HTML emails
|
30
|
+
through ActionMailer.
|
31
|
+
|
32
|
+
Installation
|
33
|
+
------------
|
34
|
+
|
35
|
+
### As a Gem ###
|
36
|
+
|
37
|
+
To perform a system wide installation:
|
38
|
+
|
39
|
+
gem source -a http://gems.github.com
|
40
|
+
gem install JasonKing-inline_attachment
|
41
|
+
|
42
|
+
To use inline_attachment in your project, add the following line to your project's
|
43
|
+
config/environment.rb:
|
44
|
+
|
45
|
+
config.gem 'JasonKing-inline_attachment', :lib => 'inline_attachment'
|
46
|
+
|
47
|
+
|
48
|
+
### As a Rails Plugin ###
|
49
|
+
|
50
|
+
Use this to install as a plugin in a Ruby on Rails app:
|
51
|
+
|
52
|
+
$ script/plugin install git://github.com/JasonKing/inline_attachment.git
|
53
|
+
|
54
|
+
### As a Rails Plugin (using git submodules) ###
|
55
|
+
|
56
|
+
Use this if you prefer the idea of being able to easily switch between using edge or a tagged version:
|
57
|
+
|
58
|
+
$ git submodule add git://github.com/JasonKing/inline_attachment.git vendor/plugins/inline_attachment
|
59
|
+
|
60
|
+
|
61
|
+
Usage
|
62
|
+
-----
|
63
|
+
|
64
|
+
I've rewritten most of Edmond's great work in this version. I now override
|
65
|
+
path_to_image instead of `image_tag` because a big reason for all the Rails2
|
66
|
+
breakages was because `image_tag` was basically reproduced in previous versions,
|
67
|
+
so broke when that method changed.
|
68
|
+
|
69
|
+
Now we override the very simple path_to_image, and most importantly we really
|
70
|
+
just add our own stuff for ActionMailer templates, and resort to the existing
|
71
|
+
code for everything else.
|
72
|
+
|
73
|
+
I've also integrated in with the new implicit multipart stuff. So now, there is
|
74
|
+
so little code required!
|
75
|
+
|
76
|
+
#### notifier.rb
|
77
|
+
class Notifier < ActionMailer::Base
|
78
|
+
def signup
|
79
|
+
recipients %q{"Testing IA" <testing@handle.it>}
|
80
|
+
from %q{"Mr Tester" <tester@handle.it>}
|
81
|
+
subject "Here's a funky test"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
Oh yeah baby! Read it and weep! So how's this work? Well, you'll need
|
86
|
+
your templates named properly - see the _Multipart email_ section of the
|
87
|
+
ActionMailer::Base docs.
|
88
|
+
|
89
|
+
#### signup.text.plain.erb
|
90
|
+
Your username is: <%= @username %>
|
91
|
+
|
92
|
+
#### signup.text.html.erb
|
93
|
+
<html><head><title>Signup Notification</title></head><body>
|
94
|
+
<%= image_tag "logo.png" %>
|
95
|
+
<p>Your username is: <%=h @username %>
|
96
|
+
</body></html>
|
97
|
+
|
98
|
+
|
99
|
+
That's it! InlineAttachment will look for
|
100
|
+
`#{RAILS_ROOT}/public/images/logo.png` and will do the right thing and embed it
|
101
|
+
inline into the HTML version of the email. ActionMailer will do the right thing
|
102
|
+
and offer the recipient both the `text/plain` and `text/html` parts as alternatives.
|
103
|
+
|
104
|
+
**Note the filenames include the (unusual) major.minor MIME type, look above at
|
105
|
+
the filenames closely.**
|
106
|
+
|
107
|
+
|
108
|
+
Note, that you should still be able to use this in the 0.3.0 way if you have
|
109
|
+
code that uses that. But there were a lot of alternatives, and the examples in
|
110
|
+
here didn't show a crucial step of shuffling the parts around to be sure that
|
111
|
+
the image parts came after the html.
|
112
|
+
|
113
|
+
You can also do the old _manual_ method if you want.
|
114
|
+
|
115
|
+
|
116
|
+
Contributors
|
117
|
+
------------
|
118
|
+
|
119
|
+
* Jason King (JasonKing)
|
120
|
+
* Matt Griffin (betamatt) - file:// and chaining cleanup
|
121
|
+
* Logan Raarup (logandk) - pluginified
|
122
|
+
* Jeffrey Damick (jdamick) - bugfix
|
123
|
+
|
26
124
|
email: jk@handle.it
|
27
125
|
executables: []
|
28
126
|
|
@@ -31,10 +129,13 @@ extensions: []
|
|
31
129
|
extra_rdoc_files: []
|
32
130
|
|
33
131
|
files:
|
34
|
-
-
|
132
|
+
- rails/init.rb
|
133
|
+
- README.markdown
|
35
134
|
- lib/inline_attachment.rb
|
36
135
|
has_rdoc: true
|
37
136
|
homepage: http://github.com/JasonKing/inline_attachment
|
137
|
+
licenses: []
|
138
|
+
|
38
139
|
post_install_message:
|
39
140
|
rdoc_options:
|
40
141
|
- --inline-source
|
@@ -56,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
157
|
requirements: []
|
57
158
|
|
58
159
|
rubyforge_project: InlineAttachment
|
59
|
-
rubygems_version: 1.3.
|
160
|
+
rubygems_version: 1.3.5
|
60
161
|
signing_key:
|
61
162
|
specification_version: 2
|
62
163
|
summary: Makes image_tag in an ActionMailer template embed the images in the emails
|
data/README
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
= Inline Attachment
|
2
|
-
|
3
|
-
This package adds full support for embedding inline images into your HTML emails
|
4
|
-
through ActionMailer.
|
5
|
-
|
6
|
-
== Installation
|
7
|
-
|
8
|
-
To perform a system wide installation:
|
9
|
-
|
10
|
-
<tt>gem source -a http://gems.github.com</tt>
|
11
|
-
<tt>gem install JasonKing-inline_attachment</tt>
|
12
|
-
|
13
|
-
To use inline_attachment in your project, add the following line to your project's
|
14
|
-
config/environment.rb:
|
15
|
-
|
16
|
-
<tt>config.gem 'inline_attachment'</tt>
|
17
|
-
|
18
|
-
|
19
|
-
== Usage
|
20
|
-
|
21
|
-
I've rewritten most of Edmond's great work in this version. I now override
|
22
|
-
path_to_image instead of image_tag because a big reason for all the Rails2
|
23
|
-
breakages was because image_tag was basically reproduced in previous versions,
|
24
|
-
so broke when that method changed.
|
25
|
-
|
26
|
-
Now we override the very simple path_to_image, and most importantly we really
|
27
|
-
just add our own stuff for ActionMailer templates, and resort to the existing
|
28
|
-
code for everything else.
|
29
|
-
|
30
|
-
I've also integrated in with the new implicit multipart stuff. So now, there is
|
31
|
-
so little code required!
|
32
|
-
|
33
|
-
|
34
|
-
class Notifier < ActionMailer::Base
|
35
|
-
def signup
|
36
|
-
recipients %q{"Testing IA" <testing@handle.it>}
|
37
|
-
from %q{"Mr Tester" <tester@handle.it>}
|
38
|
-
subject "Here's a funky test"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# Oh yeah baby! Read it and weep! So how's this work? Well, you'll need
|
43
|
-
# your templates named properly - see the `Multipart email` section of the
|
44
|
-
# ActionMailer::Base docs.
|
45
|
-
|
46
|
-
# signup.text.plain.erb
|
47
|
-
Your username is: <%= @username %>
|
48
|
-
|
49
|
-
# signup.text.html.erb
|
50
|
-
<html><head><title>Signup Notification</title></head><body>
|
51
|
-
<%= image_tag "logo.png" %>
|
52
|
-
<p>Your username is: <%=h @username %>
|
53
|
-
</body></html>
|
54
|
-
|
55
|
-
|
56
|
-
That's it! InlineAttachment will look for
|
57
|
-
"#{RAILS_ROOT}/public/images/logo.png" and will do the right thing and embed it
|
58
|
-
inline into the HTML version of the email. ActionMailer will do the right thing
|
59
|
-
and offer the recipient both the text/plain and text/html parts as alternatives.
|
60
|
-
|
61
|
-
|
62
|
-
Note, that you should still be able to use this in the 0.3.0 way if you have
|
63
|
-
code that uses that. But there were a lot of alternatives, and the examples in
|
64
|
-
here didn't show a crucial step of shuffling the parts around to be sure that
|
65
|
-
the image parts came after the html.
|
66
|
-
|
67
|
-
You can also do the old "manual" method if you want.
|
68
|
-
|