2017-01-27 22 views
1

У меня есть веб-приложение Ruby, которое отправляет электронную почту через Mailgun.Mailgun :: CommunicationError через nginx '301 Moved Permanentently' error

Мой почтовый счет & gem правильно настроен, и я могу отправлять электронные письма вручную (например, через curl).

Ключ API и базовый URL API (https sandbox domain) хранятся в переменных среды.

При попытке отправить электронную почту из приложения, как это:

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 

Когда я запустить приложение с Синатра через локальный хост: хххй, я получаю Mailgun :: CommunicationError в/.../... 301 Moved постоянно: ... Nginx, указывая на эту строку:

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

Любая идея, почему это происходит? Я исследовал эту проблему часами, но не мог понять, что делать дальше.

Спасибо!

ответ

0

Я столкнулся с этой проблемой. Если вы уже исправили это, то, надеюсь, это может помочь кому-то другому.

я переключился на сообщение строителя для простоты использования и возможность render мой HTML, но я уверен, что он все равно будет отправлять в формате у вас есть установка с :text

Когда я перешел на правильное domain в файле .env Я считаю, что он решил мою проблему. Для использования Mailgun вам понадобятся 2 разных домена. Первый - полный домен для вашей песочницы. ENV['MAILGUN_DOMAIN'] это домен для песочницы с полным https://api.mailgun.net/v3/sandboxXXXXxxxXXXXXX.mailgun.org для отправки большинства почтовых форматов.

Вам также понадобится последняя половина полного домена для отправки сообщений. Это всего лишь sandboxXXXXxxxXXXXXX.mailgun.org, который передается в MessageBuilder или другим способом .send_message. Когда я их перепутал, и то и другое, я продолжал получать эту ошибку. Когда я перешел, чтобы разделить их в моих development.rb и some_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.

 Смежные вопросы

  • Нет связанных вопросов^_^