rails ruby-on-rails actionmailer

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}>]

Lea más acerca de los literales de cadenas.


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]>"