【问题标题】:Can't send mail with gmail smtp server (in discourse)无法使用 gmail smtp 服务器发送邮件(讨论中)
【发布时间】:2013-02-15 11:51:52
【问题描述】:

我正在尝试设置 discourse,这是一个 rails3 webapp,但在使用 gmail smtp 服务器配置 smtp 时遇到了一些问题。

我昨天注册了一个新的gmail账号,可以登录浏览器和邮件客户端软件了。

然后我配置discourse,在文件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-01T03:06:02Z 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"=>"连接被拒绝 - 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 警告:连接被拒绝 - 连接(2) 2013-03-01T03:06:02Z 30687 TID-qib28 警告:/home/discourse/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/net/smtp.rb:540:in initialize' /home/discourse/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/net/smtp.rb:540:inopen' /home/discourse/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/net/smtp.rb:540:in `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。现在我删除了它,但仍然无法正常工作。

【问题讨论】:

  • 尝试添加 :domain => "gmail.com",然后重启你的服务器

标签: ruby-on-rails smtp gmail discourse


【解决方案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
}

【讨论】:

    【解决方案2】:

    我终于找到了(愚蠢的)原因。

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

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

    【讨论】:

      【解决方案3】:

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

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

      任何人都知道我可以如何自动化它以便它在启动时发生?

      【讨论】:

        【解决方案4】:

        我刚刚在我自己的 ubuntu 物理站点服务器上的 docker 容器中设置了一个新的 discourse 实例,并编辑了 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
        

        它也适用于我。

        【讨论】:

          【解决方案5】:

          有时在/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,但这比取消注释/重新注释一行并重新构建容器更困难,所以我不会详细说明。

          【讨论】:

            猜你喜欢
            • 2012-10-20
            • 2016-09-07
            • 1970-01-01
            • 2011-10-25
            • 2011-05-13
            • 2023-03-28
            • 2014-09-13
            • 2011-03-17
            • 1970-01-01
            相关资源
            最近更新 更多