Permalink
Browse files

Added options to set cc, bcc, subject, and body for UrlHelper#mail_to #…

…966 [DeLynn]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1056 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 7d09b8d commit f7c61b629e76e21ae78c6da3e9f6ee070d03bae8 @dhh dhh committed Apr 2, 2005
View
2 actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added options to set cc, bcc, subject, and body for UrlHelper#mail_to #966 [DeLynn]
+
* Fixed include_blank for select_hour/minute/second #527 [edward@debian.org]
* Improved the message display on the exception handler pages #963 [Johan Sorensen]
View
25 actionpack/lib/action_view/helpers/url_helper.rb
@@ -99,18 +99,35 @@ def link_to_if(condition, name, options = {}, html_options = {}, *parameters_for
# link unless +name+ is specified. Additional HTML options, such as class or id, can be passed in the <tt>html_options</tt> hash.
#
# You can also make it difficult for spiders to harvest email address by obfuscating them.
- # Examples:
+ # Examples:
# mail_to "me@domain.com", "My email", :encode => "javascript" # =>
# <script type="text/javascript" language="javascript">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script>
#
# mail_to "me@domain.com", "My email", :encode => "hex" # =>
# <a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d">My email</a>
+ #
+ # You can also specify the cc address, bcc address, subject, and body parts of the message header to create a complex e-mail using the
+ # corresponding +cc+, +bcc+, +subject+, and +body+ <tt>html_options</tt> keys. Each of these options are URI escaped and then appended to
+ # the <tt>email_address</tt> before being output. <b>Be aware that javascript keywords will not be escaped and may break this feature
+ # when encoding with javascript.</b>
+ # Examples:
+ # mail_to "me@domain.com", "My email", :cc => "ccaddress@domain.com", :bcc => "bccaddress@domain.com", :subject => "This is an example email", :body => "This is the body of the message." # =>
+ # <a href="mailto:me@domain.com?cc="ccaddress@domain.com"&bcc="bccaddress@domain.com"&body="This%20is%20the%20body%20of%20the%20message."&subject="This%20is%20an%20example%20email">My email</a>
def mail_to(email_address, name = nil, html_options = {})
html_options = html_options.stringify_keys
encode = html_options.delete("encode")
+ cc, bcc, subject, body = html_options.delete("cc"), html_options.delete("bcc"), html_options.delete("subject"), html_options.delete("body")
+
string = ''
+ extras = ''
+ extras << "cc=#{CGI.escape(cc).gsub("+", "%20")}&" unless cc.nil?
+ extras << "bcc=#{CGI.escape(bcc).gsub("+", "%20")}&" unless bcc.nil?
+ extras << "body=#{CGI.escape(body).gsub("+", "%20")}&" unless body.nil?
+ extras << "subject=#{CGI.escape(subject).gsub("+", "%20")}&" unless subject.nil?
+ extras = "?" << extras.gsub!(/&?$/,"") unless extras.empty?
+
if encode == 'javascript'
- tmp = "document.write('#{content_tag("a", name || email_address, html_options.merge({ "href" => "mailto:"+email_address.to_s }))}');"
+ tmp = "document.write('#{content_tag("a", name || email_address, html_options.merge({ "href" => "mailto:"+email_address.to_s+extras }))}');"
for i in 0...tmp.length
string << sprintf("%%%x",tmp[i])
end
@@ -123,9 +140,9 @@ def mail_to(email_address, name = nil, html_options = {})
string << email_address[i,1]
end
end
- content_tag "a", name || email_address, html_options.merge({ "href" => "mailto:#{string}" })
+ content_tag "a", name || email_address, html_options.merge({ "href" => "mailto:#{string}#{extras}" })
else
- content_tag "a", name || email_address, html_options.merge({ "href" => "mailto:#{email_address}" })
+ content_tag "a", name || email_address, html_options.merge({ "href" => "mailto:#{email_address}#{extras}" })
end
end
View
8 actionpack/test/template/url_helper_test.rb
@@ -79,10 +79,16 @@ def test_mail_to
mail_to("david@loudthinking.com", "David Heinemeier Hansson", :class => "admin")
end
-
def test_mail_to_with_javascript
assert_equal "<script type=\"text/javascript\" language=\"javascript\">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script>", mail_to("me@domain.com", "My email", :encode => "javascript")
end
+
+ def test_mail_with_options
+ assert_equal(
+ %(<a href="mailto:me@example.com?cc=ccaddress%40example.com&amp;bcc=bccaddress%40example.com&amp;body=This%20is%20the%20body%20of%20the%20message.&amp;subject=This%20is%20an%20example%20email">My email</a>),
+ mail_to("me@example.com", "My email", :cc => "ccaddress@example.com", :bcc => "bccaddress@example.com", :subject => "This is an example email", :body => "This is the body of the message.")
+ )
+ end
def test_mail_to_with_hex
assert_equal "<a href=\"mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d\">My email</a>", mail_to("me@domain.com", "My email", :encode => "hex")

0 comments on commit f7c61b6

Please sign in to comment.