2014-08-29 4 views
1

Я пытаюсь разрешить пользователю отправлять электронное письмо кому-то вне приложения со своей страницы профиля после входа в мое веб-приложение.Почему сообщение не отправляется?

Я получаю уведомление об ошибке «не удалось», когда я нажимаю «отправить электронную почту» из модального. любые идеи, почему это не удается? Я пытался решить эту проблему уже неделю, поэтому очень ценю некоторую помощь! Благодаря!

Маршруты:

devise_for :users 

    resources :profiles do 
    put :email_profile 
    end 

Профиль контроллера:

def email_profile 
    @profile = Profile.find(params[:profile_id]) 
    destination = params[:to] 
    share = Share.profile(@profile, destination) 
    if destination =~ /@/ && share.deliver 
     redirect_to @profile, notice: 'email sent' 
    else 
     redirect_to @profile, notice: 'email failed' 
    end 
    end 

Профиль Показать Вид:

<!-- Button trigger modal --> 
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"> 
    Email 
</button> 

<!-- Modal --> 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> 
     <h4 class="modal-title" id="myModalLabel">Share my Info with someone</h4> 
     </div> 
     <div class="modal-body"> 
     <%= form_tag profile_email_profile_path(@profile), method: :put do %> 
      <%= label_tag :destination, "What email address would you like to send this to?" %> 
      <%= text_field_tag :destination %> 
     </div> 
     <div class="modal-footer"> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> 
     <%= submit_tag "Send Email", class: "btn btn-primary" %> 
     <% end %> 
     </div> 
    </div> 
    </div> 
</div> 

Share почтовик:

class Share < ActionMailer::Base 
    default_url_options[:host] = "localhost:3000" 
    default from: "[email protected]" 

    def profile(profile, destination) 
    @profile = profile 
    mail(to: destination, subject: "sent you stuff") 
    end 
end 

profile.htmnl.erb

<p>sent you their information.</p> 

profile.text.erb

sent you their information. 

Среды/развитие:

# Don't care if the mailer can't send. 
    config.action_mailer.raise_delivery_errors = true 

    config.action_mailer.delivery_method = :smtp 

    # Gmail SMTP server setup 
    ActionMailer::Base.smtp_settings = { 
    :address => "smtp.gmail.com", 
    :enable_starttls_auto => true, 
    :port => 587, 
    :authentication => :plain, 
    :user_name => "[email protected]", 
    :password => '46292839' 
    } 
# Raises error for missing translations 
    # config.action_view.raise_on_missing_translations = true 
    config.action_mailer.default_url_options = { :host => 'localhost:3000' } 

    # false prevents mail from being sent in development environment 
    config.action_mailer.perform_deliveries = true 

терминал:

Started PUT "/profiles/1/email_profile" for 127.0.0.1 at 2014-08-29 12:12:44 +1000 
Processing by ProfilesController#email_profile as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"lNgA2/SNZCifVx33Hp53YAQxRPRW7lRsHsJuETSNKgE=", "destination"=>"[email protected]", "commit"=>"Send Email", "profile_id"=>"1"} 
    User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    Profile Load (0.1ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."id" = ? LIMIT 1 [["id", 1]] 
    Rendered share/profile.html.erb (0.3ms) 
    Rendered share/profile.text.erb (0.2ms) 

Share#profile: processed outbound mail in 11.0ms 
Redirected to http://localhost:3000/profiles/1 
Completed 302 Found in 16ms (ActiveRecord: 0.3ms) 


Started GET "/profiles/1" for 127.0.0.1 at 2014-08-29 12:12:44 +1000 
Processing by ProfilesController#show as HTML 
    Parameters: {"id"=>"1"} 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    Profile Load (0.1ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."id" = ? LIMIT 1 [["id", 1]] 
    Rendered profiles/show.html.erb within layouts/application (0.9ms) 
    Profile Load (0.1ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = ? LIMIT 1 [["user_id", 1]] 
Completed 200 OK in 10ms (Views: 8.8ms | ActiveRecord: 0.3ms) 
+0

В вашем 'email_profile' действия вы имеете' назначения = Params [ : to] ', но не должно быть' destination = params [: description] '? – mmichael

+0

почему бы: описание? откуда взялось описание? – sss333

+1

Приношу свои извинения, было поздно ночью! «пункт назначения» не «описание». В 'form_tag' у вас есть' <% = text_field_tag: destination%> ', который даст вашему контроллеру доступ к этому значению с помощью параметра params [: destination]'. – mmichael

ответ

0

В контроллере вы это линия:

destination = params[:to]

Но у вас нет каких-либо параметров с именем to так изменить строку, чтобы быть:

destination = params[:destination]

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