web-dev-qa-db-fra.com

PHP la fonction mail ne termine pas l'envoi du courrier électronique

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = '[email protected]'; 
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    }
?>

J'ai essayé de créer un simple formulaire de courrier. Le formulaire lui-même se trouve sur ma page index.html, mais est soumis à une page séparée "Merci pour votre soumission", thankyou.php, où le code php ci-dessus est incorporé . Le code est parfaitement envoyé, mais n'envoie jamais de courrier électronique. s'il vous plaît aider.

414
user3818620

Ajouter un en-tête de courrier dans la fonction mail

$header = "From: [email protected]\r\n"; 
$header.= "MIME-Version: 1.0\r\n"; 
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$header.= "X-Priority: 1\r\n"; 

$status = mail($to, $subject, $message, $header);

if($status)
{ 
    echo '<p>Your mail has been sent!</p>';
} else { 
    echo '<p>Something went wrong, Please try again!</p>'; 
}
32
er.irfankhan11
  1. Essayez toujours d’envoyer des en-têtes dans la fonction mail.
  2. Si vous envoyez un courrier via localhost, définissez les paramètres smtp pour l'envoi de courrier.
  3. Si vous envoyez des messages via le serveur, vérifiez que la fonction d'envoi de courrier est activée sur votre serveur.
21
sonam gupta

utilisez-vous la configuration SMTP pour envoyer votre courrier électronique? essayez d'utiliser plutôt phpmailer. vous pouvez télécharger la bibliothèque à partir de https://github.com/PHPMailer/PHPMailer . J'ai créé mon email en envoyant de cette façon:

function send_mail($email, $recipient_name, $message='')
{
    require("phpmailer/class.phpmailer.php");

    $mail = new PHPMailer();

    $mail->CharSet="utf-8";
    $mail->IsSMTP();                                      // set mailer to use SMTP
    $mail->Host = "mail.example.com";  // specify main and backup server
    $mail->SMTPAuth = true;     // turn on SMTP authentication
    $mail->Username = "myusername";  // SMTP username
    $mail->Password = "p@ssw0rd"; // SMTP password

    $mail->From = "[email protected]";
    $mail->FromName = "System-Ad";
    $mail->AddAddress($email, $recipient_name);

    $mail->WordWrap = 50;                                 // set Word wrap to 50 characters
    $mail->IsHTML(true);                                  // set email format to HTML (true) or plain text (false)

    $mail->Subject = "This is a Sampleenter code here Email";
    $mail->Body    = $message;
    $mail->AltBody = "This is the body in plain text for non-HTML mail clients";    
    $mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
    $mail->addAttachment('files/file.xlsx');

    if(!$mail->Send())
    {
       echo "Message could not be sent. <p>";
       echo "Mailer Error: " . $mail->ErrorInfo;
       exit;
    }

    echo "Message has been sent";
}
17
oneDerer

Ajoutez simplement quelques en-têtes avant d'envoyer du courrier:

<?php 
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com'; 
$to = '[email protected]'; 
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html\r\n";
$headers .= 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

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

Et encore une chose. La fonction mail() ne fonctionne pas dans localhost. Téléchargez votre code sur un serveur et essayez.

14
user1258544

cela a fonctionné pour moi sur 000webhost en procédant comme suit:

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: ". $from. "\r\n";
$headers .= "Reply-To: ". $from. "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
$headers .= "X-Priority: 1" . "\r\n"; 

Entrez directement l'adresse email lors de l'envoi de l'email

mail('[email protected]', $subject, $message, $headers)

Utilisez '' et non ""

Ce code fonctionne mais l'e-mail a été reçu avec un décalage d'une demi-heure.

12
bat .t

Généralement, la fonction mail() est désactivée dans l'hébergement partagé . Une meilleure option consiste à utiliser SMTP. La meilleure option serait Gmail ou SendGrid.


SMTPconfig.php

<?php 
    $SmtpServer="smtp.*.*";
    $SmtpPort="2525"; //default
    $SmtpUser="***";
    $SmtpPass="***";
?>

SMTPmail.php

<?php
class SMTPClient
{

    function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
    {

        $this->SmtpServer = $SmtpServer;
        $this->SmtpUser = base64_encode ($SmtpUser);
        $this->SmtpPass = base64_encode ($SmtpPass);
        $this->from = $from;
        $this->to = $to;
        $this->subject = $subject;
        $this->body = $body;

        if ($SmtpPort == "") 
        {
            $this->PortSMTP = 25;
        }
        else
        {
            $this->PortSMTP = $SmtpPort;
        }
    }

    function SendMail ()
    {
        $newLine = "\r\n";
        $headers = "MIME-Version: 1.0" . $newLine;  
        $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  

        if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
        {
            fputs ($SMTPIN, "EHLO ".$HTTP_Host."\r\n"); 
            $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
            fputs($SMTPIN, "auth login\r\n");
            $talk["res"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpUser."\r\n");
            $talk["user"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpPass."\r\n");
            $talk["pass"]=fgets($SMTPIN,256);
            fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n"); 
            $talk["From"] = fgets ( $SMTPIN, 1024 ); 
            fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n"); 
            $talk["To"] = fgets ($SMTPIN, 1024); 
            fputs($SMTPIN, "DATA\r\n");
            $talk["data"]=fgets( $SMTPIN,1024 );
            fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\n".$headers."\n\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
            $talk["send"]=fgets($SMTPIN,256);
            //CLOSE CONNECTION AND EXIT ... 
            fputs ($SMTPIN, "QUIT\r\n"); 
            fclose($SMTPIN); 
            // 
        } 
        return $talk;
    } 
}
?>

contact_email.php

<?php 
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $to = "";
    $from = $_POST['email'];
    $subject = "Enquiry";
    $body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
    $SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
    $SMTPChat = $SMTPMail->SendMail();
}
?>
9
Karthik

Essayez ces deux thigs séparément et ensemble:

  1. retirer la if($_POST['submit']){}
  2. enlever $from (juste mon intestin)
9
vldfr

Si vous utilisez uniquement la fonction mail(), vous devez compléter le fichier de configuration.

Vous devez ouvrir l'extension de messagerie et définir le SMTP smtp_port, etc., et le plus important, votre nom d'utilisateur et votre mot de passe. Sans cela, le courrier ne peut pas être envoyé. En outre, vous pouvez utiliser la classe PHPMail pour envoyer. 

8
iatboy

Je pense que cela devrait faire l'affaire. Je viens d'ajouter un if(isset et une concaténation aux variables du corps pour séparer PHP du HTML.

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = '[email protected]'; 
    $subject = 'Customer Inquiry';
    $body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;

if (isset($_POST['submit'])) 
{
    if (mail ($to, $subject, $body, $from)) 
    { 
        echo '<p>Your message has been sent!</p>';
    } 
    else 
    { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
}

?>
7
Stephen M

Pour ceux qui découvrent que cela va de l'avant, je ne recommanderais pas d'utiliser mail. Il y a des réponses à ce sujet, mais pas le pourquoi.

La fonction mail de PHP n’est pas seulement opaque, elle repose entièrement sur le MTA que vous utilisez (par exemple, Sendmail) pour effectuer le travail. mail vous informera UNIQUEMENT si le MTA n'a pas accepté (par exemple, Sendmail était en panne lorsque vous avez essayé d'envoyer). Il ne peut pas vous dire si le courrier a réussi car il a été remis. En tant que tel (comme le précise la réponse de John Conde), vous devez maintenant manipuler les journaux du MTA et espérer qu'il en dira assez sur l'échec de la résolution du problème. Si vous êtes sur un hôte partagé ou n'avez pas accès aux journaux du MTA, vous n'avez pas de chance. Malheureusement, la plupart des installations de Vanilla pour Linux par défaut le traitent de cette façon. 

Une bibliothèque de courrier ( PHPMailer , Zend Framework 2+, etc.) fait quelque chose de très différent de mail. Ils ouvrent un socket directement au serveur de messagerie destinataire, puis envoient les commandes de courrier SMTP directement sur ce socket. En d'autres termes, la classe agit comme son propre MTA (notez que vous pouvez indiquer aux bibliothèques d'utiliser mail pour envoyer le courrier, mais je vous recommande fortement de ne pas le faire).

Cela signifie pour vous que vous pouvez alors voir directement les réponses du serveur de réception (dans PHPMailer, par exemple, vous pouvez activer la sortie de débogage ). Plus besoin de deviner si un courrier a échoué ou pourquoi.

Si vous utilisez SMTP (c’est-à-dire que vous appelez isSMTP()), vous pouvez obtenir une transcription détaillée de la conversation SMTP à l’aide de la propriété SMTPDebug.

Définissez cette option en incluant une ligne comme celle-ci dans votre script:

$mail->SMTPDebug = 2;

Vous bénéficiez également d'une meilleure interface. Avec mail, vous devez configurer tous vos en-têtes, pièces jointes, etc. Avec une bibliothèque, vous disposez d'une fonction dédiée pour le faire. Cela signifie également que la fonction exécute toutes les parties difficiles (comme les en-têtes).

7
Machavity

Vous pouvez utiliser config email par codeigniter, par exemple avec smtp (de manière simple):

$config = Array(
        'protocol' => 'smtp',
        'smtp_Host' => 'mail.domain.com', //your smtp Host
        'smtp_port' => 26, //default port smtp
        'smtp_user' => '[email protected]',
        'smtp_pass' => 'password',
        'mailtype' => 'html',
        'charset' => 'iso-8859-1',
        'wordwrap' => TRUE
);
$message = 'Your msg';
$this->load->library('email', $config);
$this->email->from('[email protected]', 'Title');
$this->email->to('[email protected]');
$this->email->subject('Header');
$this->email->message($message);

if($this->email->send()) 
{
   //conditional true
}

Cela fonctionne pour moi!

6

Essaye ça

<?php
$to = "[email protected], [email protected]";
$subject = "HTML email";

$message = "
    <html>
    <head>
       <title>HTML email</title>
    </head>
    <body>
      <p>This email contains HTML Tags!</p>
      <table>
        <tr>
         <th>Firstname</th>
         <th>Lastname</th>
        </tr>
        <tr>
          <td>John</td>
          <td>Doe</td>
        </tr>
      </table>
    </body>
    </html>";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

// More headers
$headers .= 'From: <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";

mail($to,$subject,$message,$headers);
?> 
5
Ganga Reddy
$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
    $subject = $name;
    // To send HTML mail, the Content-type header must be set.
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From:' . $email. "\r\n"; // Sender's Email
    //$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
    $template = '<div style="padding:50px; color:white;">Hello ,<br/>'
        . '<br/><br/>'
        . 'Name:' .$name.'<br/>'
        . 'Email:' .$email.'<br/>'
        . '<br/>'
        . '</div>';
    $sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
    // Message lines should not exceed 70 characters (PHP rule), so wrap it.
    $sendmessage = wordwrap($sendmessage, 70);
    // Send mail by PHP Mail Function.
    mail($reciver, $subject, $sendmessage, $headers);
    echo "Your Query has been received, We will contact you soon.";
} else {
    echo "<span>* invalid email *</span>";
}
5
Chirag patel

Essaye ça 

if ($_POST['submit']) {
    $success= mail($to, $subject, $body, $from);
    if($success)
    { 
        echo '
        <p>Your message has been sent!</p>
        ';
    } else { 
        echo '
        <p>Something went wrong, go back and try again!</p>
        '; 
    }
}
3
Gaurav Sirauthiya

Si vous rencontrez des difficultés pour envoyer des e-mails avec PHP, envisagez une alternative telle que PHPMailer ou SwiftMailer .

J'utilise habituellement SwiftMailer chaque fois que j'ai besoin d'envoyer des mails avec PHP.


Utilisation de base:

require 'mail/Swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('[email protected]' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('[email protected]' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');

if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
    echo json_encode([
        "status" => "OK",
        "message" => 'Your message has been sent!'
    ], JSON_PRETTY_PRINT);
} else {
    echo json_encode([
        "status" => "error",
        "message" => 'Oops! Something went wrong!'
    ], JSON_PRETTY_PRINT);
}

Voir la documentation officielle pour plus d'informations sur l'utilisation de SwiftMailer.

2
John Slegers

Peut-être que le problème vient de la configuration du serveur de messagerie, pour éviter ce type de problème ou vous n'avez pas à vous soucier du problème du serveur de messagerie, je vous recommande d'utiliser PHPMailer , c'est un plugin qui a tout le nécessaire pour envoyer mail, la seule chose à prendre en compte est d’avoir le port SMTP (Port: 25 et 465), activé

require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
       //Server settings
       $mail->SMTPDebug = 0;                                 
       $mail->isSMTP();                                      
       $mail->Host = 'smtp.gmail.com';  
       $mail->SMTPAuth = true;                               
       $mail->Username = '[email protected]';                 
       $mail->Password = 'contrasenia';                           
       $mail->SMTPSecure = 'ssl';                          
       $mail->Port = 465;                                    

       //Recipients
       $mail->setFrom('[email protected]', 'my name');    
       $mail->addAddress('[email protected]');               

       //Attachments
       $mail->addAttachment('optional file');         // Add files, is optional

       //Content
       $mail->isHTML(true);// Set email format to HTML
       $mail->Subject = utf8_decode("subject");
       $mail->Body    = utf8_decode("mail content");
       $mail->AltBody = '';
       $mail->send();
     }
     catch (Exception $e){
        $error = $mail->ErrorInfo;
     }
2
Jack Ch

Pour ceux qui ne veulent pas utiliser d’expéditeurs externes et qui souhaitent envoyer () sur un serveur Linux dédié.

La manière dont php utilise les mails est décrite dans php.ini dans la section [mail function]. Le paramètre sendmail-path décrit comment sendmail est appelé. La valeur par défaut est sendmail -t -i, donc si vous utilisez sendmail -t -i < message.txt dans la console linux, vous avez terminé. Vous pouvez également ajouter mail.log à debug et vous assurer que mail () est réellement appelé.

Différents MTA peuvent implémenter sendmail, ils créent simplement un lien symbolique vers leurs fichiers binaires portant ce nom. Par exemple, dans Debian, postfix est utilisé par défaut. Configurez votre MTA pour envoyer du courrier et testez-le à partir de la console avec sendmail -v -t -i < message.txt. Le fichier message.txt doit contenir tous les en-têtes d'un message et un corps, les adresses de destination pour l'enveloppe seront extraites de l'en-tête To:. Exemple:

From: [email protected]
To: [email protected]
Subject: Test mail via sendmail.

Text body.

Je préfère utiliser ssmtp en tant que MTA parce que c'est simple et qu'il n'est pas nécessaire d'exécuter le démon avec les ports ouverts. ssmtp ne convient que pour l'envoi de courrier depuis l'hôte local, il peut également envoyer un courrier électronique authentifié via votre compte sur un service de messagerie public. Installez ssmtp et éditez config /etc/ssmtp/ssmtp.conf. Pour pouvoir également recevoir des messages système locaux sur des comptes Unix (alertes à la racine à partir de tâches cron, par exemple), configurez le fichier /etc/ssmtp/revaliases.

Voici ma config pour mon compte sur Yandex mail:

[email protected]
mailhub=smtp.yandex.ru:465
FromLineOverride=YES
UseTLS=YES
[email protected]
AuthPass=password
2
user3132194

Assurez-vous que Sendmail est installé sur votre serveur.

Si vous avez vérifié votre code et vérifié qu’il n’y avait aucun problème, accédez à/var/mail et vérifiez si ce dossier est vide.

S'il est vide, vous devrez faire un:

Sudo apt-get install sendmail

si vous êtes sur un serveur Ubuntu.

2
Daniel

Tout d'abord,

Vous aurez peut-être plusieurs paramètres pour la fonction mail () .... Vous pouvez avoir 5 max. mail(to,subject,message,headers,parameters); Pour ce qui est de la variable $from, elle devrait automatiquement provenir de votre hébergeur Web si vous utilisez linux cPanel. Il vient automatiquement de votre nom d'utilisateur et de votre adresse IP cPanel.

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com'; 
$to = '[email protected]'; 
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

Assurez-vous également que vous avez le bon ordre de variables dans votre fonction mail () . La mail($to,$subject,$message,etc.) dans cet ordre, sinon il y a une chance que cela ne fonctionne pas . Dites-moi si cela aide ...

1
aidangig

Vous pouvez utiliser les fonctions empty () et isset (). Si vous voulez le faire fonctionner avec différents fichiers, modifiez simplement le action='yourphp.php' en html que je vous donne et store the PHP script en ce fichier yourphp.php. Vous devez également modifier votre index.html en index.php pour activer la fonctionnalité PHP. 

PHP 

<?php

    error_reporting(0);
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = '[email protected]'; 
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";


    if ($_POST['submit']){
                if (!(empty($_POST['name']))) {
                        if (!(empty($_POST['email']))){
                            if (!(empty($_POST['message']))){
                                mail ($to, $subject, $body, $from);
                                echo '<p>Your message has been sent!</p>';
                            }else{
                                echo '<p>Fill your message please.</p>';}
                        }else {
                            echo '<p>Fill your email please.</p>';}
                }else{
                    echo '<p>Fill your name please.</p>';}              
    }else{
            echo '<p>Fill the form.</p>';}
?>

HTML

<html>
    <form method="post" action="?">
        <table>
            <tr><td>Name</td><td><input type='text' name='name' id='name'/></td></tr>
            <tr><td>Email</td><td><input type='text' name='email' id='email'/></td></tr>
            <tr><td>Message</td><td><input type='text' name='message' id='message'/></td></tr>
            <tr><td></td><td><input type='submit' name='submit' id='submit'/></td></tr>
        </table>
    </form>
</html>

Meilleures salutations!

1
Bishop

Cela n'affectera qu'un petit nombre d'utilisateurs, mais j'aimerais que ce soit documenté pour cette petite poignée. Ce membre de cette petite poignée a passé 6 heures à résoudre un script de courrier électronique PHP en raison de ce problème. 

Si vous vous rendez dans une université utilisant XAMPP sur www.AceITLab.com, vous devez savoir ce que notre professeur ne nous a pas dit: le pare-feu AceITLab (et non le pare-feu Windows) bloque MercuryMail dans XAMPP. Vous devrez utiliser un client de messagerie alternatif, pear travaille pour nous. Vous devrez envoyer à un compte Gmail avec des paramètres de sécurité faibles. 

Oui, je sais, cela est totalement inutile pour les emails du monde réel. Cependant, d'après ce que j'ai vu, les milieux universitaires et le monde réel ont souvent peu de choses en commun. 

1
TonyLuigiC

sendmail L'installation pour Debian 10.0.0 ('Buster') était en fait triviale!

php.ini

[mail function]
sendmail_path=/usr/sbin/sendmail -t -i
; (Other directives are mostly windows)

Standard sendmail installation du paquet (autorisant l'envoi):

su -                                        # Install as user 'root'
dpkg --list                                 # Is install necessary?
apt-get install sendmail sendmail-cf m4     # Note multiple package selection
sendmailconfig                              # Respond all 'Y' for new install

Diverses commandes utiles:

which sendmail                              # /usr/sbin/sendmail
which sendmailconfig                        # /usr/sbin/sendmailconfig
man sendmail                                # Documentation 
systemctl restart sendmail                  # As and when required  

Vérification (de capacité à envoyer)

echo "Subject: sendmail test" | sendmail -v <yourEmail>@gmail.com

Ci-dessus a pris environ 5 minutes.

Puis j'ai perdu 5 heures ...
N'OUBLIEZ PAS DE VÉRIFIER VOTRE DOSSIER DE SPAM !!!!

0
Bad Loser

Vous pouvez utiliser libmail: http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=en

include "libmail.php";
$m = new Mail(); // create the mail
$m->From( $_POST['form'] );
$m->To( $_POST['to'] );
$m->Subject( $_POST['subject'] );
$m->Body( $_POST['body'] );
$m->Cc( $_POST['cc']);
$m->Priority(4);
//  attach a file of type image/gif to be displayed in the message if possible
$m->Attach( "/home/leo/toto.gif", "image/gif", "inline" );
$m->Send(); // send the mail
echo "Mail was sent:"
echo $m->Get(); // show the mail source
0
Salim Ibrogimov

Si votre système sendmail fonctionne, votre code doit être modifié comme suit:

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    $header =" 
Content-Type: text/html; charset=UTF-8\r\n
MIME-Version: 1.0\r\n
From: \"$name\" <$email>\r\n
Reply-To: [email protected]\r\n
X-Mailer: yoursite.com mailer\r\n
";

    $to = '"Contact" <[email protected]>'; 
    $subject = 'Customer Inquiry';
    $body =<<<EOB
<!DOCTYPE html>
<html>
    <body>
        $message
    </body>
</html>
EOB;

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $header) !== false) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    }
?>

Cela vous permet d'envoyer des courriels HTML.

D'intérêt notable:

  1. nous avons construit une chaîne d’en-tête multilignes (chaque ligne étant séparée par\r\n);
  2. nous avons ajouté Content-type pour que nous retournions le code HTML afin que vous puissiez composer de meilleurs emails (vous pouvez ajouter le code HTML de votre choix, y compris CSS, à votre message comme vous le feriez dans une page HTML).

Remarque: La syntaxe <<<EOB nécessite que le dernier marqueur EOB commence par le début de la ligne et ne comporte ni espace ni caractère après le point-virgule.

0
Stéphane de Luca

Si vous exécutez ce code sur un serveur local (votre ordinateur à des fins de développement, par exemple), il n'enverra pas l'e-mail au destinataire. Ce qui va arriver, c'est qu'il va créer un fichier .txt dans un dossier nommé mailoutput

Si vous utilisez un service gratuit tel que 000webhost ou hostinger, ces fournisseurs de services désactivent la fonction mail() pour empêcher toute utilisation involontaire de la messagerie frauduleuse, du spam, etc.

Si vous êtes certain que le fournisseur de service prend en charge la fonction mail (), vous pouvez consulter ce manuel PHP pour plus de détails, PHP mail ()

Pour vérifier si votre service d’hébergement supporte la fonction mail (), essayez d’exécuter ce code, (n'oubliez pas de changer l’adresse email du destinataire)

<?php
    $to      = '[email protected]';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: [email protected]' . "\r\n" .
        'Reply-To: [email protected]' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);
?>

J'espère que cela a aidé.

0
Ronald P Mathews