2017-01-27 67 views
1

我有一個Ruby web應用程序通過Mailgun發送電子郵件。Mailgun :: CommunicationError通過nginx'301永久移動'錯誤

我的Mailgun帳戶&正確設置,我可以手動發送電子郵件(例如通過捲曲)。

API密鑰和API基本URL(https沙箱域)存儲在環境變量中。

當我試圖從應用這樣的發送電子郵件:

def initialize(mailer: nil) 
    @mailer = mailer || Mailgun::Client.new(ENV['MAILGUN_API_KEY']) 
    end 

則:

def call(user) 
    mailer.send_message(ENV['MAILGUN_SANDBOX'], {from: '...', 
     to: user.email, 
     subject: '...', 
     text: "..."}) 
    end 

當我通過本地主機與西納特拉運行應用程序:XXXX,我得到一個Mailgun :: Communication Error在/ .../... 301永久移動:... nginx指向此行:

mailer.send_message(ENV['MAILGUN_SANDBOX'], ... 

任何想法爲什麼 發生?我已經研究了幾個小時的問題,但無法找到下一步該做什麼的線索。

謝謝!

回答

0

我遇到了同樣的問題。如果你已經解決了這個問題,那麼希望這可以幫助別人。

我切換到信息建設者的易用性,並能夠render我的HTML,但我敢肯定它仍然會與你有:text

設置的格式發送當我切換到適當的domain.env文件我相信它解決了我的問題。你需要2個不同的域來使用Mailgun。第一個是你的沙盒的完整域。 ENV['MAILGUN_DOMAIN']它是發送大部分郵件格式的完整https://api.mailgun.net/v3/sandboxXXXXxxxXXXXXX.mailgun.org的沙箱域。

您還需要完整域的後半部分才能發送消息。這只是sandboxXXXXxxxXXXXXX.mailgun.org這是傳遞到MessageBuilder或其他消息.send_message方法。當我把他們弄混了或者兩個都一樣的時候,我一直在得到這個錯誤。當我切換到將development.rbsome_mailer.rb中的兩個分開時,我可以毫無問題地發送郵件。

以下是我的文件設置,供參考。我對所有這些都很新穎,但這就是我如何設置的,它對我有用,所以希望它有幫助。

# .env 
MAILGUN_DOMAIN='https://api.mailgun.net/v3/sandboxXXXXxxxXXXXXX.mailgun.org' 
MAILGUN_SEND_DOMAIN='sandboxXXXXxxxXXXXXX.mailgun.org' 

# development.rb 
ActionMailer::Base.smtp_settings = { 
    :authentication => :plain, 
    :address => "smtp.mailgun.org", 
    :port => 587, 
    :domain => "ENV['MAILGUN_DOMAIN']", 
    :user_name => "ENV['MAILGUN_USERNAME']", 
    :password => "ENV['MAILGUN_PASSWORD']" 
} 


# some_mailer.rb 
def some_mail_notification(user) 
    @user = user 

    mg_client = Mailgun::Client.new ENV['MAILGUN_KEY'] 
    mb_obj = Mailgun::MessageBuilder.new 
    mb_obj.from "[email protected]", {'first' => 'Customer', 'last' => 'Support'} 
    mb_obj.add_recipient :to, @user.email, { 'first' => @user.first_name, 'last' => @user.last_name } 
    mb_obj.subject "Your Recent Purchase on Some Site" 
    mb_obj.body_html ("#{render 'some_mail_notification.html.erb'}") 
    mg_client.send_message("sandboxXXXXxxxXXXXXX.mailgun.org", mb_obj) 
end 

我離開了send_message以上的沙箱域,但您可以設置爲在.env文件中的環境變量。