Yahoo ile bir Gmail gönderme adresi girerken, ama eğer PHP Mail () İletişim-Bizi formu çalışıyor

6 Cevap php

Ben PrestaShop kullanarak kurulum bir e-ticaret sitesi var ve onların iletişim formunu test ederken, ben kullanıcı gönderenler adresi olarak Yahoo e-posta adresini girerse ben herhangi bir mesaj almamaktadır olduğu bulundu. Kullanıcı bir Gmail adresi girerse Ben, ancak, herhangi bir sorun var.

PrestaShop şu iletişim formu için PHP Mail () işlevini kullanmak üzere ayarlanmış. Sorun ve ne gibi çözümler Açıkçası gmail adresleri olan, herkes değil sadece postaları almak gerekiyor gibi bakmak olabilir ne olabilir.

Aşağıdaki kontak form.php sayfasında kodu: -

<?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');

?> 

UPDATE:
I contacted my email hosting company and they gave the following suggestion:-

You would need to change the Email address in the field $from to any Email address on the domain name on which you are incorporating this script. For example, if your Domain Name is abc.com, then you would define the From Email address as some-name@abc.com. This Email address need not be existing on the Mail Server of abc.com, however, the domain name in the $from field has to be yours. You may use an Email address such as Do_Not_reply@abc.com.

The value in the $mailto field needs to be changed to the Email address, where email containing the data submitted through the form needs to be delivered.

Yani PrestaShop iletişim-form.php (yukarıda verilen kod) bağlamında, nasıl değiştirmeyi hakkında gitmek istiyorsunuz?

6 Cevap

Bunun için çözüm, bu sorular hemen hemen aynıdır olarak tespit edilmiştir: - http://stackoverflow.com/questions/2245506/reconfiguring-php-mail-smarty-contact-form.

PHP mail () gerçekten e-postalar göndermek için bir ham yoldur. Iyi e-posta RFC (standartlar) bilmiyorsanız eğer () mail şeyler berbat oldukça kolaydır ...

Sana PHPMailer (veya benzeri Librairies) kullanın ya senin kullanarak gerçek kod göndermek için öneririz.

Sen gönderici adresleri gibi sunucularına bağlı olmayan adresleri kullanamazsınız. Bu, her onurlu spam engelleme mekanizması tarafından bloke olacaktır. Bu GMail adresleri ile çalışır aslında bir mucize.

Doğrudan insanların iletişim formu aracılığıyla size göndermek postalara cevap edebilmek istiyorsanız, sizin mail() çağrısına 4 parametreye şu başlığı ekleyin:

reply-to: customers_email_address

ancak fiziksel gönderenin adresi olarak, always kullanın

from: something@yourserver.com

Eğer mail() çağrısı sağlayabilmektedir beşinci parametre var.

İşte (basitleştirilmiş) benim drupal posta düzeltmek için kullanılan budur:

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

Avatarlar doğru çıkmamış değerlerini kullanarak tehlikeli olduğunu belirtti beri, bu tam sürüm. (Bir küçük düzeltme ile) drupal kaynaklardan alınmış olduğunu unutmayınız.

    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 that helps, Chris

Ben kendime ait bir bülten sisteminde e-postalar göndermek için bu küçük kodu kullanarak oldum. Bu alıntı, özellikle tek bir mesaj işler. Bu RFC özellikleri dayanıyor.


    /**
     * @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;
        }
    }

I $_REQUEST['from'] için 'den' değişti. Sen $_POST['from'] de değiştirebilirsiniz. Bu ve değişim $contact->email Eğer bu e-posta teslim etmek istediğiniz istenilen e-posta ile 'dan' 2. değiştirin.

benim için çalıştı.