我正在尝试设置discourse,这是一个rails3 webapp,但在使用gmail smtp服务器配置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-01T03:06:02Z 30687 TID-qib28警告:{“retry”=> true,“queue”=>“default”,“class”=>“Jobs :: UserEmail”, “args”=> [{“type”=>“注册”,“user_id”=> 42,“email_token”=>“b40a21ece2b14586e346abfd96685975”,“current_site_id”=>“默认”}],“jid “=>”558bb6bd5aa36cfc8d3d1e91“,”error_message“=>”拒绝连接 - 连接(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:in
开放” /home/discourse/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/net/smtp.rb:540:in`tcp_socket'
我尝试过各种smtp设置,但都没有。
更新:
Per @ 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。现在我删除了它,但仍然没有工作。
答案 0 :(得分:5)
最后,我找到了(愚蠢的)理由。
我应该在生产模式下启动sidekiq
:
nohup bundle exec sidekiq -e production > log/sidekiq.log 2>&1 &
答案 1 :(得分:2)
尝试删除端口周围的引号
: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 :(得分:1)
有时在<input type="button" class="button-clickers" value="Bnt1">
<input type="button" class="button-clickers" value="Bnt2">
<input type="button" class="button-clickers" value="Bnt3">
<input type="button" class="button-clickers" value="Bnt4">
<input type="button" class="button-clickers" value="Bnt5">
<input type="button" class="button-clickers" value="Bnt6">
<input type="button" class="button-clickers" value="Bnt7">
中取消注释以下行很有用:
tableView.delegate = self
tableView.dataSource = self
您应该在此处放置所有Discourse电子邮件所代表的地址。默认情况下,Discourse会尝试使用您论坛的域名,但是您的SMTP可能不允许使用。例如,您的论坛位于/var/discourse/containers/app.yml
,而您的Gmail SMTP仅允许来自 ## 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'"
的电子邮件。
对于没有身份验证的SMTP,只需保留以下身份验证字段即可:
forum.example.com
在保存所有内容之后:
example.com
电子邮件正常工作后,您可以重新注释此行(使用 DISCOURSE_SMTP_USER_NAME:
DISCOURSE_SMTP_PASSWORD:
)。
您甚至可以只通过控制台设置此./launcher rebuild app
,但比取消注释/重新注释一行并重新构建容器要困难得多,因此我将不对其进行详细说明。
答案 3 :(得分:0)
在我的安装中,这是一个预先制作的图像内容(Bitnami),我只需要运行它:
/opt/discourse-0.9.5-0/ctlscript.sh start discourse_sidekiq
任何人都知道如何自动执行此操作以便在启动时发生?
答案 4 :(得分:0)
我只是在我自己的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
它也适用于我。