Rails从开发环境发送SendGrid电子邮件

时间:2017-01-04 15:50:46

标签: ruby-on-rails email sendgrid

我们在生产应用中使用SendGrid,它运行正常。我们最近尝试在开发中测试新功能/电子邮件,但似乎无法收到要发送的电子邮件。知道我们哪里出错了?我们正在使用类似的功能来生产,我们也遵循SendGrid的实施指南。感觉就像我错过了一些简单的东西!

首先我导出了SENDGRID_USERNAMESENDGRID_PASSWORD,并将其添加到我的.bash_profile

export SENDGRID_USERNAME=xxxxxxx
export SENDGRID_PASSWORD=xxxxxxx

我已经在控制台中确认这些存在并且是正确的。

创建了developer_email.html.erb文件:

<p>Hi! Sendgrid test</p>

DeveloperMailer文件:

class DeveloperMailer < ActionMailer::Base
  default from: "tom@xxxxxx.com"

  def developer_email(developer_id)
    @recipients = ["tom@xxxxxx.com"] 
    mail(to: @recipients, subject: 'Does sendgrid work?')
  end
end

更新了development.rb文件:

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.delivery_method = :smtp

  config.action_mailer.smtp_settings = {
  address:              'smtp.sendgrid.net',
  port:                 '587',
  domain:               'localhost:3000',
  user_name:            ENV['SENDGRID_USERNAME'],
  password:             ENV['SENDGRID_PASSWORD'],
  authentication:       :plain,
  enable_starttls_auto: true  } 

当我在控制台中发送电子邮件时,它的行为就像它发送的那样,但电子邮件实际上从未到过:

DeveloperMailer.developer_email(1)#发送电子邮件。似乎工作:

2.3.1 :001 > DeveloperMailer.developer_email(1)
  Rendered developer_mailer/developer_email.html.erb (1.5ms)

DeveloperMailer#developer_email: processed outbound mail in 133.3ms
 => #<Mail::Message:70263824429080, Multipart: false, Headers: <From: tom@xxxxx.com>, <To: ["tom@xxxx.com"]>, <Subject: Does SendGrid Work?>, <Mime-Version: 1.0>, <Content-Type: text/html>> 

#But I never get anything sent to my email

知道我可能缺少什么吗?

修改

更新了development.rb文件:

config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.perform_deliveries = true
  config.action_mailer.delivery_method = :smtp

  config.action_mailer.smtp_settings = {
  address:              'smtp.sendgrid.net',
  domain:               'theoremreach.com',
  user_name:            ENV['SENDGRID_USERNAME'],
  password:             ENV['SENDGRID_PASSWORD'],
  authentication:       :plain,
  enable_starttls_auto: true  } 

但仍然没有电子邮件。

3 个答案:

答案 0 :(得分:0)

在此上下文中,

domain是一个SMTP HELO域,而不是实际环境的域。将其更改为您在SendGrid配置文件中使用的同一个域,并且不要指定端口并尝试一下。

答案 1 :(得分:0)

首先,通过执行以下命令进行telnet

telnet smtp.sendgrid.net 2525

如果您从SMTP服务获得正确的响应,请更改SMTP port from 587 to 2525

在我的情况下,“ 587端口”没有响应

更改端口后对我有用

答案 2 :(得分:0)

您需要先验证发件人电子邮件或发件人电子邮件的域,然后才能使用SendGrid发送电子邮件。参见https://sendgrid.com/docs/ui/sending-email/sender-verification/https://sendgrid.com/docs/for-developers/sending-email/sender-identity/#domain-authentication