7

私のrailsサイトでは、GMailを介してメールを送信しようとすると、完全に機能します。しかし、MandrillAppを介して送信しようとすると、次のエラーが発生します(RController.createはdeliverコマンドが呼び出される場所です)。

Net::SMTPServerBusy in RController#create 
454 4.7.1 <recipient@gmail.com>: Relay access denied

これが私のconfig/environment /development.rbファイルです:

 # ActionMailer Config
 config.action_mailer.default_url_options = { :host => 'localhost:3000' }
 config.action_mailer.delivery_method = :smtp
config.action_mailer.default :charset => "utf-8"

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

config.action_mailer.delivery_method = :smtp
# config.action_mailer.smtp_settings = {
#   :address              => "smtp.gmail.com",
#   :port                 => 587,
#   :domain               => 'gmail.com',
#   :user_name            => 'sender@gmail.com',
#   :password             => 'password',
#   :authentication       => 'plain',
#   :enable_starttls_auto => true  }

config.action_mailer.smtp_settings = {
:address   => "smtp.mandrillapp.com",
:port      => 587,
:user_name => ENV["EMAIL"],
:password  => ENV["PASSWORD"]
}

上記のように、コードは機能しません-私は電子メールを受け取らず、エラーはポップアップしません。Gmailからの送信に切り替えると、ほぼ瞬時にメールが届きます。私はこれまでマンドリルと一緒に仕事をしたことがないので、助けていただければ幸いです。

4

5 に答える 5

5

Mandrill のサービス担当者に相談したところ、環境変数の代わりに実際の文字列を使用していたことが判明したため、構成ファイルから「ENV」を削除する必要がありました。

セキュリティのために戻って環境変数を作成することになりましたが、他の誰かが同じ問題を抱えていて、この質問を見つけた場合に備えて、それを捨てようと思いました。

于 2012-12-20T23:51:56.907 に答える
2

次のMandrill SMTP Integrationのセットアップを調べてみましたか。それが役に立てば幸い

于 2012-12-20T02:46:42.090 に答える
1

ENV 変数が最初に設定されているかどうかを確認することもできます。

于 2013-07-11T08:07:24.013 に答える
1

Heroku を使用している場合は、CLI で環境変数を設定する必要があります。

cd を作業ディレクトリに移動して...

heroku config:set MANDRILL_USERNAME='YOUR USERNAME'
heroku config:set MANDRILL_APIKEY="YOUR API KEY"

環境変数にアクセスできるようになりました。あなたが development.rb で作業していることは知っていますが、これで production.rb にたどり着いたときの頭痛の種から解放されるかもしれません。application.yml ファイルで数時間頭が痛くなりました。

于 2014-11-10T22:12:10.827 に答える
0

あなたの問題はPhusion Passengerが原因であると思われます(したがって、本番環境にあります)。Passenger は、環境変数を設定しないことで有名です。

このSO の問題は、値をハードコーディングするか、Passenger が使用する Ruby ラッパーをオーバーライドするという 2 つの解決策を提案しています。

3 番目のオプションをお勧めします: デプロイ中に環境変数を拡張します。これはほとんど遅延ハードコーディングですが、コードからパスワードを除外します。

deploy の直後に、この少しの bash を実行する必要があります。

mv config/environments/production.rb config/environments/production.before_sed.rb
env | sed 's/[\%]/\\&/g;s/\([^=]*\)=\(.*\)/s%ENV\\[\\"\1\\"\\]%\2%/' > script/expand_env_vars.sed.script
cat config/environments/production.before_sed.rb | sed -f script/expand_env_vars.sed.script > config/environments/production.rb

これは同等の Capistrano デプロイ タスクです (多くのエスケープが先にあります!)。

desc "Replace environment variables with hardcoded values in config files"
task :replace_env_vars, roles: :app do
    run "mv #{release_path}/config/environments/production.rb #{release_path}/config/environments/production.before_sed.rb"
    run 'env | sed \'s/[\%]/\\&/g;s/\([^=]*\)=\(.*\)/s%ENV\\\[\\\"\1\\\"\\\]%\\\"\2\\\"%/\' > ' + "#{release_path}/script/expand_env_vars.sed.script"
    run "cat #{release_path}/config/environments/production.before_sed.rb | sed -f #{release_path}/script/expand_env_vars.sed.script > #{release_path}/config/environments/production.rb"
end

after "deploy:update_code", "deploy:replace_env_vars"

Capistrano の場合でも、デプロイに使用する SSH セッションに同じ環境変数が設定されていません (.bashrc、/etc/profile などは実行されません)。それらを に再エクスポートし~/.ssh/environment、次のオプションを に追加する必要があります/etc/ssh/sshd_config

PermitUserEnvironment yes

これらの最後の指示はそこにありました。この問題については、新しいブログで個人的に詳しく説明しています。

これがセキュリティの問題を解決するのに役立つことを願っています:)

于 2013-02-20T20:31:07.843 に答える