2015-04-04 3 views
1

Мне сложно найти решение (почти 3 дня), мой код в incoming_controller.rb кажется прав, я тестировал его в консоли rails и кажется, что только проблема заключается в том, что когда я отправляю электронное письмо (из моей учетной записи gmail) в электронную почту электронной почты, маршруты, которые я объявляю, не будут подключаться к моему рельсовому приложению, и я получаю предупреждения в журналах mailgun.Маршруты Mailgun, не подключающиеся к входящему контроллеру

Что я пытаюсь сделать, так это разрешить пользователям отправлять электронную почту и преобразовывать содержимое тела в закладку и сохранять ее в базе данных, а также тему письма в виде темы.

Вот мой routes.rb файл:

Rails.application.routes.draw do 
    devise_for :users 

    get 'welcome/index' 
    get 'welcome/about' 

    root to: 'welcome#index' 

    post :incoming, to: 'incoming#create' 
end 

Мой incoming_controller.rb файл:

class IncomingController < ApplicationController 
    skip_before_action :verify_authenticity_token, only: [:create] 

    def create 
    @user = User.find_by(email: params[:sender]) 
    @topic = Topic.find_by(title: params[:subject]) 

    @url = params["body-plain"] 

    if @user.nil? 
    @user = User.new(email: params[:sender], password: "temp0rary_passw0rd") 
    @user.skip_confirmation! 
    @user.save! 
    end 

    if @topic.nil? 
    @topic = @user.topics.create(title: params[:subject]) 
    end 

    @bookmark = @topic.bookmarks.create(url: @url) 

    head 200 
    end 
end 

Тема принадлежит Пользователю и имеет много закладок, Пользователь имеет множество тем , Закладка принадлежит теме.

Кроме того, вот мой mail.rb файла:

ActionMailer::Base.smtp_settings = { 
    port:    587, 
    address:   'smtp.mailgun.org', 
    user_name:   ENV['MAILGUN_SMTP_LOGIN'], 
    password:   ENV['MAILGUN_SMTP_PASSWORD'], 
    domain:   'appfc266c436eb04ebaae05a3f3f8ad7e49.mailgun.org', 
    authentication: :plain, 
    content_type:  'text/html' 
} 
ActionMailer::Base.delivery_method = :smtp 

# Makes debugging *way* easier. 
ActionMailer::Base.raise_delivery_errors = true 

Примечание: mailgun хорошо работает с отправкой инструкции подтверждения по электронной почте от Devise пользователей, поэтому он правильно настроен, что я могу Не делайте этого, чтобы mailgun получал электронные письма и хранил их в моем rails db через параметры с помощью входящего_контроллера.

Что я делаю неправильно?

Мой mailgun маршрут выглядит следующим образом:

Filter Expression: catch_all()

действия: вперед ("http://bookmark-this.herokuapp.com/incoming/")

Вот журналы предупреждения, которые я получаю в mailgun когда это Я посылаю электронное письмо:

mailgun logs

Вот репозиторий проекта на github: https://github.com/bntzio/bookmark-this

Большое спасибо!

+0

Что говорят журналы электронной почты, когда вы отправляете электронное письмо? – fuzzyalej

ответ

2

Mailgun получает код состояния 301, перенаправляется на конечную точку https вместо обычного. Кажется, что вы активировали SSL, но не обновили полный маршрут в конфигурации mailgun, чтобы использовать его. Вы должны обновить его следующим образом:

Actions: forward("https://bookmark-this.herokuapp.com/incoming/") 
Смежные вопросы