2017-01-27 42 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文件中的环境变量。