为什么电子邮件无法发送?

我尝试允许用户在登录我的网络应用程序后,从他们的个人资料页面向应用程序外的某人发送电子邮件。

当我按模式中的“发送电子邮件”时,我收到通知’电子邮件失败’。 任何想法为什么失败? 我一直试图解决这个问题一周,所以非常感谢一些帮助! 谢谢!

路线:

devise_for :users resources :profiles do put :email_profile end 

Profile Controller:

 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 

资料显示视图:

     

分享邮件:

 class Share < ActionMailer::Base default_url_options[:host] = "localhost:3000" default from: "from@example.com" def profile(profile, destination) @profile = profile mail(to: destination, subject: "sent you stuff") end end 

profile.htmnl.erb

 

sent you their information.

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 => "joe.smith@gmail.com", :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"=>"joe.smith@gmail.com", "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) 

在你的控制器中你有这一行:

destination = params[:to]

但是你没有任何名称的参数,所以改为:

destination = params[:destination]