Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
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...
commit f7c61b629e76e21ae78c6da3e9f6ee070d03bae8 1 parent 7d09b8d
@dhh dhh authored
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")
Please sign in to comment.
Something went wrong with that request. Please try again.