J'utilise Ruby MRI 2.0.0 et Rails 3.2.12 sur un VPS Ubuntu 12.04 TLS et j'essaie de configurer les notifications par courrier électronique dans mon application. Cela fonctionnait bien il y a quelques jours, mais plus maintenant. Mon hébergeur est OVH.
Mes paramètres SMTP:
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => '[email protected]',
:password => 'secret',
:authentication => 'plain',
:enable_starttls_auto => true
}
Utiliser Rails_ENV=production Rails console
:
class MyMailer < ActionMailer::Base
def test_email
sender = "[email protected]"
receiver = "[email protected]"
mail from: sender, to: receiver, subject: "Hello!", body: "World!!"
end
end
=> nil
MyMailer.test_email.deliver
Le résultat:
Net::OpenTimeout: execution expired
from ~/.rvm/rubies/Ruby-2.0.0-p0/lib/Ruby/2.0.0/net/smtp.rb:540:in `initialize'
from ~/.rvm/rubies/Ruby-2.0.0-p0/lib/Ruby/2.0.0/net/smtp.rb:540:in `open'
from ~/.rvm/rubies/Ruby-2.0.0-p0/lib/Ruby/2.0.0/net/smtp.rb:540:in `tcp_socket'
from ~/.rvm/rubies/Ruby-2.0.0-p0/lib/Ruby/2.0.0/net/smtp.rb:550:in `block in do_start'
from ~/.rvm/rubies/Ruby-2.0.0-p0/lib/Ruby/2.0.0/net/smtp.rb:549:in `do_start'
from ~/.rvm/rubies/Ruby-2.0.0-p0/lib/Ruby/2.0.0/net/smtp.rb:519:in `start'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/network/delivery_methods/smtp.rb:144:in `deliver!'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:2034:in `do_delivery'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `block in deliver'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:415:in `block in deliver_mail'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `block in instrument'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/activesupport-3.2.12/lib/active_support/notifications.rb:123:in `instrument'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/actionmailer-3.2.12/lib/action_mailer/base.rb:413:in `deliver_mail'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/mail-2.4.4/lib/mail/message.rb:229:in `deliver'
from (irb):28
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/Rails/commands/console.rb:47:in `start'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/Rails/commands/console.rb:8:in `start'
from ~/.rvm/gems/Ruby-2.0.0-p0@mygemset/gems/railties-3.2.12/lib/Rails/commands.rb:41:in `<top (required)>'
from script/Rails:6:in `require'
from script/Rails:6:in `<main>'2.0.0p0 :029 >
J'ai essayé ce qui suit:
exception_notification
a été ajoutée à la configuration il y a quelques jours. J'ai essayé de commenter sa ligne dans Gemfile
ainsi que sa configuration correspondante et d'exécuter bundle install
. Après le redémarrage du serveur, le problème persiste, même si je supprime et recrée le gemset.Quelqu'un at-il une idée possible sur la façon de résoudre ce problème?
Merci!
Le problème était dû à une mauvaise configuration IPv6 sur le serveur de production et a été corrigé.
J'avais probablement le même problème, mon application de production n'envoyait pas de courrier alors que tout était en cours de développement. J'ai aussi eu l'erreur "Net :: OpenTimeout".
Mon problème était que j'utilisais un serveur de Google en production, et qu'il bloquait les ports 25, 465 et 587 sur les connexions sortantes .
Depuis que j'utilisais Mandrill pour envoyer des mails, J'ai pu changer le port de connexion de 587 à 2525 et tout va bien maintenant.
Commencez par établir une connexion directe avec Telnet:
telnet smtp-relay.sendinblue.com 587
Trying 94.143.17.4...
Il s'agit du dépannage de connexion de base et fonctionne avec n'importe quel fournisseur ou port. Remplacez SendBlue et le port 587 par votre nom d’hôte/port actuel.
Si vous obtenez cette erreur:
telnet: Unable to connect to remote Host: Connection timed out
alors, le problème n'est pas dans Rails.
Dans l'exemple ci-dessus, le problème réside dans le numéro de port. Des services comme sendinblue ou mandrill (je crois aussi en gmail) ne prennent plus en charge le port 587. "2525" est le nouveau "587".
Si vous obtenez un délai d'attente sur telnet, vérifiez ceci:
Voici également une solution temporaire qui pourrait s'avérer utile en attendant que votre fournisseur d'hébergement résolve le problème:
Ajoutez les lignes suivantes à /etc/sysctl.conf
:
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Maintenant, les applications peuvent à nouveau envoyer des courriels.
Vous pouvez toujours savoir si IPv6 est activé en appelant
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
du terminal. Deux réponses possibles: 0 => IPv6 est activé; 1 => IPv6 désactivé.
Vous pouvez configurer Ubuntu pour préférer IPv4 à IPv6. De cette manière, vous pourrez envoyer des emails et accéder à des sites exclusivement IPv6. Éditez /etc/gai.conf
et décommentez la ligne suivante:
precedence ::ffff:0:0/96 100
J'ai ajouté ces éléments à /etc/gai.conf dans CentOS7 et cela a fonctionné.
label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20
precedence ::ffff:0:0/96 100
http://blog.asiantuntijakaveri.fi/2014/12/prefer-ipv4-over-ipv6-on-centos-6.html:title
Essayez ceci, si tout ce qui précède échoue
Je l'ai résolu en ajoutant ceci dans application.rb sous config
nécessite 'net/http' nécessite 'openssl' nécessite 'resolv-replace'
Si vous (ou Internet dans ce cas car cette question est le premier résultat de ce problème) testez Mailgun, vous pouvez obtenir cette erreur si vous utilisez le port 25
. Changez le port en 587
travaillé, même si leurs documents/liens rapides indiquent que 25
est correct à utiliser.