170 votes

Envoi d'e-mails avec PHP à partir d'un serveur SMTP

$from = "someonelse@example.com";
$headers = "From:" . $from;
echo mail ("borutflis1@gmail.com" ,"testmailfunction" , "Oj",$headers);

J'ai des difficultés à envoyer des e-mails en PHP. Je reçois une erreur : SMTP server response: 530 SMTP authentication is required .

J'avais l'impression que l'on pouvait envoyer des e-mails sans SMTP pour vérifier. Je sais que ce courrier sera probablement filtré, mais cela n'a pas d'importance pour le moment.

[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 = someonelse@example.com

C'est la configuration dans le php.ini fichier. Comment dois-je configurer le SMTP ? Existe-t-il des serveurs SMTP qui ne nécessitent aucune vérification ou dois-je configurer moi-même un serveur ?

218voto

Ivo Pereira Points 1107

Lorsque vous envoyez un courrier électronique par le biais d'un serveur qui nécessite une authentification SMTP, vous devez vraiment le spécifier, et définir l'hôte, le nom d'utilisateur et le mot de passe (et peut-être le port s'il n'est pas celui par défaut - 25).

Par exemple, j'utilise habituellement PHPMailer avec des paramètres similaires à ceux-ci :

$mail = new PHPMailer();

// Settings
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com";    // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username";            // SMTP account username example
$mail->Password   = "password";            // SMTP account password example

// Content
$mail->isHTML(true);                       // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$mail->send();

Vous pouvez trouver plus d'informations sur PHPMailer ici : https://github.com/PHPMailer/PHPMailer

67voto

Dipesh Parmar Points 17016
<?php
ini_set("SMTP", "aspmx.l.google.com");
ini_set("sendmail_from", "YOURMAIL@gmail.com");

$message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com";

$headers = "From: YOURMAIL@gmail.com";

mail("Sending@provider.com", "Testing", $message, $headers);
echo "Check your email now....&lt;BR/>";
?>

ou, pour plus de détails, continuer à lire .

55voto

txyoji Points 2760

Pour les utilisateurs d'Unix, mail() utilise en fait Sendmail pour envoyer un courriel. Au lieu de modifier l'application, vous pouvez modifier l'environnement. msmtp est un client SMTP avec une syntaxe CLI compatible avec Sendmail, ce qui signifie qu'il peut être utilisé à la place de Sendmail. Il ne nécessite qu'une petite modification de votre php.ini.

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"

Ainsi, même la modeste fonction mail() peut fonctionner avec la qualité SMTP. C'est super utile si vous essayez de connecter une application existante à des services de messagerie comme sendgrid ou mandrill sans modifier l'application.

20voto

George Points 148

Le problème est que PHP mail() a une fonctionnalité très limitée. Il existe plusieurs façons d'envoyer du courrier depuis PHP.

  1. mail() utilise un serveur SMTP sur votre système. Il existe au moins deux serveurs que vous pouvez utiliser sous Windows : hMailServer y xmail . J'ai passé plusieurs heures à les configurer et à les mettre en place. Le premier est plus simple à mon avis. Pour l'instant, hMailServer fonctionne sous Windows 7 x64.
  2. mail() utilise un serveur SMTP sur une machine distante ou virtuelle avec Linux. Bien sûr, les vrais services de messagerie comme Gmail n'autorisent pas la connexion directe sans justificatifs ou clés. Vous pouvez configurer une machine virtuelle ou en utiliser une située sur votre réseau local. La plupart des distributions linux ont un serveur de messagerie prêt à l'emploi. Configurez-le et amusez-vous. J'utilise exim4 par défaut sur Debian 7 qui écoute son interface LAN.
  3. Les bibliothèques de diffusion utilisent des connexions directes. Les librairies sont plus faciles à mettre en place. J'ai utilisé SwiftMailer et il envoie parfaitement le courrier depuis le compte Gmail. Je pense que PHPMailer est également très bon.

Quel que soit votre choix, je vous recommande d'utiliser une couche d'abstraction. Vous pouvez utiliser la bibliothèque PHP sur votre machine de développement fonctionnant sous Windows et simplement mail() sur une machine de production sous Linux. La couche d'abstraction vous permet d'interchanger les pilotes de messagerie en fonction du système sur lequel votre application est exécutée. Créer une couche d'abstraction MyMailer ou l'interface avec une classe abstraite send() méthode. Hériter de deux classes MyPhpMailer y MySwiftMailer . Mettre en œuvre send() de manière appropriée.

20voto

Bolli Points 708

Voici une façon de le faire avec PHP PEAR

// Pear Mail Library
require_once "Mail.php";

$from = '<your@mail.com>'; //change this to your email address
$to = '<someone@mail.com>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => 'your@gmail.com', //your gmail account
        'password' => 'snip' // your password
    ));

// Send the mail
$mail = $smtp->send($to, $headers, $body);

//check mail sent or not
if (PEAR::isError($mail)) {
    echo '<p>'.$mail->getMessage().'</p>';
} else {
    echo '<p>Message successfully sent!</p>';
}

Si vous utilisez le SMTP de Gmail, n'oubliez pas d'activer le SMTP dans votre compte Gmail, dans la rubrique "Paramètres".

EDIT : Si vous ne trouvez pas Mail.php sur debian/ubuntu vous pouvez installer php-pear avec

sudo apt install php-pear

Ensuite, installez l'extension de courrier :

sudo pear install mail
sudo pear install Net_SMTP
sudo pear install Auth_SASL
sudo pear install mail_mime

Ensuite, vous devriez être en mesure de le charger en utilisant simplement require_once "Mail.php" sinon il se trouve ici : /usr/share/php/Mail.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X