[RESOLU] Apprendre à envoyer un mail en PHP

Eléphant du PHP | 213 Messages

15 sept. 2022, 11:43

Bonjour,

Je dois faire en sorte de pouvoir envoyer un mail depuis un formulaire en PHP.
Dans le mail il faut que la présentation soit respecter.
Image

Code : Tout sélectionner

<table> <tr> <td>Nom et/ou matricule Utilisateur</td> <td>$variableID</td> </tr> <tr> <td>Type d’intervention (INCIDENT ou DEMANDE)</td> <td>$variableINC</td> </tr> <tr> <td>Groupe d’assignation (assignement group)</td> <td>$variableGRP</td> </tr> <tr> <td>Affecté au technicien (Assigned to)</td> <td>$variableTECH</td> </tr> <tr> <td>Arbre de Cloture (Work Notes)</td> <td>$variableGNR</td> </tr> <tr> <td>Explications de l’intervention (close notes)</td> <td>$variableCMT</td> </tr> </table>
Nom et/ou matricule Utilisateur $variable
Type d’intervention (INCIDENT ou DEMANDE) $variable
Groupe d’assignation (assignement group) $variable
Affecté au technicien (Assigned to) $variable
Arbre de Cloture (Work Notes) $variable
Explications de l’intervention (close notes) $variable

Mais je ne sais pas comment débuter.
Merci par avance.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9607 Messages

15 sept. 2022, 18:08

str_replace() permet de faire ce que tu veux, c'est à dire remplacer une variable par sa valeur dans un contenu.
https://php.net/str_replace
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 213 Messages

16 sept. 2022, 10:37

Bonjour @rthur,
str_replace() permet de faire ce que tu veux, c'est à dire remplacer une variable par sa valeur dans un contenu.
https://php.net/str_replace
Je ne vois pas le rapport avec str_replace(). MAis je garde ton info pour la suite.
Mon soucis est plus pour envoyer le mail, avec la fonction mail().
Mais j'ai cette erreur qui s'affiche.

Code : Tout sélectionner

PHP Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\inetpub\wwwroot\DevAdminPage-SansDossiers\mailenvoi1.php on line 42
j'ai regardé le fichier php.ini en local, le port 25 est bien déclaré.
Mais je n'aurai pas la main sur le fichier php.ini du serveur IIS externe.
Merci à toi.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9607 Messages

16 sept. 2022, 12:46

Ton serveur local n'est pas configuré pour envoyer des mails.

Soit tu installes un serveur SMTP, mais honnètement c'est galère à configurer sans erreur, et le risque que les mails que tu envoies tombent dans les spams est important.
Soit tu utilises un serveur SMTP tiers (celui de ton FAI, ou d'un service premium tel que Mailjet)

Pour utiliser un SMTP tiers 2 solutions simples sous Windows :
1) indiquer le SMTP (par exemple de ton FAI) dans le fichier php.ini (fais un phpinfo() pour trouver où il est)
Voici un exemple si tu es chez Orange :

Code : Tout sélectionner

; For Win32 only. ; http://php.net/smtp SMTP = smtp.orange.fr ; http://php.net/smtp-port smtp_port = 25
- Free : smtp.free.fr
- Orange : smtp.orange.fr
- Bouygues : smtp.bbox.fr
- SFR : smtp.sfr.fr

2) ou sinon tu peux utiliser une librairie en PHP type PHPMailer et indiquer un SMTP externe (comme Gmail, par exemple si tu as un compte Gmail).
https://github.com/PHPMailer/PHPMailer
Tuto : https://www.berejeb.com/2009/09/envoyer ... -de-gmail/
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 213 Messages

16 sept. 2022, 13:06

Bonjour @rthur,

Si j'ai bien compris je ne peux tester en LOCAL, je dois passer par un SMTP du FAI.
Si c'est idem sur le serveur IIS de la société, je pense que je ne pourrais faire les envois de mails car c'est surement bloqué par le proxy ou Antivirus de la Société. et je ne pourrais utiliser PHPMailer.
J'ai les tests.

Code : Tout sélectionner

<?php include 'header.php'; ?> <?php ini_set('SMTP','orange.fr'); // Plusieurs destinataires $to = '<toto@totocom>'; // Sujet $subject = 'Demande de création de ticket REGUL'; // message $message = ' <html> <head> <title>Calendrier des anniversaires pour Août</title> </head> <body> <p>Voici les anniversaires à venir au mois d\'Août !</p> <table> <tr> <th>Personne</th><th>Jour</th><th>Mois</th><th>Année</th> </tr> <tr> <td>Josiane</td><td>3</td><td>Août</td><td>1970</td> </tr> <tr> <td>Emma</td><td>26</td><td>Août</td><td>1973</td> </tr> </table> </body> </html> '; // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini $headers[] = 'MIME-Version: 1.0'; $headers[] = 'Content-type: text/html; charset=iso-8859-1'; // En-têtes additionnels $headers[] = 'To: HD <[email protected]>'; // $headers[] = 'From: Anniversaire <[email protected]>'; // $headers[] = 'Cc: [email protected]'; // $headers[] = 'Bcc: [email protected]'; // Envoi mail($to, $subject, $message, implode("\r\n", $headers)); ?>
l'erreur a changé.

Code : Tout sélectionner

PHP Warning: mail(): &quot;sendmail_from&quot; not set in php.ini or custom &quot;From:&quot; header missing in C:\inetpub\wwwroot\DevAdminPage-SansDossiers\mailenvoi1.php on line 44
Merci pour ton aide.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

16 sept. 2022, 13:45

Je crois que je vous prends la tête pour rien.
En fait ce qu'il faut vraiment c'est ouvrir Outlook de l'user et remplir le mail à sa place. Il n'aura plus qu'à faire envoyer lui-même.
Ce qui permettrait de ne pas avoir à paramétrer les connexions.
Est-ce possible ?

Merci beaucoup.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9607 Messages

16 sept. 2022, 14:03

Tu n'as pas indiqué l'expéditeur, forcément ça bloque ! :-D

Pour le serveur de ta société, demande au service informatique ils ont forcément un SMTP pour envoyer des mails et ça ne posera pas de problème vu que ton usage est légitime.


Pour envoyer un mail en ouvrant Outlook, il faut faire un lien mailto avec les bons paramètres :
https://www.rapidtables.com/web/html/mailto.html
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 213 Messages

16 sept. 2022, 15:25

Bonjour @rthur,

Merci pour toutes ses infos.
Je verrai donc Lundi quand je serais sur le serveur de la société.
Bon week-end.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

16 sept. 2022, 15:52

Bonjour @rthur,
Je viens de faire un test depuis mon serveur OVH et tous fonctionne.
Il ne me reste plus qu'à trouver la solution pour que le texte soit conforme.

Code : Tout sélectionner

Demande de création de ticket REGUL Voici les anniversaires à venir au mois d'Août ! Personne Jour Mois Année Josiane 3 Août 1970 Emma 26 Août 1973
Merci beaucoup à toi.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9607 Messages

16 sept. 2022, 18:10

C'est un problème d'encodage de caractères.

Essaye en remplaçant
$headers[] = 'Content-type: text/html; charset=iso-8859-1';
par
$headers[] = 'Content-type: text/html; charset=utf-8';
Sinon tu peux aussi jouer avec les fonctions utf8_encode() / utf8_decode(), mais si ma 1ère solution marche c'est le plus simple :-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 213 Messages

20 sept. 2022, 10:57

Bonjour @rthur

Comme d'hab c'est toi le meilleur.

Merci à toi.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.