ruby-on-rails - rails action mailer
Rails ActionMailer: nombre del remitente y nombre del destinatario/dirección de correo electrónico (6)
¿Hay alguna forma de especificar el correo electrónico Y el nombre de la información del remitente y el destinatario cuando se usa ActionMailer?
Normalmente harías:
@recipients = "#{user.email}"
@from = "[email protected]"
@subject = "Hi"
@content_type = "text/html"
Pero, también quiero especificar el nombre-- MyCompany MyCompany <[email protected]>
, John Doe <john.doe@mycompany>
.
¿Hay una manera de hacer eso?
En rails3 coloco lo siguiente en cada entorno. es decir production.rb
ActionMailer::Base.default :from => "Company Name <[email protected]>"
Colocando citas alrededor del nombre de la compañía no funcionó para mí en Rails3.
La versión que me gusta usar de esto es
%`"#{account.full_name}" <#{account.email}>`
`<< son backticks.
Actualizar
También podrías cambiar eso a
%|"#{account.full_name}" <#{account.email}>|
%/"#{account.full_name}" <#{account.email}>/
%^"#{account.full_name}" <#{account.email}>^
%["#{account.full_name}" <#{account.email}>]
Otro aspecto irritante, al menos con el nuevo formato AR, es recordar que se llama ''predeterminado'' en el nivel de clase. Hacer referencia a las rutinas que son solo de instancia hace que falle silenciosamente y se da cuando intenta usarlo:
NoMethodError: undefined method `new_post'' for Notifier:Class
Esto es lo que terminé usando:
def self.named_email(name,email) "/"#{name}/" <#{email}>" end
default :from => named_email(user.name, user.email)
Si está tomando la entrada del usuario para el nombre y el correo electrónico, a menos que valide cuidadosamente o escape el nombre y el correo electrónico, puede terminar con un encabezado De inválido simplemente concatenando cadenas. Aquí hay una manera segura:
require ''mail''
address = Mail::Address.new email # ex: "[email protected]"
address.display_name = name.dup # ex: "John Doe"
# Set the From or Reply-To header to the following:
address.format # returns "John Doe <[email protected]>"
dentro de Rails 2.3.3 se introdujo un error dentro del ActionMailer. Puedes ver el ticket aquí Ticket # 2340 . Se resuelve en 2-3-stable y master, por lo que se solucionará en 3.x y 2.3.6.
Para solucionar el problema dentro de 2.3. *, Puede usar el código proporcionado en los comentarios del ticket:
module ActionMailer
class Base
def perform_delivery_smtp(mail)
destinations = mail.destinations
mail.ready_to_send
sender = (mail[''return-path''] && mail[''return-path''].spec) || Array(mail.from).first
smtp = Net::SMTP.new(smtp_settings[:address], smtp_settings[:port])
smtp.enable_starttls_auto if smtp_settings[:enable_starttls_auto] && smtp.respond_to?(:enable_starttls_auto)
smtp.start(smtp_settings[:domain], smtp_settings[:user_name], smtp_settings[:password],
smtp_settings[:authentication]) do |smtp|
smtp.sendmail(mail.encoded, sender, destinations)
end
end
end
end
@recipients = "/"#{user.name}/" <#{user.email}>"
@from = "/"MyCompany/" <[email protected]>"