Errno :: EADDRNOTAVAIL:无法分配请求的地址-“ mail.domain.de”端口587的connect(2)

时间:2019-09-19 20:15:11

标签: ruby-on-rails email smtp digital-ocean sidekiq

我有一个Rails应用程序托管在Digitalocean服务器上。我正在使用来自域提供商(email server)的checkdomain.de。我设置了具有以下配置的电子邮件服务器:

config.action_mailer.smtp_settings = {
address: "host162.checkdomain.de",
port: 587,
domain: <my-domain>,
authentication: "plain",
enable_starttls_auto: true,
user_name: <my-username>,
password: <my-password>,
:openssl_verify_mode  => 'none'
}

我正在使用sidekiq进行后台工作以发送电子邮件。有时,当我尝试发送emails时,出现以下错误:

Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for "host162.checkdomain.de" port 587

OR

SocketError: getaddrinfo: Temporary failure in name resolution

以下是我的应用程序中的sidekiq配置:

sidekiq_config = { url: ENV['REDIS_URL'], password: ENV['REDIS_PASSWORD'] }
Sidekiq.configure_server do |config|
  config.redis = sidekiq_config
end

Sidekiq.configure_client do |config|
  config.redis = sidekiq_config
end

当我尝试不使用sidekiq发送电子邮件时,有时也会遇到相同的错误。我对此问题感到非常困惑,因为有时我可以成功发送电子邮件,并且有时会发生此错误,而无需进行任何更改。我与digitalocean(服务器提供商)联系,以确保是否所有的smtp端口都工作正常并且未被它们阻塞。 我已经看到这可能是一个问题,原因是在IPV6上启用了digitalocean服务,这导致smtp被阻止。我的液滴上也没有启用firewalls

由于这个原因,我更改了我的Droplet配置,以使用IPV4而不是IPV6来发送电子邮件。我已在/etc/gai.conf文件中取消注释以下行,并重新启动了系统

#precedence ::ffff:0:0/96 100

但是,不幸的是,这也没有帮助。我现在对这个问题的实际问题感到困惑。我唯一可以尝试的方法是手动从液滴中完全禁用IPV6,因为digitalocean不允许自动执行此操作。我不确定这是否真的有用或可能会对服务器造成不良影响,因为我们无法承受服务器的停机时间,否则可能会影响域或导致域无法访问。目前,发送emails是我们应用程序中最关键的部分,如果发生故障,我可以通过重试发送电子邮件来处理它,但这显然不是一个好的解决方案,即使重试了很多次也有可能不发送电子邮件。请帮助我:/

0 个答案:

没有答案