Voilà mon problème, j'ai mis à jour mon site web sous sinatra en refaisant le code front avec React et depuis quand je veux faire un envoi de mail bah les erreurs dans les champs noms, prénoms et mails me renvoient un Internal server error au lieu du message attendu qui lui s'affiche bien quand le champ message est vide. J'ai réessayé de remettre le formulaire en mode normal mais ça ne change pas grand chose. C'est pas génant en soit car un formulaire bien rempli m'envoie le mail mais quand même.
Voici les différents codes
La page d'erreurs:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Erreur envoi</title>
<style type="text/css">
body {
background-color: white;
color: #333333;
font-family: Arial, sans-serif;
margin: 0;
padding: 36px;
line-height: 18px;
font-size: 14px;
}
.section {
margin-bottom: 36px;
color: #222222;
}
.section h1 {
font-size: 26px;
background-color: #dad8e4;
padding: 18px 22px 15px 22px;
margin: 0;
overflow: hidden;
}
.article {
border: 4px solid #dad8e4;
padding: 24px 18px 18px 18px;
font-size: 14px;
}
</style>
</head>
<body>
<div class="section">
<h1>Erreur d'envoi</h1>
<div class="article">
<p>Il y a une erreur dans votre formulaire. Vous n'avez rien rempli dans le champs <%= @field %> </p>
<a href="http://www.******.fr">Accueil</a>
</div>
</div>
</body>
</html>
L'extrait de code Ruby pour les mails:
post '/contact' do
require 'pony'
Pony.mail(
:from => params[:nom] +params[:prenom] + "<" + params[:email] + ">",
:to => '******@gmail.com',
:subject => "Vous avez un message de " + params[:nom] +params[:prenom],
:body => params[:message],
:via => :smtp,
:via_options => {
:address => 'smtp.sendgrid.net',
:port => '587',
:enable_starttls_auto => true,
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:authentication => :plain,
:domain => ENV['SENDGRID_DOMAIN']
})
redirect "/contact-error/name" if params[:nom].empty?
redirect "/contact-error/email" if params[:email].empty?
redirect "/contact-error/message" if params[:message].empty?
erb :contact_success
end
get '/contact-error/:field' do |field|
@field = field
erb :contact_error
end
get('/success') do
erb :success
end
var contact = React.createClass({displayName: "contact",
render: function() {
return (
React.createElement("section", {id: "contact"},
React.createElement("div", {className: "row"},
React.createElement("div", {className: "col-xs-12 col-lg-1"},
React.createElement("div", {className: "section-title"},
React.createElement("div", {className: "section-icon"},
React.createElement("i", {className: "fa fa-envelope"})
),
React.createElement("div", {className: "title"},
React.createElement("h4", null, "Contact")
)
)
),
React.createElement("div", {className: "col-xs-12 col-lg-11"},
React.createElement("div", {className: "box-holder exp-box"},
React.createElement("div", {className: "map-holder"},
React.createElement("div", null
)
),
React.createElement("div", {className: "contact-form-holder row"},
React.createElement("div", {className: "col-xs-12 col-sm-8"},
React.createElement("div", {className: "message-box"}),
React.createElement("form", {action: "/contact", method: "post", id: "formulaire"},
React.createElement("fieldset", null,
React.createElement("div", {className: "control-group"},
React.createElement("div", {className: "controls"},
React.createElement("label", {htmlFor: "name", size: 25}, " Nom :"),
React.createElement("input", {id: "nom", type: "text", name: "nom"})
)
),
React.createElement("div", {className: "control-group"},
React.createElement("div", {className: "controls"},
React.createElement("label", {htmlFor: "firstname"}, " Prenom :"),
React.createElement("input", {id: "prenom", type: "text", name: "prenom"})
)
),
React.createElement("div", {className: "control-group"},
React.createElement("div", {className: "controls"},
React.createElement("label", {htmlFor: "email"}, "Email :"),
React.createElement("i", null),
React.createElement("input", {id: "email", type: "text", name: "email"})
)
),
React.createElement("div", {className: "control-group"},
React.createElement("div", {className: "controls"},
React.createElement("label", {htmlFor: "to"}, "Message :"),
React.createElement("i", {className: "fa fa-pencil"}),
React.createElement("textarea", {id: "message", name: "message", rows: 5, cols: 5, className: "required col-xs-12"})
)
),
React.createElement("div", {className: "ribbon"},
React.createElement("input", {className: "boutons", type: "submit", defaultValue: "Envoyer"}),
React.createElement("div", {id: "loading"},
React.createElement("img", {alt: true, src: "images/loader.gif"})
),
React.createElement("div", {className: "arrow-left"})
)
)
)
),
React.createElement("div", {className: "col-xs-12 col-sm-4"},
React.createElement("div", {className: "desc"},
React.createElement("p", null,
"Vous pouvez me contacter via le formulaire suivant."
)
),
React.createElement("div", {className: "round-row"},
React.createElement("i", {className: "fa fa-envelope"}),
React.createElement("span", null, "****@gmail.com")
)
)
)
)
)
))
);
}
});
var element = React.createElement(contact);
React.render(element ,document.getElementById('contact'));J'ai aussi un script Jquery qui est censé faire une prévérification coté client qui ne fonctionne plus alors qu'il est bien chargé.
Que disent les logs serveur ?
2015-02-28T10:03:55.096377+00:00 app[web.1]: 81.66.50.140 - - [28/Feb/2015 10:03:55] "POST /contact HTTP/1.1" 500 30 2.5054
2015-02-28T10:03:55.098498+00:00 heroku[router]: at=info method=POST path="/contact" host=www.¨¨¨¨¨¨¨¨.fr request_id=1529b71c-68b7-4e60-b52f-5fd3692312fd fwd="81.66.50.140" dyno=web.1 connect=0ms service=2727ms status=500 bytes=326
2015-02-28T10:03:55.095547+00:00 app[web.1]: Net::SMTPSyntaxError - 501 Syntax error
2015-02-28T10:03:55.095556+00:00 app[web.1]: /app/vendor/ruby-2.2.0/lib/ruby/2.2.0/net/smtp.rb:964:in `check_response
Voilà les logs les plus parlant je pense ![]()
Net::SMTPSyntaxError - 501 Syntax errorJette un oeil à ça : http://stackoverflow.com/questions/5998758/email-with-rails-3-and-heroku-netsmtpsyntaxerror-501-syntax-error
J'ai déjà lu ça et ça ne m'aide pas plus que ça étant donné que c'est pour rails et que mon code était parfaitement valide avant y a pas de raison qu'il ne le soit plus d'un coup , je n'ai aucune erreur dans le from.
Le fait que ça soit Rails ou Sinatra n'importe peu, l'essentiel est que ça passe par check_response dans smtp.rb dans les deux cas, avec la même erreur.
Bref, si ton from est okay, là le mieux c'est de tenter de reproduire l'erreur avec le moins de code possible pour mieux la cibler.
Le seul code que tu as qui fait indirectement appel à smtp.rb semble être l'appel à la fonction Pony.mail, donc fais un fichier de test avec juste un appel à cette fonction, en mettant en dur les valeurs exactes que tu passais avec ton formulaire. Est-ce que ça reproduit l'exception ?
Avec mon formulaire je ne passe aucune valeur ,c'est ça le but du code , si le mec ne remplit pas le formulaire il est censé lui être indiqué qu'il doit le remplir ,ça fonctionnait très bien avant et l'envoi de mails marche ce qui me semble encore plus curieux.
l'ancienne version me donne bien le bon résultat . Bizarre je sens que ça va me saouler à fond et que ça restera comme ça.
Bon j'ai l'erreur uniquement quand je met mon nouvel index sous react
Incompréhensible honnêtement ![]()
Euh j'avais pas fait gaffe, mais si tu testais avec un formulaire vide en t'attendant à avoir une erreur, ça ne peut pas marcher avec ton code ; tu envoies le mail avant d'avoir vérifié les paramètres de formulaire…
Pony.mail(
:from => params[:nom] +params[:prenom] + "<" + params[:email] + ">",
...
})
redirect "/contact-error/name" if params[:nom].empty?
Ici même si le nom est vide, tu appelleras quand même Pony.mail avec un mauvais :from, (d'où l'erreur), avant de faire la vérification (qui n'a jamais lieue puisque l'exception est lancée avant).
Ah ok merci je vais essayer de corriger ça et sinon hésite pas à m'indiquer ta méthode en tout cas merci du coup de main ça doit être ça.
Bon encore un grand merci vava , j'ai corrigé l'erreur maintenant le code marche nickel.