Ruby on rails Sendgrid不接受用户名/密码

Ruby on rails Sendgrid不接受用户名/密码,ruby-on-rails,devise,sendgrid,Ruby On Rails,Devise,Sendgrid,我正在关注,虽然我能够发送一封关于开发的电子邮件,但关于Heroku是另一笔交易。在使用Desive注册时,heroku抛出了一个535错误,告诉我用户名/密码不正确。我检查了我的配置变量,并且确实设置了sendgrid_用户名和密码。我运行了heroku运行了printenv,下面是它吐出的内容 RAILS_SERVE_STATIC_FILES=enabled DATABASE_URL=postgres:// GEM_PATH=/app/vendor/bundle/ruby/2.5.0: PO

我正在关注,虽然我能够发送一封关于开发的电子邮件,但关于Heroku是另一笔交易。在使用Desive注册时,heroku抛出了一个535错误,告诉我用户名/密码不正确。我检查了我的配置变量,并且确实设置了sendgrid_用户名和密码。我运行了heroku运行了printenv,下面是它吐出的内容

RAILS_SERVE_STATIC_FILES=enabled
DATABASE_URL=postgres://
GEM_PATH=/app/vendor/bundle/ruby/2.5.0:
PORT=18178
RAILS_ENV=production
RAILS_LOG_TO_STDOUT=enabled
COLUMNS=80
TERM=xterm-256color
RACK_ENV=production
SHLVL=1
SENDGRID_PASSWORD=SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SENDGRID_USERNAME=my-api-key
MALLOC_ARENA_MAX=2
我也使用这个初始化器

ActionMailer::Base.delivery_method = :smtp
 ActionMailer::Base.smtp_settings = {
  address:        'smtp.sendgrid.net',
  port:           '587',
  authentication: :plain,
  user_name:      ENV['SENDGRID_USERNAME'],
  password:       ENV['SENDGRID_PASSWORD'],
  domain:         'my-app.herokuapp.com',
  enable_starttls_auto: true
 }
我想用这个作为一个垫脚石来教自己如何建立一个基本的联系方式,但现在我不太明白为什么没有设置密码和用户名

我看这个太久了,需要一双新的眼睛(和睡眠)。如果您需要更多代码,请告诉我


更新:我开始觉得Sendgrid的一端有些可疑。稍后我将联系支持人员,试图弄清问题的真相,并在稍后更新问题所在。

好了,伙计们,这部分是新手犯的错误,另一部分是视频是为rails 4制作的

首先,我的错误是我误解了将哪个值放在哪里。我输入了在sendgrid名称下面列出的API密钥id作为密码。这是不正确的。sendgrid用户名是您在创建密钥时给出的名称,sendgrid密码是创建时在您面前闪现的一次性密码。别忘了

其次,我必须向Udemy的@TONYD大声呼喊,他给出了关于如何设置Rails5.2到Rails6应用程序以及为什么要这样做的详细答案。老兄,你帮我省了这么多麻烦,我欠你一杯啤酒

Rails 5.2中的Sendgrid凭据-正确方式 一,

托尼·讲座257·一年前 因此,在其他教程中,我使用.profile方法保存SendGrid用户名和密码凭据似乎不再正确。(至少对于本地开发来说——我在MacOS中使用VS代码来实现这一点)我环顾四周,发现了这篇关于使用加密的credentials.yml.enc文件来存储这些东西的文章。它很好,因为它是加密的,它特定于项目,并且为Rails的未来版本进行了设置

其中一个重要的注意事项是--wait命令,具体取决于您使用的编辑器:)

本文没有具体说明如何格式化sendgrid的凭据,但我发现了这个gem,其中描述了如何设置格式:

接下来-您需要分别为开发环境和生产环境配置actionmailer

因此,不要将ActionMailer块放在environment.rb中

相反,在development.rb中,放置以下块:

 ActionMailer::Base.smtp_settings = {
   :address => 'smtp.sendgrid.net',
   :port => '587',
   :authentication => :plain,
   :user_name => Rails.application.credentials[:sendgrid][:user_name],
   :password => Rails.application.credentials[:sendgrid][:password],
   :domain => 'heroku.com',
   :enable_starttls_auto => true
 }
  config.action_mailer.delivery_method = :test
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.smtp_settings = {
  :user_name => ENV['SENDGRID_USERNAME'],
  :password => ENV['SENDGRID_PASSWORD'],
  :domain => 'yourdomain.com',
  :address => 'smtp.sendgrid.net',
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
 }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.default_url_options = { :host => 'photo-app-tonyd.herokuapp.com', :protocol => 'https' }
注意:主机行-根据视频输入您的url-我在本地执行此操作,因此我需要本地主机:3000

然后在production.rb中放置此块:

 ActionMailer::Base.smtp_settings = {
   :address => 'smtp.sendgrid.net',
   :port => '587',
   :authentication => :plain,
   :user_name => Rails.application.credentials[:sendgrid][:user_name],
   :password => Rails.application.credentials[:sendgrid][:password],
   :domain => 'heroku.com',
   :enable_starttls_auto => true
 }
  config.action_mailer.delivery_method = :test
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.smtp_settings = {
  :user_name => ENV['SENDGRID_USERNAME'],
  :password => ENV['SENDGRID_PASSWORD'],
  :domain => 'yourdomain.com',
  :address => 'smtp.sendgrid.net',
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
 }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.default_url_options = { :host => 'photo-app-tonyd.herokuapp.com', :protocol => 'https' }

假设你不是为了隐私而隐藏域名……我相信你的域名需要设置为你实际的heroku域名(不仅仅是heroku.com)。另外,您的SENDGRID_用户名和密码的格式是什么?它应该类似于
app123456789@heroku.com
用于用户名和字母数字密码。此外(不确定这是否重要),但大多数示例的端口号都是整数,而不是字符串。感谢您的回复。是的,我的初始值设定项中的“heroku.com”实际上是“my website.heroku.com”,我将编辑OP以消除混淆。至于用户名和密码,视频中的讲师向我们展示了我们在sendgrid中为用户名生成的API密钥的名称,以及创建密钥后出现的一次性显示的密码。对吗?我确实将heroku中的用户名编辑为我的应用程序的名称,只是为了给它一个机会,但这也是不可能的。另外,对于端口号,我不知道如何更改它。从技术上讲,由于我几个月前在同一台计算机上完成了这个项目,而且它工作正常(尽管dummy显然忘记了一些东西),我不确定从那时起它会发生什么变化。我还更改了API密钥id的密码。仍然不行。