8721 sujets

Développement web côté serveur, CMS

Bonjour,

Cette discussion fait suite à mes problèmes avec PEAR.

J'ai installé PHPmailer 5.2.13 par ce site.

C'est super-facile, d'accord, et cela marche bien sur le site de développement.

Par contre, dès que l'on passe sur le site de production avec plus de mails à envoyer c'est assez dramatique : temps de réponse exécrable parfois jusqu'à l'expiration du script.

je précise qu'il s'agit d'envoyer quelques dizaines de mails par jour, ce n'est pas du spamming.

J'ai appelé OVH qui m'a conseillé de passer en version stable au lieu de legacy car il paraît que le cryptage TLS n'est pas installé sur Legacy.

De mon côté, j'ai :
1) rechargé le dossier PHPMailer
2) arrêté les copies cachées car j'ai lu quelque part que cela supposait un truc installé sur le serveur, je n'arrive plus à retrouver où j'ai vu cela.

Cela marche beaucoup mieux mais reste beaucoup plus lent que PEAR.

Je suppose que je ne suis pas le seul à utiliser PHPMailer sur un Muitu d'OVH, qu'en pensez-vous.

Mes paramétrages sont minimaux et standard :

$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'ssl0.ovh.net'; // Specify main and backup SMTP servers   ns0.ovh.net
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'mon nom'; // SMTP username
$mail->Password = 'mon passe'; // SMTP password
$mail->SMTPSecure = 'ssl'; // tls sur port 587, ssl sur port 465
$mail->Port = 465; // TCP port to connect to


J'ai vu qu'il y a des méthodes pour clore :

ClearAddresses() Clears all recipients assigned in the TO array. Returns void.
ClearCCs() Clears all recipients assigned in the CC array. Returns void.
ClearBCCs() Clears all recipients assigned in the BCC array. Returns void.
ClearReplyTos() Clears all recipients assigned in the ReplyTo array. Returns void.
ClearAllRecipients() Clears all recipients assigned in the TO, CC and BCC array. Returns void.
ClearAttachments() Clears all previously set filesystem, string, and binary attachments. Returns void.
ClearCustomHeaders() Clears all custom headers. Returns void.

Je ne les pas installées, est-ce utile ?

Merci d'avance.
Modifié par boteha_2 (22 Jun 2016 - 22:25)
Salut...

Déjà j'aurai une question.. comment envois tu tes emails ??
Est ce que c'est direct sur une page ou tu utilise un cron ?

Pour info.
PhpMailer utilise le smtp, ce qui est le mieux. Mais le smtp envoi par paquet à une fréquence régulière réglée selon le fournisseur de mail. C'est peut être pour cela que tu trouves cela lent.

En fait tu envoi tes messages à la pile/queue du smtp qui ensuite les balances genre toutes les minutes. (surement plus vite)
Du coup est ce l'envoi à la pile que tu trouves lent ou la réception du message pour tes tests ?

On attend tes éclaircissements Smiley cligne
Bonjour,

Merci de message.

a écrit :

Est ce que c'est direct sur une page ou tu utilise un cron ?


J'utilise un script PHP qui contient notamment le code que j'ai donné en copie.

Le problème chez OVH c'est simplement que PARFOIS (pas toujours) le serveur rame pour exécuter le script, il rame tellement que le script est interrompu et donc que le mail n'est pas envoyé.

Je pense que c'est 100% la faute d'OVH et je ne vois pas comment contourner.

J'ai beaucoup moins de problème sur le site de développement qui simplement doit être moins chargé, les scripts sont les mêmes et les réglages du Mutu identiques.

Si j'active le débogage de PHPmailer cela devient généralement plus rapide :

$mail->SMTPDebug = 3; // Enable verbose debug output


J'ai cherché la doc sur cette méthode en vain.
S'il y a moyen de l'activer sans se prendre le message retourné par PHPmailer c'est peut-être une piste.
Re.

Si en effet il est question de charge, peut être que tu envoi trop de mail en meme temps.
Une vieille règle était de faire des paquets d'envoi de 20 mails...
Peut être que cela pourrait être une solution pour toi.
Faire tourner ce script avec des paquets de 20 et qu'il se rappelle lui même jusqu'à épuisement de tous les mails.

2) Si le debug améliore les choses que te renvoi t il ?? des messages précis ? des erreurs ?
Merci de ta réponse

pchlj a écrit :

Si en effet il est question de charge, peut être que tu envoi trop de mail en meme temps.
Une vieille règle était de faire des paquets d'envoi de 20 mails...
Peut être que cela pourrait être une solution pour toi.
Faire tourner ce script avec des paquets de 20 et qu'il se rappelle lui même jusqu'à épuisement de tous les mails.


Je n'envoie pas de gros paquets.

D'ailleurs le problème peut arriver avec juste un ou deux mails à envoyer.

Le serveur rame comme s'il était en vrac.

pchlj a écrit :

2) Si le debug améliore les choses que te renvoi t il ?? des messages précis ? des erreurs ?


Il y a pleins de trucs, je ne vois pas de message d'erreur.
J'ai peur qu'il y ait des infos confidentielles, j'essaye de les remplacer


2016-06-21 17:46:53 Connection: opening to ssl0.ovh.net:587, 
timeout=300, options=array ( ) 2016-06-21 17:46:53 Connection: opened 
2016-06-21 17:46:53 SERVER -> CLIENT: 220 ssl0.ovh.net player738 
2016-06-21 17:46:53 CLIENT -> SERVER: EHLO  www.monsite.com  
2016-06-21 17:46:53 SERVER -> CLIENT: 250-player738.ha.ovh.net 250-SIZE 
104850000 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 
250-ENHANCEDSTATUSCODES 250 8BITMIME 2016-06-21 17:46:53 CLIENT -> 
SERVER: STARTTLS 2016-06-21 17:46:53 SERVER -> CLIENT: 220 2.0.0 Ready 
to start TLS 2016-06-21 17:46:53 CLIENT -> SERVER: EHLO 
 www.monsite.com  2016-06-21 17:46:53 SERVER -> CLIENT: 
250-player738.ha.ovh.net 250-SIZE 104850000 250-AUTH PLAIN LOGIN 
250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250 8BITMIME 2016-06-21 
17:46:53 CLIENT -> SERVER: AUTH LOGIN 2016-06-21 17:46:53 SERVER -> 
CLIENT: 334 VXNlcm5hbWU6 2016-06-21 17:46:53 CLIENT -> SERVER: 
Y2VudHJhbEB0b3VzbGVzY2FibGVzLmNvbQ== 2016-06-21 17:46:53 SERVER -> 
CLIENT: 334 UGFzc3dvcmQ6 2016-06-21 17:46:53 CLIENT -> SERVER: 
Z3c2NHF5MjE= 2016-06-21 17:46:53 SERVER -> CLIENT: 235 2.7.0 
Authentication successful 2016-06-21 17:46:53 CLIENT -> SERVER: MAIL 
FROM: 2016-06-21 17:46:53 SERVER -> CLIENT: 250 2.1.0 Ok 2016-06-21 
17:46:53 CLIENT -> SERVER: RCPT TO: 2016-06-21 17:46:53 SERVER -> 
CLIENT: 250 2.1.5 Ok 2016-06-21 17:46:53 CLIENT -> SERVER: DATA 
2016-06-21 17:46:53 SERVER -> CLIENT: 354 End data with . 2016-06-21 
17:46:53 CLIENT -> SERVER: Date: Tue, 21 Jun 2016 19:46:53 +0200 
2016-06-21 17:46:53 CLIENT -> SERVER: To: support@monsite.com 
2016-06-21 17:46:53 CLIENT -> SERVER: From: mail@free.fr 2016-06-21 
17:46:53 CLIENT -> SERVER: Subject: SSL vers monsite.com : 
produits 2016-06-21 17:46:53 CLIENT -> SERVER: Message-ID: 
<301981a823bb91e6ba152f62fcf918e5@www.monsite.com> 2016-06-21 
17:46:53 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.13 
(https://github.com/PHPMailer/PHPMailer) 2016-06-21 17:46:53 CLIENT -> 
SERVER: MIME-Version: 1.0 2016-06-21 17:46:53 CLIENT -> SERVER: 
Content-Type: multipart/alternative; 2016-06-21 17:46:53 CLIENT -> 
SERVER: boundary="b1_301981a823bb91e6ba152f62fcf918e5" 2016-06-21 
17:46:53 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 2016-06-21 
17:46:53 CLIENT -> SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: This is 
a multi-part message in MIME format. 2016-06-21 17:46:53 CLIENT -> 
SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: 
--b1_301981a823bb91e6ba152f62fcf918e5 2016-06-21 17:46:53 CLIENT -> 
SERVER: Content-Type: text/plain; charset=iso-8859-1 2016-06-21 17:46:53 
CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 2016-06-21 17:46:53 
CLIENT -> SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: DEbuf 3. | Votre 
logiciel de messagerie ne gère pas les mails au format html ! 2016-06-21 
17:46:53 CLIENT -> SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: 
2016-06-21 17:46:53 CLIENT -> SERVER: 
--b1_301981a823bb91e6ba152f62fcf918e5 2016-06-21 17:46:53 CLIENT -> 
SERVER: Content-Type: text/html; charset=us-ascii 2016-06-21 17:46:53 
CLIENT -> SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: 2016-06-21 
17:46:53 CLIENT -> SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: 
2016-06-21 17:46:53 CLIENT -> SERVER: 2016-06-21 17:46:53 CLIENT -> 
SERVER: DEbuf 3. 2016-06-21 17:46:53 CLIENT -> SERVER: 2016-06-21 
17:46:53 CLIENT -> SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: 
2016-06-21 17:46:53 CLIENT -> SERVER: 
--b1_301981a823bb91e6ba152f62fcf918e5-- 2016-06-21 17:46:53 CLIENT -> 
SERVER: 2016-06-21 17:46:53 CLIENT -> SERVER: . 2016-06-21 17:46:53 
SERVER -> CLIENT: 250 2.0.0 Ok: queued as B8846470 2016-06-21 17:46:53 
CLIENT -> SERVER: QUIT 2016-06-21 17:46:53 SERVER -> CLIENT: 221 2.0.0 
Bye 2016-06-21 17:46:53 Connection: closed
ok si pas de gros envoi..

pou rles trucs confidentiel t'inquiète t'es dans une communauté sérieuse ici Smiley cligne
On fait pas de pillage, ou de stockage etc Smiley cligne

Ok à part ça :
CLIENT -> SERVER: DEbuf 3. | Votre
logiciel de messagerie ne gère pas les mails au format html

je ne vois rien de spécial en effet

il semblerait que oui ovh enfin ton serveur ait bien un problème ou alors une erreur de config peut être.

J'utilise aussi phpmailer sur un ovh pour un client et j'ai pas de soucis. :s
Merci de ton suivi.

pchlj a écrit :
ok si pas de gros envoi..
Ok à part ça :
CLIENT -&gt; SERVER: DEbuf 3. | Votre
logiciel de messagerie ne gère pas les mails au format html


Je pense que CLIENT -&gt; SERVER: DEbuf 3

correpondond à :
$mail->SMTPDebug = 3; // Enable verbose debug output

Et
. | Votre
logiciel de messagerie ne gère pas les mails au format html

C'est une phrase ajoutée par mon script à la fin de la version non html du message.

Je sais qu'OVH m'a collé des DNS de serveur dédié alors que je suis sur un Mutu.
Cela peut-il avoir un rapport ?

Ce qui est sûr c'est que le Mutu où je suis n'est pas terrible, le site de développement est mieux tombé.
les serveurs de mail sont géré avec le MX
qui sera de toute façon mutualisé chez ovh (sauf si tu as un serveur dédié)
c'est étonnant qu'ils filent des dns de dédié pour un mutualisé.

je pense plutot que le dns est celui du serveur principal sur lequel est ton mutualisé. il y ensuite un dhcp interne qui fait la direction vers le bon site.

enfin bon les mutualisés n'ont jamais été de bon serveurs. C'est valable pour des petits blogs tout simple.

Après il y a les privés et les dédiés pour des appli un peu plus complexes.

Désolé de ne pas pouvoir t'aider plus.

Bon courage.
Encore merci de ton suivi.

C'est assez énervant.

Si j'utilise PEAR, les scripts s'exécutent sans latence, tous les mails partent mais je m'autospamme, c'est-à-dire que je reçois certains mails en plusieurs exemplaires et même certains mails qui ne me sont pas destinés, par exemple une copie que s'envoie un client.

OVH est juste capable de me dire que ce doit être la faute de mes programmes alors que les mêmes programmes ne posaient pas ce problème chez un serveur précédent non OVH.
Comme je n'ai pas accès à PEAR dans mon FTP, pas moyen d'avancer.

D'où mon idée d'utiliser PHPMailer qui lui ne me spamme pas mais pose le problème présenté dans cette discussion.

Je me dis qu'il faudrait peut-être commencer avec PHPMailer et si sendMail n'a pas renvoyé TRUE au bout de x secondes je renvoie le même mail avec PEAR.
Mais c'est un peu l'usine à gaz.

Je n'ai pas trouvé de doc sur cette méthode :

$mail->SMTPDebug = 3


Je ne sais pas à quoi correspond la valeur 3.
Si une autre valeur permet d'activer le mode debug sans se prendre en retour un message qui s'affiche sur la page c'est peut-être à essayer.

Autrement j'ai un site non minuscule, des milliers de logs par jour, mais avec un SQL privé cela marche correctement sur le Mutu d'OVH, les mails sont mon seul problème.
Bonjour,

$mail->SMTPDebug = 3


J'ai trouvé la doc, en fait les valeurs sont TRUE ou FALSE, je ne sais pas pourquoi il y a 3 là où j'ai trouvé ce code.

Je rebondis sur une question.

Envoi mail avec phpMailer
if (au bout de 5 secondes mail non parti)
{
Arrête cet envoi
Envoi mail avec PEAR
}

Comment coder le if ?
Je ne vois pas du tout quelles fonctions utiliser.
perso je fais ceci "en gros je met les partie importante du code Smiley cligne "


try {
	  $mail->Host       = "xxxxxxx"; // SMTP server
	  $mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing) set > 1 to work
	  ..... / / .......
	  $mail->Subject = $sujet;
	  $mail->MsgHTML($message);
  	  $mail->Send();
	  // JE PENSE QUE TU PEUX TESTER ICI SUR LE SEND OU UTILISER LES CATCH //
	} catch (phpmailerException $e) {
	  echo $e->errorMessage(); //Pretty error messages from PHPMailer
	} catch (Exception $e) {
	  echo $e->getMessage(); //Boring error messages from anything else!
	}
Bonjour,

Merci de ton message.

Je ne vais pas vous ennuyer avec tout mon code mais on y trouve tes parties importantes.

Le problème n'est pas mon code qui sort d'une page d'exemples de la doc officielle PHPMailer mais son fonctionnement chez OVH.
Ou même sur le site de production car c'est lent mais correct sur le site de test.

Un détail :

$mail->SMTPDebug = 0;


Cela marche mieux que si SMTPDebug est désactivé comme dans la page d'exemples PHPMailer.

Donc faire :
$mail->SMTPDebug = 0;
au lieu de :
// $mail->SMTPDebug = 0;


Au contraire je vais désactiver :

// $mail->setLanguage('fr', 'PHPMailer/language');


Je vous dis si cela va plus vite sans cette méthode.
Modifié par boteha_2 (28 Jun 2016 - 21:54)
il est vrai que mon code est celui de la doc officielle Smiley smile

Mais il faut savoir que pour moi il fonctionne sur n'importe quel serveur Smiley smile

OVH, Amen, Claranet et autres ...
Bonjour,

Le support OVH me fait remarquer que j'envoie en smtp et que cela irait plus vite avec mail.

$mail->isSMTP();


Là je suis largué car j'ai toujours lu que SMTP est le mieux, notamment pour des mails au format html avec pièces jointes.
Alors oui mail est plus rapide pour la simple et bonne raison que l'action est exécutée immédiatement sans passer par le "serveur de mail"

Le smtp est mieux puisqu'il respecte la gestion email "standard", en revanche il est un peu plus long car le smtp comme pour ton client mail standard attend l'action d'envoi.
Bonjour,

Que choisir ?
Je ne comprends avantages et inconvénients respectifs sauf que SMTP est lent sur le Mutu OVH.

IsMail() boolean true Sets Mailer to send message using PHP mail() function. (true, false or blank)

IsSMTP() boolean Sets Mailer to send message using SMTP. If set to true, other options are also available. (true, false or blank)

IsSendmail() boolean Sets Mailer to send message using the Sendmail program. (true, false or blank)

IsQmail() boolean Sets Mailer to send message using the qmail MTA. (true, false or blank)
Modérateur
pchlj a écrit :
Le smtp est mieux puisqu'il respecte la gestion email "standard", en revanche il est un peu plus long car le smtp comme pour ton client mail standard attend l'action d'envoi.

Sendmail est un smtp aussi et respecte tout autant la gestion email «standard».
Les avantages de se connecter directement sur un smtp externe sont principalement.
- La montée en charge et l'envoi en «bulk» (la fonction mail ouvre un socket pour chaque mail)
- La gestion centralisée du serveur d'e-mail. Les e-mails envoyés pouvant venir de différentes applications/serveurs.
- Des configurations avancées pour gérer l'envoi d'email avec d'autres programmes.

L'envoi standard ou pas, l'efficacité ou la réputation dépendent largement de la configuration du sendmail ou du smtp externe (qui peut très bien être sendmail, AFAIK). Comme ici les deux sont gérés par OVH, et comme souvent en mutualisé, il vaut mieux utiliser ce que le prestataire conseille, c'est la solution la mieux configurée généralement. Surtout que je ne vois pas du tout l'avantage du smtp externe pour 10 e-mails par jour? Par seconde clairement, mais par jour?
Bonjour,

Merci de ta réponse.

C'est plutôt une grosse centaine de mails par jour, chacun vers plusieurs destinataires et souvent avec des pièces jointes.

Je vais demander à OVH quelle méthode ils conseillent mais ils vont sans doute me répondre que c'est une question de code qui ne les regarde pas.
Bonjour,

Il y a du nouveau :

1)

$mail->isMail();


L'envoi de mails devient fluide, pour ne pas dire transparent, comme avant avec PEAR.
J'ai toujours lu qu'il fallait envoyer en SMTP mais sans doute pas sur un Mutu OVH.

2)

Par contre j'ai un souci avec le sujet d'une certaine catégorie de messages qui apparaissent comme suit :

?iso-8859-1?Q?monsite.com_:_paiement_de_109, 76_euros_accept=E9_par?= Cyberplus pour commande 40642

Cela vient de mon script appelé par la banque après le paiement.
Pas ce problème en SMTP
Pas ce problème en isMail() sur les autres scripts.

Avez-vous une idée ?
Bonjour,

Le problème de mauvais codage du sujet du message avec isMail() est très étrange.

Depuis le même script d'administration et avec le même script d'envoi des mails :

monsite.com : édition (ou mise à jour) devis 40651
// caractéres bien gérés

?iso-8859-1?Q?monsite.com_:_proposition_d?= 'échange
// caractéres mal gérés

monsite.com : proposition d&#039;&eacute; change

Je précise que le problème ne concerne que le sujet du mail.
Le body html est lui toujours bien géré.

Je n'y comprends rien car encore une fois ce sont les mêmes scripts.

Aucun problème avec isSMTP().