我正在尝试设置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
有谁知道我如何自动执行这个,以便它在启动时发生吗?