2017-01-27 8 views
1

私はMailgun経由で電子メールを送信するRubyウェブアプリケーションを持っています。Mailgun :: CommunicationError via nginx '301 Moved Permanently'エラー

郵便受け& gemが適切に設定されており、私は電子メールを手作業で送ることができます(例:カールなど)。

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を取得する:: CommunicationError at/.../... 301 Moved Permanently:...この行を指しているnginx:

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

起こる?私は何時間も問題を調査しましたが、次に何をすべきかの手がかりを見つけることはできませんでした。

ありがとうございます!

答えて

0

この同じ問題が発生しました。これをすでに修正しておけば、これが他の人を助けることができれば幸いです。

私は使いやすさのためにメッセージビルダに切り替えて、私のhtmlをrenderすることができることが、私は適切に切り替えた場合、それはまだあなたが:text

と設定しているフォーマットで送信されますかなり確信していますdomain.envファイル私はそれが私の問題を解決したと信じています。 Mailgunを使うには2つの異なるドメインが必要です。最初はサンドボックスの完全なドメインです。 ENV['MAILGUN_DOMAIN']ほとんどのメール形式を送信するのは完全なhttps://api.mailgun.net/v3/sandboxXXXXxxxXXXXXX.mailgun.orgのサンドボックスドメインです。

メッセージを送信するには、フルドメインの最後の半分も必要です。それはsandboxXXXXxxxXXXXXX.mailgun.orgであり、MessageBuilderまたは他のメッセージ.send_messageメソッドに渡されます。私はそれらが混ざっていたとき、あるいは同じときにこのエラーが発生した。私がdevelopment.rbsome_mailer.rbの2つに分けて切ったときに問題なくメールを送ることができたときです。

以下は参考のために私のファイル設定です。私はこれのすべてにかなり新しいですが、これはセットアップ方法です。私にとってはうまくいけばそれが役に立ちます。

# .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ファイルで環境変数としてこれを設定することができます。

関連する問題