PHP Mail (ne) Contactez-nous forme fonctionne bien si la saisie d'une adresse d'envoi Gmail, mais pas avec Yahoo [double]

StackOverflow https://stackoverflow.com/questions/2133442

Question

    

Cette question est une copie exacte:

         

J'ai installé un site de commerce électronique en utilisant Prestashop et lors du test de leur formulaire de contact, je trouve que je ne reçois pas de message si l'utilisateur entre l'adresse e-mail Yahoo que l'adresse des expéditeurs. Je n'ai pas de problèmes, cependant, si l'utilisateur entre une adresse Gmail.

Prestashop est actuellement mis en place pour utiliser la fonction PHP mail () pour la forme de contact. Quel pourrait être le problème et les solutions que je pourrais regarder comme je l'ai évidemment besoin de recevoir des mails de tout le monde, pas seulement ceux qui ont des adresses gmail.

Voici le code dans la page de contact form.php: -

<?php

$useSSL = true;

include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/header.php');

$errors = array();

$smarty->assign('contacts', Contact::getContacts(intval($cookie->id_lang)));

if (Tools::isSubmit('submitMessage'))
{
    if (!($from = Tools::getValue('from')) OR !Validate::isEmail($from))
        $errors[] = Tools::displayError('invalid e-mail address');
    elseif (!($message = nl2br2(Tools::getValue('message'))))
        $errors[] = Tools::displayError('message cannot be blank');
    elseif (!Validate::isMessage($message))
        $errors[] = Tools::displayError('invalid message');
    elseif (!($id_contact = intval(Tools::getValue('id_contact'))) OR !(Validate::isLoadedObject($contact = new Contact(intval($id_contact), intval($cookie->id_lang)))))
        $errors[] = Tools::displayError('please select a contact in the list');
    else
    {
        if (intval($cookie->id_customer))
            $customer = new Customer(intval($cookie->id_customer));
        if (Mail::Send(intval($cookie->id_lang), 'contact', 'Message from contact form', array('{email}' => $_POST['from'], '{message}' => stripslashes($message)), $contact->email, $contact->name, $from, (intval($cookie->id_customer) ? $customer->firstname.' '.$customer->lastname : $from)))
            $smarty->assign('confirmation', 1);
        else
            $errors[] = Tools::displayError('an error occurred while sending message');
    }
}

$email = Tools::safeOutput(Tools::getValue('from', ((isset($cookie) AND isset($cookie->email) AND Validate::isEmail($cookie->email)) ? $cookie->email : '')));
$smarty->assign(array(
    'errors' => $errors,
    'email' => $email
));

$smarty->display(_PS_THEME_DIR_.'contact-form.tpl');
include(dirname(__FILE__).'/footer.php');

?> 

Mise à jour: J'ai contacté mon e-mail société d'hébergement et ils nous ont donné la suggestion suivante: -

  

Vous devez changer l'e-mail   adresse dans le champ $ de à tout   Adresse e-mail sur le nom de domaine sur   que vous constituez cette   scénario. Par exemple, si votre domaine   Le nom est abc.com, alors vous définir   De l'adresse e-mail   some-name@abc.com. Cette adresse e-mail   n'a pas besoin d'être existant sur le courrier   Serveur de abc.com, cependant, le domaine   nom dans le répertoire $ du champ doit être   le tiens. Vous pouvez utiliser une adresse e-mail   tel que Do_Not_reply@abc.com.

     

La valeur des besoins sur le terrain mailto $   être changé à l'adresse e-mail,   où e-mail contenant les données   soumis par le formulaire doit être   livré.

Ainsi, dans le contexte de contact form.php de Prestashop (codes donnés ci-dessus), comment pourrais-je aller à le changer?

Était-ce utile?

La solution 5

La solution pour ce qui a été trouvé que cette question est presque identique à: - Reconfiguration PHP mail () Smarty Formulaire de contact .

Autres conseils

PHP mail () est vraiment une façon brute pour envoyer des emails. Il est assez facile de bousiller choses avec mail () si vous ne connaissez pas bien le FRCA e-mail (normes) ...

Je vous suggère d'utiliser PHPMailer (ou similaires bibliothèques) ou afficher le code réel votre utilisant.

Vous ne pouvez pas utiliser des adresses qui ne sont pas liés à vos serveurs comme adresse de l'expéditeur. Ce sera bloqué par tous les auto-respect mécanisme de blocage de spam. Il est en fait un miracle que cela fonctionne avec des adresses GMail.

Si vous voulez être en mesure de répondre directement aux mails que les gens vous envoient à travers votre formulaire de contact, ajoutez l'en-tête suivant au 4ème paramètre à votre appel mail():

reply-to: customers_email_address

mais comme l'adresse de l'expéditeur physique, toujours utiliser

from: something@yourserver.com

Il y a un cinquième paramètre que vous pouvez fournir à l'appel mail().

Voici ce que je faisais corriger mon courrier drupal (simplifié):

return @mail($message['to'],
             $message['subject'],
             $message['body'],
             join("\n", $mimeheaders),
             '-f' . $message['from'] );

Depuis AlexV fait remarquer à juste titre que l'utilisation de valeurs unescaped est dangereuse, c'est la version complète. S'il vous plaît noter qu'il est pris à partir des sources drupal (avec une petite correction).

    function drupal_mail_wrapper($message)
    {
        $mimeheaders = array();

        foreach ($message['headers'] as $name => $value) 
        {
            $mimeheaders[] = $name .': '. mime_header_encode($value);
        }

        return @mail(
            $message['to'],
            mime_header_encode($message['subject']),
            // Note: e-mail uses CRLF for line-endings, but PHP's API requires LF.
            // They will appear correctly in the actual e-mail that is sent.
            str_replace("\r", '', $message['body']),
            // For headers, PHP's API suggests that we use CRLF normally,
            // but some MTAs incorrecly replace LF with CRLF. See #234403.
            join("\n", $mimeheaders),
            ($message['from'] ? '-f' . $message['from'] : '') );
    }

Hope qui aide, Chris

Je me sers de ce petit code pour envoyer des e-mails dans un système de bulletin d'information de mon propre. Cet extrait traite spécifiquement un seul message. Il est basé sur les spécifications RFC.


    /**
     * @package  jaMailBroadcast
     * @author   Joel A. Villarreal Bertoldi (design at joelalejandro.com)
     *
     * @usage    
     *
     *     $msg = new jaMailBroadcast_Message("My Website", "my@website.com");
     *     $msg->to = new jaMailBroadcast_Contact("John Doe", "john@doe.com");
     *     $msg->subject = "Something";
     *     $msg->body = "Your message here. You <b>can use</b> HTML.";
     *     $msg->send();
     **/

    class jaMailBroadcast_Contact
    {
        public $id;
        public $name;
        public $email;

        function __construct($contactName, $contactEmail, $contactId = "")
        {
            $this->name = $contactName;
            $this->email = $contactEmail;
            if (!$contactId)
                $this->id = uniqid("contact_");
            else
                $this->id = $contactId;
        }

        function __toString()
        {
            return json_encode
            (
                array
                (
                  "id" => $this->id,
                  "name" => $this->name,
                  "email" => $this->email
                )
            );
        }

        function rfc882_header()
        {
            return sprintf('"%s" ', $this->name, $this->email);
        }
    }

    class jaMailBroadcast_Message
    {
        public $from;
        public $to;
        public $subject;
        public $body;
        public $mime_boundary;
        public $headerTemplate;
        public $footerTemplate;

        function __construct($fromName, $fromEmail)
        {
            $this->from = new jaMailBroadcast_Contact($fromName, $fromEmail);
            $this->mime_boundary = "==" . md5(time());
        }

        private function mail_headers($EOL = "\n")
        {
            $headers
              = "From: " . $this->from->rfc882_header() . $EOL
              . "Reply-To: from->email . ">" . $EOL
              . "Return-Path: from->email . ">" . $EOL
              . "MIME-Version: 1.0" . $EOL
              . "Content-Type: multipart/alternative; boundary=\"{$this->mime_boundary}\"" . $EOL
              . "User-Agent: jaMailBroadcast/1.0" . $EOL
              . "X-Priority: 3 (Normal)" . $EOL
              . "Importance: Normal" . $EOL
              . "X-Mailer: jaMailBroadcast";

            return $headers;
        }

        private function rfc882_body_format($EOL = "\r\n")
        {
          return wordwrap($this->body, 70, $EOL);
        }

        function send()
        {
            $EOL =
                 (
                    stripos($this->to->email, "hotmail") !== false
                  ||
                    stripos($this->to->email, "live") !== false
                 )
                  ? "\n"
                  : "\n";

            return mail
            (
                $this->to->rfc882_header(),
                $this->subject,
                $this->multipart_alternative_body($EOL),
                $this->mail_headers($EOL),
                "-f" . $this->from->email
            );
        }

        private function multipart_alternative_body($EOL = "\r\n")
        {
            $multipart
                    = "Content-Transfer-Encoding: 7bit" . $EOL
                    . "This is a multi-part message in MIME format. This part of the E-mail should never be seen. If you are reading this, consider upgrading your e-mail client to a MIME-compatible client." . $EOL . $EOL
                    = "--{$this->mime_boundary}" . $EOL
                    . "Content-Type: text/plain; charset=iso-8859-1" . $EOL
                    . "Content-Transfer-Encoding: 7bit" . $EOL . $EOL
                    . strip_tags($this->br2nl($this->headerTemplate)) . $EOL . $EOL
                    . strip_tags($this->br2nl($this->body)) . $EOL . $EOL
                    . strip_tags($this->br2nl($this->footerTemplate)) . $EOL . $EOL
                    . "--{$this->mime_boundary}" . $EOL
                    . "Content-Type: text/html; charset=iso-8859-1" . $EOL
                    . "Content-Transfer-Encoding: 7bit" . $EOL . $EOL
                    . $this->headerTemplate . $EOL
                    . $this->body . $EOL
                    . $this->footerTemplate . $EOL
                    . "--{$this->mime_boundary}--" . $EOL;

            return $multipart;
        }

        private function br2nl($text, $EOL = "\n")
        {
            $text = str_ireplace("<br>", $EOL, $text);
            $text = str_ireplace("<br />", $EOL, $text);
            return $text;
        }
    }

J'ai changé le « de » à $_REQUEST['from']. Vous pouvez le changer $_POST['from'] ainsi. remplacer 2 « » avec cela et changer $contact->email à un courriel désiré où vous voulez livrer ce courriel.

il a travaillé pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top