ruby-on-rails - with - send email gmail rails




Rails ActionMailer-formatar remetente e nome do destinatário/endereço de email (4)

Existe uma maneira de especificar o email E o nome das informações do remetente e do destinatário ao usar o ActionMailer?

Normalmente você faria:

@recipients   = "#{user.email}"
@from         = "[email protected]"
@subject      = "Hi"
@content_type = "text/html"

Mas, também quero especificar o nome - MyCompany <[email protected]> , John Doe <[email protected]> .

Existe uma maneira de fazer isso?


A versão que eu gosto de usar é

%`"#{account.full_name}" <#{account.email}>`

`<< são backticks.

Atualizar

Você também pode mudar isso para

%|"#{account.full_name}" <#{account.email}>|
%\"#{account.full_name}" <#{account.email}>\
%^"#{account.full_name}" <#{account.email}>^
%["#{account.full_name}" <#{account.email}>]

Leia mais sobre literais de string.


Nos rails3, coloco o seguinte em cada ambiente. ou seja, production.rb

ActionMailer::Base.default :from => "Company Name <[email protected]>"

Colocar citações em torno do nome da empresa não funcionou para mim no Rails3.


Se você está recebendo informações do usuário para nome e email, a menos que você cuidadosamente valide ou escape do nome e do email, você pode acabar com um cabeçalho De inválido simplesmente concatenando strings. Aqui está um caminho seguro:

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 do Rails 2.3.3, um bug dentro do ActionMailer foi introduzido. Você pode ver o ingresso aqui Ticket # 2340 . Ele é resolvido em 2-3-stable e master, então será corrigido em 3.xe 2.3.6.

Para corrigir o problema dentro de 2.3 *, você pode usar o código fornecido nos comentários do 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




actionmailer