2017-05-24 2 views
1

J'ai vraiment besoin d'aide pour cela, j'ai essayé de travailler cela pendant 3 jours :( Mon application est censée envoyer des emails au client lorsque la commande est soit reçu ou expédié, mais il rompt en permanence avec cette erreurproblèmes sérieux envoyer des mails via actionmailer en production ROR

I, [2017-05-23T11:01:44.741054 #1060] INFO -- : Completed 500 Internal Server Error in 66ms (ActiveRecord: 4.2ms) 
F, [2017-05-23T11:01:44.743481 #1060] FATAL -- : 
SocketError (getaddrinfo: Name or service not known): 
    app/admin/order.rb:6:in `block (2 levels) in <top (required)>' 

Ma configuration actionmailer semble avoir raison.

 config.action_mailer.default_url_options = { host: 'mypage.com'} 
    config.action_mailer.perform_deliveries = true 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = { 
    address: ENV["SMTP_ADDRESS"].inspect, 
    user_name: ENV["SMTP_USER"], 
    password: ENV["SMTP_PASSWORD"], 
    domain: "mypage.com", 
    port: 587, 
    authentication: :login, 
    enable_starttls_auto: true 
    } 

les ENV variables sont stockées dans la application.yml

SMTP_ADDRESS: "smtp.gmail.com" 
SMTP_USER: "[email protected]" 
SMTP_PASSWORD: "xxxxxxxx" 

Les ENV variables ont été vérifiées en exécutant:

Loading production environment (Rails 4.2.5) 
irb(main):001:0> puts ENV["SMTP_ADDRESS"].inspect 
"smtp.gmail.com" 
=> nil 
irb(main):002:0> 

Je l'ai fait avec host smtp.gmail.com positif avant-corps:

smtp.gmail.com is an alias for gmail-smtp-msa.l.google.com. 
gmail-smtp-msa.l.google.com has address 74.125.206.108 
gmail-smtp-msa.l.google.com has address 74.125.206.109 
gmail-smtp-msa.l.google.com has IPv6 address 2a00:1450:400c:c04::6d 

Je l'ai fait telnet smtp.gmail.com 587:

Trying 74.125.206.108... 
Connected to gmail-smtp-msa.l.google.com. 
Escape character is '^]'. 
220 smtp.gmail.com ESMTP c17sm3264999wre.35 - gsmtp 

J'ai aussi ne nslookup smtp.gmail.com:

Server:  8.8.8.8 
Address: 8.8.8.8#53 

Non-authoritative answer: 
smtp.gmail.com canonical name = gmail-smtp-msa.l.google.com. 
Name: gmail-smtp-msa.l.google.com 
Address: 74.125.206.108 
Name: gmail-smtp-msa.l.google.com 
Address: 74.125.206.109 

Je suis à court d'options ici, cela fonctionne parfaitement sur place étaient config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

Mais après le déploiement actionmailer pauses.

Dans mon compte google, j'ai https://accounts.google.com/DisplayUnlockCaptcha et activé less secure apps avec de la chance.

est inférieure à la admin/order.rb ont été l'erreur est relevée pour la ligne: 6.

ActiveAdmin.register Order do 

permit_params :shipped 

after_update do |order| 
    OrderNotifier.shipped(@order).deliver if order.shipped #this is line 6. 

end 

show do |order| 



    panel 'Customer Details' do 
     attributes_table_for order, :name, :email, :address, :city, :country 
    end 

    panel 'Created' do 
     "#{time_ago_in_words order.created_at} ago" 
    end 


    panel 'Shipped' do 
     order.shipped 
    end 

    panel 'Order Details' do 
     table_for(order.product_items) do 
      column 'Product' do |item| 
       item.product.title 
      end 
      column 'Quantity' do |item| 
       item.quantity 
      end 
      column 'Price Isl' do |item| 
       number_to_currency item.total_price_isl 
      end 
      column 'Price USD' do |item| 
       number_to_currency item.total_price_usd 
      end 
     end 
    end 

    panel 'Order Total USD' do 
     number_to_currency order.total_price_usd 

    end 

    panel 'Order Total Iskr' do 
     number_to_currency order.total_price_isl 

    end 

end 


end 

ici est le mailer/order_notifier.rb

class OrderNotifier < ApplicationMailer 

    default from: 'Concept Store <[email protected]>' 

    def received(order) 
    @order = order 

    mail to: order.email, subject: 'Concept Store' 
    end 


    def shipped(order) 

    @order = order 

    mail to: order.email, subject: 'Order Shipped' 
    end 
end 

Répondre

3

Je me demande si cela est tout aussi simple que ce qui suit:

config.action_mailer.smtp_settings = { 
    # address: ENV["SMTP_ADDRESS"].inspect, 
    address: ENV["SMTP_ADDRESS"], 
    # ... 
} 
  • parce inspect ajoute des citations à la chaîne (voir ci-dessous):

    puts "somestring" 
    # => somestring 
    puts "somestring".inspect 
    # => "somestring" 
    
+0

Vous êtes mon héros aujourd'hui :) .... c'est tout .... si simple .. merci beaucoup – DaudiHell

+0

content que ça a marché! :) –