Comment modifier ce script pour utiliser SMTP à la place de

new2php
Invité n'ayant pas de compte PHPfrance

16 Juin 2011, 13:53

Bonjour La France :D
J'ai un annuaire de sites web dont le fichier mailer.php est ci-dessous. Vu que ça ne me permet pas d'envoyer les e-mails ou la newsletter sous mon hébergeur, je voudrais le modifier pour utiliser "SMTP= localhost". Je précise bien que mes connaissances sont très réduites en PHP, alors s'il vous plait aidez_moi. Merci d'avance
version de PHP: 5.2.6
version de MySQL: 5.0.44
version de Template Lite: 2.10

Code : Tout sélectionner

<?php

class Mailer extends Model
{
    private static $instance = null;
    private $adminEmail;
    private $inboxDebug = false;
    private $sendRealEmail = true;
    private $charset = "UTF-8";

    /**
     * @return Mailer
     */

    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    function __construct()
    {
        parent::__construct();

        $c = new Criteria();
        $c->add("role", "administrator");
        $c->setLimit(1);
        $admin = $this->user->find($c, "email");
        $this->adminEmail = $admin->email;
    }

    function getAdminEmail()
    {
        return $this->adminEmail;
    }

    function sendAdminNotification($site)
    {
        $message = $this->customMessage->findByPk("submitSite");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function sendEmailToAdmin($subject, $message, $fromEmail = "")
    {
        return $this->sendEmail($this->adminEmail, $subject, $message, $fromEmail);
    }

    function replaceTags($message, $site = null)
    {
        $replacements = array("[name of directory]"     => Config::get("siteTitle"),
                              "[url of your directory]" => Config::get("siteRootUrl"));
                             
        if ($site) {
                             
            $this->site->attachParents($site);
            $detailsUrl = AppRouter::getObjectUrl($site, "siteDetails", true);

            $category = $this->category->findByPk($site->categoryId, "name");
            $siteDescription = (utf8_strlen($site->description) > 100) ? utf8_substr($site->description, 0, 100) : $site->description;

            $replacements += array(
                "[site name]"               => $site->siteTitle,
                "[name of the category]"    => $category->name,
                "[url site details]"        => $detailsUrl,
                "[url site]"                => $site->url,
                "[description of the site]" => $siteDescription,
                "[site type]"               => ($site->siteType == "basic") ? _t("Free") : _t("Privilege"));
        }

        $message = strtr($message, $replacements);

        return $message;
    }

    function sendSiteStateUpdate($webmasterEmail, $site, $subject = false, $description = false)
    {
        switch ($site['status']) {
            case "validated":
                $messageId = "validateSite";
                break;

            case "refused":
                $messageId = "refuseSite";
                break;

            case "banned":
                $messageId = "banSite";
                break;
        }

        static $cachedMessages = array();

        if (!isset($cachedMessages[$messageId])) {
            $cachedMessages[$messageId] = $this->customMessage->findByPk($messageId);
        }

        $message = $cachedMessages[$messageId];

        if (!$description) {
            $description = $message->description;
        }

        $description = $this->replaceTags($description, $site);

        if (!$subject) {
            $subject = $message->title;
        }

        $this->sendEmail($webmasterEmail, $subject, $description);

    }

    function sendNewsletterTaskFinished()
    {
        $this->sendEmailToAdmin(_t('Sending the newsletter is finished successfully.'), _t('Sending the newsletter is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendSiteBacklinkTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The search for backlinks is finished successfully.'), _t('The search for backlinks is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendDuplicateContentTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The search for duplicate content is finished successfully.'), _t('The search for duplicate content is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendSiteThumbTaskFinished()
    {
        $this->sendEmailToAdmin(_t('The updating of thumbs is finished successfully.'), _t('The updating of thumbs is finished successfully.') . _t('You can go in your administration for further informations.'));
    }

    function sendWebmasterNotification($site, $webmasterEmail)
    {
        $message = $this->customMessage->findByPk("webmasterSubmitSite");
        $this->sendEmail($webmasterEmail, $message->title, $this->replaceTags($message->description, $site));
    }

    function sendEmailConfirmation($messageId, $email, $confirmLink)
    {
        $message = $this->customMessage->findByPk($messageId);
        $message->description = str_replace("[confirm link]", $confirmLink, $message->description);
        $this->sendEmail($email, $message->title, $this->replaceTags($message->description));
    }

    function sendLostPassword($userEmail, $newPassword)
    {
        $this->sendEmail($userEmail, _t('Annuaire - new webmaster password'), _t('Your new password is') . ' ' . $newPassword);
    }

    function sendContactEmailToUser($email, $title, $text, $fromEmail)
    {
        $message = $this->customMessage->findByPk("webmasterContact");

        $text = str_replace(array("[message]", "[sender email]"),
                            array($text, $fromEmail),
                            $message->description);

        $this->sendEmail($email, $title, $text);
    }

    function sendNewCommentNotificationToAdmin($site)
    {
        $message = $this->customMessage->findByPk("newComment");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function sendNewSiteProblemNotificationToAdmin($site)
    {
        $message = $this->customMessage->findByPk("newSiteProblem");
        $this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
    }

    function createMailHeaders($from)
    {
        $mailheaders = "From: $from\n";
        $mailheaders .= "Reply-To: $from\n";
        $mailheaders .= "MIME-version: 1.0\n";
        $mailheaders .= "Content-type: text/html; charset=" . $this->charset . "\n";

        return $mailheaders;
    }

    function sendEmail($email, $subject, $text, $fromEmail = "")
    {
        if ($fromEmail == "") {
            $fromEmail = $this->adminEmail;
        }
        $headers = $this->createMailHeaders($fromEmail);

        $specialChars = array('Ŕ','Á','Â','Ă','Ä','Ĺ','Ć','ŕ','a','á','â','ă','ä','ĺ','ć','Č','É','Ę','Ë','č','e','é','ę','ë','e','Ě','Í','Î','Ď','ě','í','î','ď','Ň','Ó','Ô','Ő','Ö','Ř','ň','ó','ô','ő','ö','ř','Ů','Ú','Ű','Ü','ů','ú','ű','ü','ß','Ç','ç','Đ','đ','Ń','ń','Ţ','ţ','Ý' );
        $normalChars  = array('A','A','A','A','A','A','A','a','a','a','a','a','a','a','a','E','E','E','E','e','e','e','e','e','e','I','I','I','I','i','i','i','i','O','O','O','O','O','O','o','o','o','o','o','o','U','U','U','U','u','u','u','u','B','C','c','D','d','N','n','P','p','Y' );
        $subject = str_replace($specialChars, $normalChars, $subject);

        if ($this->inboxDebug) {
            $str = "<hr>";
            $str .= "<b>Time</b> " . date("Y-m-d G.i:s") . "<br>";
            $str .= "<b>Email:</b> $email<br>";
            $str .= "<b>Topic:</b> $subject<br>";
            $str .= "<b>Text:</b> $text<br>";
            $str .= "<b>Headers:</b> $headers<br>";

            $fp = fopen(CODE_ROOT_DIR . "inbox.html", "a");
            fwrite($fp, $str);
            fclose($fp);
        }

        if ($this->sendRealEmail) {
            @mail($email, $subject, $text, $headers);
        }

        return true;
    }
}

Petit nouveau ! | 5 Messages

16 Juin 2011, 13:58

:oops: , Désolé d'avoir envoyé le message ci-dessus avant de m'être connecté, pourtant je venais de m'inscrire au forum; alors mon pseudo est taratata et la question est de modifier le script pour utiliser SMTP à la place de la fonction php mail()

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 7661 Messages

16 Juin 2011, 14:11

salut,

a tu essayé des classes d'envoi de mail, tel phpmailer ou autre ?
il y a aussi la classe pear mail http://pear.php.net/package/Mail



@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

16 Juin 2011, 18:13

Bonsoir Moogli :)
Je viens juste de mettre un dossier "phpmailer" dans le répertoire de l'annuaire. Il contient les fichiers class.phpmailer + class.smtp + phpmailer.lang-fr.
J'ai mis au début de mon script :

Code : Tout sélectionner

require("phpMailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();                                 
$mail->Host = "localhost";               
$mail->Port  =  "25";

et je n'ai rien reçu dans ma boite pourtant le panneau admin indique qu'un message a bien été envoyé.
Pourtant phpmailer fonctionne bien avec un formulaire en php que j'ai mis en ligne dans le même répertoire.

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 7661 Messages

16 Juin 2011, 19:12

a tu vu http://phpmailer.worxware.com/index.php?pg=exampleasmtp ?

surtout l'exemple a la fin pour la récupération des erreurs ?

est tu sur que le serveur local possède un serveur smtp ? (si c'était le cas il serait configuré sur php et donc tu fait la même chose ?)

sinon montre nous le complet (si tu clique sur le bouton php juste au dessus de la zone de texte tu aura la balise bbcode directement et ça permettera de mettre en couleur ton code et on y verra mieux ;)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

16 Juin 2011, 21:54

Bonsoir :D
J'ai déjà contacté mon hébergeur et il m'a expliqué que je peux utiliser "SMTP= localhost" sans avoir besoin d'autres paramètres et que j'avais aussi le choix d'utiliser la fonction suivante pour les formulaires et je te dis qu'un formulaire php que j'ai mis en ligne fonctionne très bien avec phpmailer, alors que l'envoi automatique des mails à la soumission d'un site web et de la newsletter ne marchent pas; et ce qui est étrange c'est que je n'ai eu aucun message d'erreur, mais plutôt une réponse que le message a été envoyé avec succès.
[php]<?php
$to = "@mail"; //Destinataire du message
$from = "@mail"; // Emetteur du message
$subject = "Testing Subject ";
$message = "Testing Message ";
$headers = "From: " . $from . "\r\n" .
"Reply-To: " . $from . "\r\n" .
"X-Mailer: PHP/" . phpversion();
$additionalparam = "-r " . $from;
if(mail($to, $subject, $message, $headers, $additionalparam))
{
echo 'Le message a été envoyé';
}
else
{
echo 'Le message n\'a pu être envoyé';
}
?>
[/php]

Je te renvoi le contenu du fichier mailer.php et il est complet

[php]<?php

class Mailer extends Model
{
private static $instance = null;
private $adminEmail;
private $inboxDebug = false;
private $sendRealEmail = true;
private $charset = "UTF-8";

/**
* @return Mailer
*/

public static function getInstance()
{
if (self::$instance === null) {
self::$instance = new self();
}

return self::$instance;
}

function __construct()
{
parent::__construct();

$c = new Criteria();
$c->add("role", "administrator");
$c->setLimit(1);
$admin = $this->user->find($c, "email");
$this->adminEmail = $admin->email;
}

function getAdminEmail()
{
return $this->adminEmail;
}

function sendAdminNotification($site)
{
$message = $this->customMessage->findByPk("submitSite");
$this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
}

function sendEmailToAdmin($subject, $message, $fromEmail = "")
{
return $this->sendEmail($this->adminEmail, $subject, $message, $fromEmail);
}

function replaceTags($message, $site = null)
{
$replacements = array("[name of directory]" => Config::get("siteTitle"),
"[url of your directory]" => Config::get("siteRootUrl"));

if ($site) {

$this->site->attachParents($site);
$detailsUrl = AppRouter::getObjectUrl($site, "siteDetails", true);

$category = $this->category->findByPk($site->categoryId, "name");
$siteDescription = (utf8_strlen($site->description) > 100) ? utf8_substr($site->description, 0, 100) : $site->description;

$replacements += array(
"[site name]" => $site->siteTitle,
"[name of the category]" => $category->name,
"[url site details]" => $detailsUrl,
"[url site]" => $site->url,
"[description of the site]" => $siteDescription,
"[site type]" => ($site->siteType == "basic") ? _t("Free") : _t("Privilege"));
}

$message = strtr($message, $replacements);

return $message;
}

function sendSiteStateUpdate($webmasterEmail, $site, $subject = false, $description = false)
{
switch ($site['status']) {
case "validated":
$messageId = "validateSite";
break;

case "refused":
$messageId = "refuseSite";
break;

case "banned":
$messageId = "banSite";
break;
}

static $cachedMessages = array();

if (!isset($cachedMessages[$messageId])) {
$cachedMessages[$messageId] = $this->customMessage->findByPk($messageId);
}

$message = $cachedMessages[$messageId];

if (!$description) {
$description = $message->description;
}

$description = $this->replaceTags($description, $site);

if (!$subject) {
$subject = $message->title;
}

$this->sendEmail($webmasterEmail, $subject, $description);

}

function sendNewsletterTaskFinished()
{
$this->sendEmailToAdmin(_t('Sending the newsletter is finished successfully.'), _t('Sending the newsletter is finished successfully.') . _t('You can go in your administration for further informations.'));
}

function sendSiteBacklinkTaskFinished()
{
$this->sendEmailToAdmin(_t('The search for backlinks is finished successfully.'), _t('The search for backlinks is finished successfully.') . _t('You can go in your administration for further informations.'));
}

function sendDuplicateContentTaskFinished()
{
$this->sendEmailToAdmin(_t('The search for duplicate content is finished successfully.'), _t('The search for duplicate content is finished successfully.') . _t('You can go in your administration for further informations.'));
}

function sendSiteThumbTaskFinished()
{
$this->sendEmailToAdmin(_t('The updating of thumbs is finished successfully.'), _t('The updating of thumbs is finished successfully.') . _t('You can go in your administration for further informations.'));
}

function sendWebmasterNotification($site, $webmasterEmail)
{
$message = $this->customMessage->findByPk("webmasterSubmitSite");
$this->sendEmail($webmasterEmail, $message->title, $this->replaceTags($message->description, $site));
}

function sendEmailConfirmation($messageId, $email, $confirmLink)
{
$message = $this->customMessage->findByPk($messageId);
$message->description = str_replace("[confirm link]", $confirmLink, $message->description);
$this->sendEmail($email, $message->title, $this->replaceTags($message->description));
}

function sendLostPassword($userEmail, $newPassword)
{
$this->sendEmail($userEmail, _t('Annuaire - new webmaster password'), _t('Your new password is') . ' ' . $newPassword);
}

function sendContactEmailToUser($email, $title, $text, $fromEmail)
{
$message = $this->customMessage->findByPk("webmasterContact");

$text = str_replace(array("[message]", "[sender email]"),
array($text, $fromEmail),
$message->description);

$this->sendEmail($email, $title, $text);
}

function sendNewCommentNotificationToAdmin($site)
{
$message = $this->customMessage->findByPk("newComment");
$this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
}

function sendNewSiteProblemNotificationToAdmin($site)
{
$message = $this->customMessage->findByPk("newSiteProblem");
$this->sendEmailToAdmin($message->title, $this->replaceTags($message->description, $site));
}

function createMailHeaders($from)
{
$mailheaders = "From: $from\n";
$mailheaders .= "Reply-To: $from\n";
$mailheaders .= "MIME-version: 1.0\n";
$mailheaders .= "Content-type: text/html; charset=" . $this->charset . "\n";

return $mailheaders;
}

function sendEmail($email, $subject, $text, $fromEmail = "")
{
if ($fromEmail == "") {
$fromEmail = $this->adminEmail;
}
$headers = $this->createMailHeaders($fromEmail);

$specialChars = array('Ŕ','Á','Â','Ă','Ä','Ĺ','Ć','ŕ','a','á','â','ă','ä','ĺ','ć','Č','É','Ę','Ë','č','e','é','ę','ë','e','Ě','Í','Î','Ď','ě','í','î','ď','Ň','Ó','Ô','Ő','Ö','Ř','ň','ó','ô','ő','ö','ř','Ů','Ú','Ű','Ü','ů','ú','ű','ü','ß','Ç','ç','Đ','đ','Ń','ń','Ţ','ţ','Ý' );
$normalChars = array('A','A','A','A','A','A','A','a','a','a','a','a','a','a','a','E','E','E','E','e','e','e','e','e','e','I','I','I','I','i','i','i','i','O','O','O','O','O','O','o','o','o','o','o','o','U','U','U','U','u','u','u','u','B','C','c','D','d','N','n','P','p','Y' );
$subject = str_replace($specialChars, $normalChars, $subject);

if ($this->inboxDebug) {
$str = "<hr>";
$str .= "<b>Time</b> " . date("Y-m-d G.i:s") . "<br>";
$str .= "<b>Email:</b> $email<br>";
$str .= "<b>Topic:</b> $subject<br>";
$str .= "<b>Text:</b> $text<br>";
$str .= "<b>Headers:</b> $headers<br>";

$fp = fopen(CODE_ROOT_DIR . "inbox.html", "a");
fwrite($fp, $str);
fclose($fp);
}

if ($this->sendRealEmail) {
@mail($email, $subject, $text, $headers);
}

return true;
}
}[/php]

Petit nouveau ! | 5 Messages

18 Juin 2011, 11:33

Alors! :(

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 7661 Messages

18 Juin 2011, 15:51

l'exemple que tu donne c'est un exemple "basique" de la doc. tous ce que l'on en conclu c'est que la fonction mail est active sur ton compte.

Per contre ce que l'on ne sais pas c'est comment tu l'utilise; A la limite le code de la classe on s'en ficher un (bon il est quand même utile, mais on va pas debugger ;) ). Par contre voir comment toi tu l'utilise c'est intéressant, car c'est la que se trouve le soucis.

qu'entend tu par : dans l'interface admin on vois bien qu'un mail est partis ?


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

17 Juil 2011, 06:44

un grand up! :D

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 10049 Messages

17 Juil 2011, 10:36

Modération :
Les "up" (petits ou grands) sont interdits sur PHPFrance.

Si tu veux relancer un sujet, commence par apporter des informations complémentaires, réponds aux questions qui ont été posées par moogli, ... De plus, qu'as tu fais comme test depuis un mois ? quels sont les nouveaux éléments à prendre en compte, y a-t-il des messages d'erreur ? etc.

Sans cela, il n'y a aucune chance que l'on te réponde, et le fait de remonter le topic juste en disant "up" n'y changera rien :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...