diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-04-02 08:16:57 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-04-02 08:16:57 +0000 |
commit | f7c61b629e76e21ae78c6da3e9f6ee070d03bae8 (patch) | |
tree | 0179ff82390c1fc7e2e253bef8716d3cf760bea4 /actionpack | |
parent | 7d09b8d723e7d8d0d2b913573ecd404a84305397 (diff) | |
download | rails-f7c61b629e76e21ae78c6da3e9f6ee070d03bae8.tar.gz rails-f7c61b629e76e21ae78c6da3e9f6ee070d03bae8.tar.bz2 rails-f7c61b629e76e21ae78c6da3e9f6ee070d03bae8.zip |
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
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/url_helper.rb | 25 | ||||
-rw-r--r-- | actionpack/test/template/url_helper_test.rb | 8 |
3 files changed, 30 insertions, 5 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 8ae43e9ffe..c3dc91fd38 100644 --- a/actionpack/CHANGELOG +++ b/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] diff --git a/actionpack/lib/action_view/helpers/url_helper.rb b/actionpack/lib/action_view/helpers/url_helper.rb index 4aaab2d3a5..616f1475ec 100644 --- a/actionpack/lib/action_view/helpers/url_helper.rb +++ b/actionpack/lib/action_view/helpers/url_helper.rb @@ -99,18 +99,35 @@ module ActionView # 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 @@ module ActionView 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 diff --git a/actionpack/test/template/url_helper_test.rb b/actionpack/test/template/url_helper_test.rb index 32b98eb5dc..b1f2dd65e9 100644 --- a/actionpack/test/template/url_helper_test.rb +++ b/actionpack/test/template/url_helper_test.rb @@ -79,10 +79,16 @@ class UrlHelperTest < Test::Unit::TestCase 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&bcc=bccaddress%40example.com&body=This%20is%20the%20body%20of%20the%20message.&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") |