instance method
mail_to
Ruby on Rails 3.2.22.5
Since v2.2.3Signature
mail_to(email_address, name = nil, html_options = {})
Creates a mailto link tag to the specified email_address, which is also used as the name of the link unless name is specified. Additional HTML attributes for the link can be passed in html_options.
mail_to has several methods for hindering email harvesters and customizing the email itself by passing special keys to html_options.
Options
-
:encode- This key will accept the strings “javascript” or “hex”. Passing “javascript” will dynamically create and encode the mailto link then eval it into the DOM of the page. This method will not show the link on the page if the user has JavaScript disabled. Passing “hex” will hex encode theemail_addressbefore outputting the mailto link. -
:replace_at- When the linknameisn’t provided, theemail_addressis used for the link label. You can use this option to obfuscate theemail_addressby substituting the @ sign with the string given as the value. -
:replace_dot- When the linknameisn’t provided, theemail_addressis used for the link label. You can use this option to obfuscate theemail_addressby substituting the . in the email with the string given as the value. -
:subject- Preset the subject line of the email. -
:body- Preset the body of the email. -
:cc- Carbon Copy additional recipients on the email. -
:bcc- Blind Carbon Copy additional recipients on the email.
Examples
mail_to "me@domain.com" # => <a href="mailto:me@domain.com">me@domain.com</a> mail_to "me@domain.com", "My email", :encode => "javascript" # => <script type="text/javascript">eval(decodeURIComponent('%64%6f%63...%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> mail_to "me@domain.com", nil, :replace_at => "_at_", :replace_dot => "_dot_", :class => "email" # => <a href="mailto:me@domain.com" class="email">me_at_domain_dot_com</a> mail_to "me@domain.com", "My email", :cc => "ccaddress@domain.com", :subject => "This is an example email" # => <a href="mailto:me@domain.com?cc=ccaddress@domain.com&subject=This%20is%20an%20example%20email">My email</a>
Parameters
-
email_addressreq -
nameopt = nil -
html_optionsopt = {}
Source
# File actionpack/lib/action_view/helpers/url_helper.rb, line 498
def mail_to(email_address, name = nil, html_options = {})
email_address = ERB::Util.html_escape(email_address)
html_options = html_options.stringify_keys
encode = html_options.delete("encode").to_s
extras = %w{ cc bcc body subject }.map { |item|
option = html_options.delete(item) || next
"#{item}=#{Rack::Utils.escape(option).gsub("+", "%20")}"
}.compact
extras = extras.empty? ? '' : '?' + ERB::Util.html_escape(extras.join('&'))
email_address_obfuscated = email_address.to_str
email_address_obfuscated.gsub!(/@/, html_options.delete("replace_at")) if html_options.key?("replace_at")
email_address_obfuscated.gsub!(/\./, html_options.delete("replace_dot")) if html_options.key?("replace_dot")
case encode
when "javascript"
string = ''
html = content_tag("a", name || email_address_obfuscated.html_safe, html_options.merge("href" => "mailto:#{email_address}#{extras}".html_safe))
html = escape_javascript(html.to_str)
"document.write('#{html}');".each_byte do |c|
string << sprintf("%%%x", c)
end
"<script type=\"#{Mime::JS}\">eval(decodeURIComponent('#{string}'))</script>".html_safe
when "hex"
email_address_encoded = email_address_obfuscated.unpack('C*').map {|c|
sprintf("&#%d;", c)
}.join
string = 'mailto:'.unpack('C*').map { |c|
sprintf("&#%d;", c)
}.join + email_address.unpack('C*').map { |c|
char = c.chr
char =~ /\w/ ? sprintf("%%%x", c) : char
}.join
content_tag "a", name || email_address_encoded.html_safe, html_options.merge("href" => "#{string}#{extras}".html_safe)
else
content_tag "a", name || email_address_obfuscated.html_safe, html_options.merge("href" => "mailto:#{email_address}#{extras}".html_safe)
end
end
Defined in actionpack/lib/action_view/helpers/url_helper.rb line 498
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActionView::Helpers::UrlHelper