Existe-t-il un moyen de spécifier l'adresse e-mail ET le nom des informations sur l'expéditeur et le destinataire lors de l'utilisation d'ActionMailer?
En règle générale, vous feriez:
@recipients = "#{user.email}"
@from = "[email protected]"
@subject = "Hi"
@content_type = "text/html"
Mais, je veux spécifier le nom comme well-- MyCompany <[email protected]>
, John Doe <john.doe@mycompany>
.
Y-a-t-il un moyen de faire ça?
ruby-on-rails
actionmailer
Grnbeagle
la source
la source
Réponses:
Si vous prenez une entrée d'utilisateur pour le nom et l'e-mail, alors à moins que vous ne validiez ou n'échappiez très soigneusement le nom et l'e-mail, vous pouvez vous retrouver avec un en-tête From invalide en concaténant simplement des chaînes. Voici un moyen sûr:
la source
Mail::Address
n'est pas claire dans la documentation que j'ai lue.address.display_name
semble muter l'encodage de la chaîne dans certains cas, donc si vous prévoyez d'utilisername
plus tard, par exemple dans les vues de courrier de rails, faitesaddress.display_name = name.dup
name.dup
cela ne semble plus nécessaire. La source lit:@display_name = str.nil? ? nil : str.dup
config.mailer_sender = Proc.new { address = Mail::Address.new... }
la source
Dans rails3, je place les éléments suivants dans chaque environnement. ie production.rb
Placer des citations autour du nom de l'entreprise ne fonctionnait pas pour moi dans Rails3.
la source
:from => "Company Name <[email protected]>"
si vous n'avez pas de restrictions d'environnement.dans Rails 2.3.3, un bogue dans ActionMailer a été introduit. Vous pouvez voir le ticket ici Ticket # 2340 . Il est résolu en 2-3-stable et master donc il sera corrigé dans 3.x et 2.3.6.
Pour résoudre le problème dans 2.3. *, Vous pouvez utiliser le code fourni dans les commentaires du ticket:
la source
La version que j'aime utiliser est
`<< sont des backticks.
Mettre à jour
Vous pouvez également changer cela en
En savoir plus sur les littéraux de chaîne.
la source
Un autre aspect irritant, au moins avec le nouveau format AR, est de se rappeler que «default» est appelé au niveau de la classe. Le fait de référencer des routines qui ne sont que des instances le fait échouer silencieusement et le donner lorsque vous essayez de l'utiliser:
Voici ce que j'ai fini par utiliser:
la source