为什么电子邮件失败发送? [英] Why is the email failing to send?

查看:204
本文介绍了为什么电子邮件失败发送?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to allow a user to send an email to someone outside the app from their profile page once logged in to my web app.

当我从模态按发送电子邮件时,我收到通知电子邮件失败。任何想法为什么会失败?我一直在努力解决这一个星期,所以真的很感激一些帮助!谢谢!

I am getting the notice 'email failed' when I press 'send email' from the modal. any ideas why it's failing? I've been trying to solve this for a week now so really appreciate some help! Thanks!

路线:

 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>

分享邮件:

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

profile.htmnl.erb

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

profile.text.erb

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)


推荐答案

在您的控制器中,您有以下一行:

In your controller you have this line:

= params [:to]

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

But you don't have any param with name to so change the line to be:

destination = params [:destination]

这篇关于为什么电子邮件失败发送?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆