ruby-on-rails - que - rails send email with attachment
Formulario de contacto de Mailer en Rails 4 (1)
Estoy intentando crear un formulario de contacto en Rails 4, donde el formulario toma un nombre, correo electrónico y cuerpo y lo envía a mi dirección de correo electrónico. Al hacer clic en "Enviar", la aplicación vuelve a la página de contacto correctamente, pero no parece que se envíe un correo electrónico.
rutas.rb
match ''/send_mail'', to: ''contact#send_mail'', via: ''post''
contact_email.html.erb
<!DOCTYPE html>
<html>
<head>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<p>You have received the following email from <%= "#{ @name } (#{ @email }):" %></p>
<p><%= @body %></p>
</body>
</html>
contact_controller.rb
def send_mail
name = params[:name]
email = params[:email]
body = params[:comments]
ContactMailer.contact_email(name, email, body).deliver
redirect_to contact_path, notice: ''Message sent''
end
contact_mailer.rb
class ContactMailer < ActionMailer::Base
default to: # my email address
def contact_email(name, email, body)
@name = name
@email = email
@body = body`enter code here`
mail(from: email, subject: ''Contact Request'')
end
end
contact.html.erb
<div class="container-content">
<div class="container">
<%= form_tag(send_mail_path) do %>
<div class="form-group">
<%= label_tag ''name'', ''Name'' %>
<%= text_field_tag ''name'', nil, class: ''form-control'', placeholder: ''Your Name'' %>
</div>
<div class="form-group">
<%= label_tag ''email'', ''Email'' %>
<%= email_field_tag ''email'', nil, class: ''form-control'', placeholder: ''Your Email Address'' %>
</div>
<div class="form-group">
<%= label_tag ''comments'', ''Comments'' %>
<%= text_area_tag ''comments'', nil, class: ''form-control'', rows: 4, placeholder: ''Comments...'' %>
</div>
<%= submit_tag nil, class: ''btn btn-default btn-about pull-right'' %>
<% end %>
</div>
</div>
aplicacion.rb
config.action_mailer.delivery_method = :sendmail
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
Resultó que no había configurado mi aplicación Heroku con un servicio SMTP externo (ya que nunca había hecho nada con el correo electrónico antes, no sabía cómo hacerlo). Ya que estoy relativamente familiarizado con MailChimp, y especialmente porque su servicio Mandrill tiene un nivel gratuito (estoy creando esta aplicación para una organización de estudiantes), fácilmente agregué Mandrill a mi aplicación Heroku e incluí las siguientes configuraciones en application.rb :
ActionMailer::Base.smtp_settings = {
address: ''smtp.mandrillapp.com'',
port: 587,
user_name: ENV[''MANDRILL_USERNAME''],
password: ENV[''MANDRILL_APIKEY'']
}
Donde los vars ENV fueron establecidos automáticamente por el complemento.