0

mail gemを使用してメールを送信しようとしています。しかし、残念ながらそれは機能していません。これは私のコントローラーです。

    def create
      fn = params["firstname"]
      ln = params["lastname"]
      email = params["email"]
      file = params["file"]
      summery = params["summery"]
      email_body = "Hello\n This is Your favorite website.\nA I want to personaly say hi."
      mail = Mail.new do
        from 'someone@gmail.com'
        to email
        subject "Saying Hi"
        body email_body
      end
      mail.add_file(filename: file.original_filename, content: File.read(file.tempfile.path)) unless file.nil?
      mail.deliver!
      render json: {message: "A bug has been created", success: true}, status: 201
    end

このコードはこのエラーを生成しています

Errno::ECONNREFUSED - 接続が拒否されました - 「localhost」ポート 25 の connect(2):

ただし、mailcatcherをインストールし、メールを mailcatcher に送信するようにコントローラーを構成すると、mailcatcher UI にメールが表示されます。

Mail.defaults do
 delivery_method :smtp, address: "localhost", port: 1025
end

また、この 2 行を config/environment/development.rb に追加しました。

config.action_mailer.raise_delivery_errors = true 
config.action_mailer.perform_deliveries = true

私の検索から、一部の人々が開発モードで電子メールを送信しないことに言及していることがわかりましたが、この場合、私は本当にすべての機能をテストしたいと考えています.

アップデート

@Uzbekjon と @SimoneCarletti が提案したように、ActionMailer を使用するようにコードを変更しました。app/mailer/ にファイルを作成し、コントローラーから呼び出しています。

  def create
    fn = params["firstname"]
    ln = params["lastname"]
    email = params["email"]
    file = params["file"]
    summery = params["summery"]
     email_body = "Hello\n This is Your favorite website.\nA I want to personaly say hi."
    WelcomeMailer.welcome(fn, ln, email, file, email_body).deliver_now
    render json: {message: "An Email has been send", success: true}, status: 201
  end

これは私のメーラーです

class WelcomeMailer < ActionMailer::Base
  default from: "someone@yahoo.com"

  def welcome(first_name, last_name, email, file, email_body)
    attachments["#{file.original_filename}"] = File.read("#{file.tempfile.path}")
 mail(
   to: email, 
   subject: 'Welcome to My Awesome Site', 
   body: email_body
 )
  end
end

しかし、私はまだ同じエラーが発生しています。

Errno::ECONNREFUSED - 接続が拒否されました - 「localhost」ポート 25 の connect(2):

答え

だから私は解決策を見つけました。はい、ActionMailer を使用する必要があります。その後、config/environments/development.rbに移動し、次の行を変更して追加する必要があります。

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.perform_deliveries = true
  config.action_mailer.delivery_method = :smtp
  # SMTP settings for gmail
  config.action_mailer.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :user_name            => "YOUR EMAIL",
    :password             => "YOUR Password",
    :authentication       => "plain",
    :enable_starttls_auto => true
  }

また、Gmail がこれについて不平を言った場合:

Net::SMTPAuthenticationError - 534-5.7.9 アプリケーション固有のパスワードが必要です

このリンクにアクセスして、安全性の低いアプリケーションに Gmail へのアクセスを許可します。

Yahoo などの他のサービスでは、他の構成を利用できます。グーグルで検索してください。

4

2 に答える 2

1

Errno::ECONNREFUSED - 接続が拒否されました - 「localhost」ポート 25 の connect(2):

gem がポート 25 でローカル smtp サーバーに接続しようとしているようmailです。ほとんどの場合、ポート 25 でサービスを実行して接続を受信して​​いません。

sendmail解決するには、またはお使いのマシンにインストールして実行postfixします。

PS。を使用しActionMailerます。

于 2016-08-11T15:38:28.430 に答える