Ruby on Rails - 无法使用 Gmail SMTP 服务器发送邮件(在话语中)



我正在尝试设置discourse,这是一个rails3 webapp,但是配置smtp与gmail smtp服务器有一些问题。

我昨天已经注册了一个新的gmail帐户,可以登录浏览器和电子邮件客户端软件了。

然后在文件config/environments/production.rb:

中配置论述
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address   => "smtp.gmail.com",
  :port      => "587",
  :user_name => "smtp4shuzu@gmail.com",
  :password  => "12345678",
  :authentication => :plain,
  :domain => "shuzhu.org",
  :enable_starttls_auto => true
}

启动用于后台发送邮件的sidekiq:

nohup bundle exec sidekiq > log/sidekiq.log 2>&1 &

然后以生产模式开始话语:

rails server -e production -d

但是它不起作用。我可以看到sidekiq.log中的一些错误:

2013-03-01 t03:06:02 z 30687 TID-qib28 WARN: {"retry"=>true, "queue"=>"default", "class"=>"Jobs::UserEmail", "args"=>[{"type"=>"signup", "user_id"=>42, "email_token"=>"b40a21ece2b14586e346abfd96685975", "current_site_id"=>"default"}], "jid"=>"558bb6bd5aa36cfc8d3d1e91", "error_message"=>"Connection refused - connect(2)", "error_class"=>"Errno::ECONNREFUSED", "failed_at"=>2013-03-01 03:06:02 UTC, "retry_count"=>0}2013-03-01T03:06:02Z 30687 TID-qib28警告:Connection refused - connect(2)2013-03-01T03:06:02Z 30687 TID-qib28警告:/home/thesis/.rvm/rubiies/ruby-1.9.3-p385/lib/ruby/1.9.1/net/smtp。rb:540:在initialize' /home/discourse/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/net/smtp.rb:540:in打开'/home/discourse/.rvm/rubies/ruby-1.9.3-p385/lib/ruby 1.9.1/net/smtp。rb: 540:"tcp_socket"

我尝试了所有的smtp设置,但是没有一个有效。


:

根据@Basil的回答,我刚刚试过:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address   => "smtp.gmail.com",
  :port      => 587,
  :user_name => "smtp4shuzu",
  :password  => "12345678",
  :authentication => "plain",
  :enable_starttls_auto => true
}

但是它有相同的错误。域名shuzu.org是我的网站的域名,我想我应该把它传递给smtp。现在我删除了它,但仍然不能工作

最后,我找到了(愚蠢的)原因。

我应该在生产模式下启动sidekiq:

nohup bundle exec sidekiq -e production > log/sidekiq.log 2>&1 &

尝试删除端口周围的引号

  :port      => 587,

还有,我不明白为什么你的电子邮件地址是@gmail,而你的域名是@shuhzu…SMTP设置应该显示您的电子邮件帐户的域。如果你有一个自定义gmail,即me@custom.com那么域名将是custom.com。如果您有一个自定义电子邮件地址,下面是您的域的smtp设置的示例:

{
    :address => "smtp.gmail.com",
    :port => 587 ,
    :domain => "custom.com",
    :user_name => "some_email@custom.com",
    :password => "some_password",
    :authentication => "plain",
    :enable_starttls_auto => true
}

我刚刚在我自己的ubuntu物理站点服务器上的docker容器中设置了一个新的话语实例,并编辑了app.yml以包含:

DISCOURSE_SMTP_ADDRESS: 'smtp.gmail.com'
DISCOURSE_SMTP_AUTHENTICATION: 'plain'
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: 'my.name@gmail.com'
DISCOURSE_SMTP_PASSWORD: 'myPa$$word'
DISCOURSE_SMTP_ENABLE_START_TLS: true

,它成功了。战斗的一半是知道在哪里放单引号('),在哪里不放。

另一种方法对我来说也是可用的-我的ISP为它的静态IP客户提供中继smtp,所以我在app.yam:

中使用了它。
DISCOURSE_SMTP_ADDRESS: mail.myisp.tld
DISCOURSE_SMTP_AUTHENTICATION: none
DISCOURSE_SMTP_PORT: 25

有时取消/var/discourse/containers/app.yml中的以下行注释是有用的:

 ## If you want to set the 'From' email address for your first registration, uncomment and change:
 ## After getting the first signup email, re-comment the line. It only needs to run once.
  - exec: rails r "SiteSetting.notification_email='noreply@YOURDOMAIN.com'"

你应该在这里写所有Discourse的邮件的地址。默认情况下,Discourse将尝试使用您的论坛域名,但您的SMTP可能不允许这样做。例如,你的论坛在forum.example.com,而你的Gmail SMTP只允许来自example.com的电子邮件。

对于没有身份验证的SMTP,只需像这样留下验证字段:

  DISCOURSE_SMTP_USER_NAME:
  DISCOURSE_SMTP_PASSWORD:

保存完所有内容后:

./launcher rebuild app

一旦电子邮件工作,你可以重新注释这一行(与SiteSetting)。

您甚至可以通过控制台设置此SiteSetting,但这比取消/重新注释单行并重新构建容器要困难得多,因此我不会详细说明这一点。

在我的安装上,这是那些预先制作的图像的东西之一(Bitnami),我只需要运行这个:

/opt/discourse-0.9.5-0/ctlscript.sh start discourse_sidekiq

有谁知道我如何自动执行这个,以便它在启动时发生吗?

相关内容

  • 没有找到相关文章

最新更新