web-dev-qa-db-ja.com

Rails consoleからメールを送信

実稼働サーバーのコンソールからメールを送信しようとしていますが、送信されません。理由がわかりません。 sendmailを使用した標準的なメール設定のみがあります。 Mailer.deliver_メソッドを呼び出すと、これが返されます:

#<TMail::Mail port=#<TMail::StringPort:id=0x3fe1c205dbcc> bodyport=#<TMail::StringPort:id=0x3fe1c2059e00>>

編集:さらに情報を追加しました:

したがって、たとえば、新しいユーザーがサインアップすると、「ようこそ」メールを送信するために、コントローラーに次の行があります。

 Mailer.deliver_signup(@user, request.Host_with_port, params[:user][:password])

これは正常に機能します。コンソールから同じことをできるはずだと思った

user = User.find(1)
Mailer.deliver_signup(user, "mydomainname.com", "password")

これを行うと、Tmail :: StringPortオブジェクトが返されますが、メールは送信されないようです(これをテストするために自分にメールを送信しようとしています)。

私はそれが役立つ場合にubuntuサーバーにいます。ありがとう-最大

53
Max Williams

Rails Consoleからメールを送信するには、まずアクションメーラー設定のためにこの設定をコンソールで実行する必要があります。

ActionMailer::Base.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = {
  address: 'smtp.gmail.com', 
  port: 587, 
  domain: 'gmail.com',
  authentication: 'plain', 
  enable_starttls_auto: true, 
  user_name: '[email protected]',
  password: 'yourpassword'
}

その後、メール送信コードを実行すると、メールが配信されます。

UserMailer.activation_instructions(@user).deliver_now
27
Dhiraj

より速いバージョン:

ActionMailer::Base.mail(
  from: "[email protected]", 
  to: "[email protected]", 
  subject: "Test", 
  body: "Test"
).deliver_now
90
jmgarnier

今朝、同じような問題に遭遇しましたRails 3アプリ:

UserMailer.activation_instructions(@user)

これによりデータが提供されましたが、電子メールは送信されませんでした。送信するために、私は電話しました:

UserMailer.activation_instructions(@user).deliver

これでうまくいきました。うまくいけば、これもあなたのために働くかもしれません!

47
sscirrus

あなたがやろうとしていることを理解していれば、私は100%ではありません。

インターネットに電子メールを送信する場合は、適切な電子メールサーバーにそれらの電子メールを転送するようにsendmailを構成する必要があります。使用するUbuntuリリースに応じて、パッケージを再構成するだけでこれを実行できます。

また、sendmailの代わりにprocmailを使用するかどうかを考えるかもしれません。

以下を使用して、電子メール構成を再構成できます。

dpkg-reconfigure sendmail

そのパッケージを使用する場合は、代わりにprocmailを使用してください。構成ダイアログには、すべてのメールを適切な電子メールサーバーに転送するように構成できるオプションがあります。ただし、認証が必要な場合、またはそのサーバーがサーバーからの電子メールのみを受け入れるかどうかを考える必要があります。

0
txwikinger