1

我已经根据 redmine wiki中的说明在 redmine 上配置了电子邮件,一切正常。以下是我的 config/configuration.yml 文件的内容:

production:
delivery_method: :smtp
 smtp_settings:
    address: "smtp.sendgrid.net"
    port: 587
    authentication: :plain
    domain: "heroku.com"
    user_name: my_email@gmail.com
    password: my_password 

但是我正在尝试使用环境变量代替 my_email@gmail.com 和 my_password ,如下所示:

production:
  delivery_method: :smtp
  smtp_settings:
    address: "smtp.sendgrid.net"
    port: 587
    authentication: :plain
    domain: "heroku.com"
    user_name: <%= ENV['SENDGRID_USERNAME'] %>
    password: <%= ENV['SENDGRID_PASSWORD'] %>

当我尝试使用配置文件中的环境变量发送测试电子邮件时,redmine 给出此错误:

'发送邮件时发生错误(535 身份验证失败:用户名/密码错误)'。

所以我猜 erb 片段没有被评估(我已经仔细检查了环境变量的值)。

我已经搜索了一个解决方案但结果是空的,有没有人对我应该如何在 redmine 中配置电子邮件有任何建议,这样我就不会在配置文件中公开我的 sendgrid 凭据?

或者,如果有人可以告诉我直接使用凭据而不存在环境变量不是安全风险,那也可以解决我的问题。

4

1 回答 1

6

我两周前回答过这个问题,马上就被别人删了。所以我不确定是否有人会再次删除这个答案以防止其他人知道如何解决这个问题。祝你好运!

我遇到了同样的问题,这篇文章 在 heroku 上的 redmine 中设置邮件解决了我的问题。

这个想法是将设置从 移动config/configuration.ymlconfig/environments/production.rb并使用 Ruby 代码进行设置。由于ENV['key']由 处理erb,我想configuration.yml不是那样处理的。也许有一些安全问题?

所以在你的情况下,你应该将这些代码添加到config/environments/production.rb如下,

ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => ENV['SENDGRID_USERNAME'],
  :password       => ENV['SENDGRID_PASSWORD'],
  :domain         => 'heroku.com'
}
ActionMailer::Base.delivery_method = :smtp

并从中删除代码config/configuration.yml并使其看起来像这样,

default:
  # Outgoing emails configuration (see examples above)
  email_delivery:
    delivery_method: :smtp
于 2013-06-26T06:18:44.733 回答