Souci d'envoi de mail d'activation pour confirmation

Fermé
Oseer Messages postés 17 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 19 avril 2018 - 7 févr. 2017 à 07:58
 oseer - 12 févr. 2017 à 21:02
Bonjour Chers tous,
j'ai quelques soucis lors de l'envoie du mail d'activation comme ceci :
Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in C:\xampp\htdocs\tutos\social_network\register.php on line 57
Mail d'activation envoye!

STP merci de m'aider. Il m'affiche Mail d'activation envoye! après le message d'erreur, et je ne reçois aucun mail dans ma boite mail

Cordialement

4 réponses

Bonjour,
peut-on avoir le code permettant l'envois du mail ?

Merci.
0
Oseer Messages postés 17 Date d'inscription mercredi 5 août 2015 Statut Membre Dernière intervention 19 avril 2018
7 févr. 2017 à 16:10
<?php
require('config/database.php');
require('includes/functions.php');
require('includes/constants.php');


//Si le formulaire a été soumis
if(isset($_POST['register'])){

//Si tous les champs ont été remplis
if(not_empty(['name', 'pseudo', 'email', 'password', 'password_confirm'])){

$errors = []; //Tableau contenant l'ensemble des erreurs


extract($_POST);

if(mb_strlen($pseudo) <3) {
$errors[] = "Pseudo trop court! (Minimum 3 caractères)";
}

if(! filter_var($email, FILTER_VALIDATE_EMAIL)){
$errors[]= "Adresse email invalide!";
}

if(mb_strlen($password) <6) {
$errors[] = "Mot de passe trop court! (Minimum 6 caractères)";
} else{
if($password != $password_confirm){
$errors[] = "Les deux mot de passe trop ne concordent pas!";
}
}

if(is_already_in_use('pseudo', $pseudo, 'users')){
$errors[] = "Pseudo déjà utilisé!";
}

if(is_already_in_use('email', $email, 'users')){
$errors[] = "Adresse Email déjà utilisé!";
}

if(count($errors) == 0){
//Envoyer un mail d'activation
$to = $email;
$subject = WEBSITE_NAME. " - ACTIVATION DE COMPTE";
$token = sha1($pseudo.$email.$password);


ob_start();
require('templates/emails/activation.tmpl.php');
$content = ob_get_clean();

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

mail($to, $subject, $content, $headers);

//Informer l'utilisateur pour qu'il vérifie sa boite de reception
echo "Mail d'activation envoye!";


}



}else {
$errors[] = "Veuillez SVP remplir tous les champs!";
}
}
?>
<?php require("views/register.view.php"); ?>


Selon le message d'erreur, il s'agit de cette ligne en évidence : mail($to, $subject, $content, $headers);
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
7 févr. 2017 à 18:44
Bonjour,

Le message d'erreur est pourtant clair ...

"sendmail_from" not set in php.ini or custom "From:" header missing

-> Soit tu paramètres le php.ini de ton XAMPP pour y paramétrer la variable sendmail_from ....
-> Soit, tu la définit dans les HEADERS que tu envoies dans ta fonction mail.

Comme indiqué dans le manuel php de la fonction mail :
https://www.php.net/manual/fr/function.mail.php

additional_headers (optionnel)

Chaîne à insérer à la fin des en-têtes du mail.

Ce paramètre est typiquement utilisé pour ajouter des en-têtes supplémentaires (From, Cc et Bcc). Les en-têtes supplémentaires doivent être séparés par un caractère CRLF (\r\n). Si des données externes sont utilisées pour composer cet en-tête, elles doivent être d'abord nettoyées afin de ne pas injecter des données non désirées dans les en-têtes.

Note:

Lors de l'envoi d'un mail, le mail doit contenir un en-tête From. Il peut être défini par le paramètre additional_headers, ou un par défaut peut être défini dans le php.ini.

Ne pas faire ceci causera un message d'erreur similaire à Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. L'en-tête From, sous Windows, définit également l'en-tête Return-Path.

Note:

Si le message n'est pas reçu, essayez d'utiliser uniquement un caractère LF (\n). Quelques agents de transfert de mail Unix (par exemple » qmail) remplacent le caractère LF par le caractère CRLF automatiquement (ce qui revient à doubler le caractère CR si le caractère CRLF est utilisé). Ceci doit être un dernier recours car cela ne correspond pas à la » RFC 2822.




Tu peux donc mettre l'info dans le headers de la fonction mail, comme par exemple :
$headers =  'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'From: Your name <info@address.com>' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
0
ça marche maintenant !!!!!!!! Je reçois les mails d'activations sans blem
Merciii à toi captain-coder .
0
J'ai encore une autre préoccupation au niveau de SHA1
<?php
session_start();
require "config/database.php";
require "includes/functions.php";


if(!empty($_GET['p']) &&
is_already_in_use('pseudo', $_GET['p'], 'users')
&& !empty($_GET['token'])
){
$pseudo = $_GET['p'];
$token = $_GET['token'];

$q = $db->prepare('SELECT email, password FROM users WHERE pseudo = ?');
$q->execute([$pseudo]);

$data = $q->fetch(PDO::FETCH_OBJ);

$token_verif = sha1($pseudo.$data->email.$data->password);

if($token == $token_verif){

$q = $db->prepare("UPDATE users SET active='1' WHERE pseudo = ?");
$q->execute([$pseudo]);

redirect('login.php');
} else {
//die($token);
//die($token_verif);
set_flash('Parametres Invalides', 'danger');
redirect('index.php');
}

Mes 2 token ($token == $token_verif) ne concordent pas donc j'arrive pas à être rediriger sur la page login.php
0