Envoi d'un mail avec PHP

a marqué ce sujet comme résolu.

Bonjour, Je souhaiterais envoyer un mail grâce à une page web, j’ai suivis ce tuto. Le problème, c’est que je ne reçois rien (je suppose donc qu’il faut configurer des choses ailleurs ?!) … . J’ai pourtant bien cherché, mais d’un coté on parle d’un serveur SMTP. De l’autre, modifier le fichier php.ini, etc …

Bref, je suis complètement perdu. Quelqu’un ne pourrait pas m’indiquer le lien d’un tuto (compréhensible et complet) ou voudrait bien m’expliquer comment procéder svp ?

Serveur qui héberge mon site web = RaspberryPi hébergé chez moi - Apache2 - Php5 | FAI : orange |

Alors, effectivement il va te falloir configurer le serveur SMTP.

Première question, l’adresse email que tu veux utiliser, elle est héberger quelques part ? Ou tu souhaite l’héberger sur ton ÉPI ?

Si elle est déjà héberger quelque part, il faut aller modifier ton fichier php.ini, dans se fichier tu peux faire une recherche sur SMTP, tu devrais avoir quelque chose comme

1
2
3
host=localhost
username=
password=

Il te faudra donc remplir ceci en fonction de ton adresse email.

Une fois ceci fait, tu peux redémarrer PHP et essayer.

Je ne suis pas exactement sur de ce que j’ai indiqué, car je suis sur mon Phone et faut ça de tête.

Normalement, j’aimerais utiliser une adresse de type gmail

Dans mon fichier php.ini, j’ai ça (pour une recherche SMTP) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost 
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =
; Log mail to syslog (Event Log on Windows).
;mail.log = syslog

(Ps: ÉPI  ? )

+0 -0

ÉPI  ?

RPI * Correcteur du tel.

Sinon, dans ton fichier php.ini, dans SMTP tu remplis pour une adresse Gmail par exemple : smtp.gmail.com.

Pour le port, tu devras probablement mettre 465 avec du SSL, ou 587 en TLS.

Ensuite il te faut décommenter la ligne sendmail_from, c’est à dire supprimer le ; au début, et indiquer l’adresse email : exemple@gmail.com.

Ensuite, en dessous de ça tu rajoute les deux lignes suivantes:

1
2
username = nom_utilisateur
password = mot_de_passe

et ensuite tu essayes.

Pas d’erreurs sur le page, en revanche dans le fichier log j’ai :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[[erreur]]
| [Wed May 03 20:08:02 2017] [error] [client 192.168.1.12] File does not exist: /var/www/favicon.ico
| [Wed May 03 20:08:02 2017] [error] [client 192.168.1.12] File does not exist: /var/www/ajax_libs_jquery, referer: http://192.168.1.11/connexion.php
| [Wed May 03 20:08:02 2017] [error] [client 192.168.1.12] File does not exist: /var/www/img/flech2e.png, referer: http://192.168.1.11/connexion.php
| [Wed May 03 20:17:25 2017] [error] [client 192.168.1.12] File does not exist: /var/www/ajax_libs_jquery, referer: http://192.168.1.11/connexion.php
| [Wed May 03 20:17:25 2017] [error] [client 192.168.1.12] File does not exist: /var/www/img/flech2e.png, referer: http://192.168.1.11/connexion.php
| sh: 1: /usr/sbin/sendmail: not found
| sh: 1: /usr/sbin/sendmail: not found
| sh: 1: /usr/sbin/sendmail: not found
| sh: 1: /usr/sbin/sendmail: not found
| sh: 1: /usr/sbin/sendmail: not found
| sh: 1: /usr/sbin/sendmail: not found
| [Wed May 03 20:24:13 2017] [error] [client 66.249.***.***] File does not exist: /var/www/favicon.ico
| sh: 1: /usr/sbin/sendmail: not found
| [Wed May 03 20:24:22 2017] [error] [client 192.168.1.12] File does not exist: /var/www/favicon.ico, referer: http://192.168.1.11/mailtest.php
| [Wed May 03 20:30:15 2017] [notice] caught SIGTERM, shutting down
| [Wed May 03 20:30:17 2017] [notice] Apache/2.2.22 (Debian) PHP/5.4.45-0+deb7u7 configured -- resuming normal operations
| sh: 1: /usr/sbin/sendmail: not found
+0 -0

Bon et bien je ne sais pas trop, essaye éventuellement un phpinfos() pour voir si c’est indiqué dedans afin de voir si PHP a bien redémarré.

Sinon, je ne peux que te conseiller de passer par une librairie. J’ai déjà travaillé avec PHPMailer et il est pas mal.

Dans ton php.ini tu ne précises pas que tu dois utiliser ssl. Or justement, gmail ne supporte que ça. 😟

Sans parler de ’sendmail’ que php à l’air d’utiliser et qui est introuvable sur ta machine. (╥_╥)

Le plus simple me semble, comme mon VDD, d’utiliser une lib externe.

SO propose : http://stackoverflow.com/questions/712392/send-email-using-the-gmail-smtp-server-from-a-php-page

Good Luck ! 🍪

+0 -0

Bon, j’ai testé avec la lib PHPMailer et j’ai ça :

Echec de l’envoi du mail, Erreur: Could not instantiate mail function.

Avec ce code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// On va chercher la classe PHPMailer
require_once('framework/phpmailer/class.phpmailer.php');
// Création d'un nouvel objet $mail
$mail = new PHPMailer();
// Encodage
$mail->CharSet = 'UTF-8';
// Corp de notre email
$body = "<p>Salut tout le <u>monde</u>,
voici un mail en <b>HTML</b></p>";
// Expediteur, adresse de retour et destinataire :
$mail->SetFrom("projet********@gmail.com", "Bee *****");
$mail->AddReplyTo("projet********@gmail.com", "Bee *****");
$mail->AddAddress("sebastien.****@gmail.com", "Sébastien *****");
// Sujet du mail
$mail->Subject = "Test d'envoi de mail avec PHPMailer";
// Le message
$mail->MsgHTML($body);
// Pièce jointe
//$mail->AddAttachment("images/phpmailer.gif");
// Envoi de l'email
if ( !$mail->Send() ) {
echo "Echec de l'envoi du mail, Erreur: " . $mail->ErrorInfo;
} else {
echo "Message envoyé!";
}
unset($mail);

?> 

Et la config php.ini suivante :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[mail function]
; For Win32 only.
; http://php.net/ 
SMTP = smtp.gmail.com
; http://php.net/smtp-port
smtp_port = 587

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = projet********@gmail.com
username = projet********@gmail.com
password = *

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =
; Log mail to syslog (Event Log on Windows).
;mail.log = syslog

et :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[mail function]
; For Win32 only.
; http://php.net/ 
SMTP = smtp.gmail.com
; http://php.net/smtp-port
smtp_port = 587

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = projet********@gmail.com
;username = projet********@gmail.com
;password = *

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =
; Log mail to syslog (Event Log on Windows).
;mail.log = syslog

et puis avec ça aussi :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[mail function]
; For Win32 only.
; http://php.net/ 
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = me@example.com 

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =
; Log mail to syslog (Event Log on Windows).
;mail.log = syslog
+0 -0

~~PHPMailer n’utilise pas php.ini. (Comportement par défault).

Tu dois donc lui préciser les paramètres de connection

1
2
3
4
5
$mail->IsSMTP();                           // telling the class to use SMTP
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server

Tirer de SO. Avant ou après le CharSet.

+2 -0

RE, Bon, après quelques autres erreurs corrigées, je vois le bout, mais j’ai cette erreur la :

Echec de l’envoi du mail, Erreur: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Je pense à une erreur d’authentification :

2017-05-13 09:57:42 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP m191sm4630658wmg.30 - gsmtp 2017-05-13 09:57:42 CLIENT -> SERVER: EHLO ********.hopto.org 2017-05-13 09:57:42 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [***.***.***.***] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-CHUNKING 250 SMTPUTF8 2017-05-13 09:57:42 CLIENT -> SERVER: AUTH LOGIN 2017-05-13 09:57:42 SERVER -> CLIENT: 334 VXNlcm5hbWU6 2017-05-13 09:57:42 CLIENT -> SERVER: 2017-05-13 09:57:42 SERVER -> CLIENT: 334 UGFzc3dvcmQ6 2017-05-13 09:57:42 CLIENT -> SERVER: 2017-05-13 09:57:42 SERVER -> CLIENT: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials m191sm4630658wmg.30 - gsmtp 2017-05-13 09:57:42 SMTP ERROR: Password command failed: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials m191sm4630658wmg.30 - gsmtp 2017-05-13 09:57:42 SMTP Error: Could not authenticate. 2017-05-13 09:57:42 CLIENT -> SERVER: QUIT 2017-05-13 09:57:43 SERVER -> CLIENT: 221 2.0.0 closing connection m191sm4630658wmg.30 - gsmtp 2017-05-13 09:57:43 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting Echec de l’envoi du mail, Erreur: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte