Отправить PHP письмо с использованием SMTP-аутентификации не работает - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь отправить SMTP аутентифицированную почту через PHP для моего магазина.

Когда клиент совершает покупку, PHP-скрипт отправляет две почты. Один в estore для подтверждения заказа и один для клиента для подтверждения их заказа.

Это работает, но проблема в том, что я хочу отправлять письма с проверкой подлинности SMTP, так что письмо с подтверждением нене попадает в папку со спамом клиентов.

Я проверил в Интернете, как отправлять аутентифицированные SMTP-письма, и убедился, что на моем почтовом хосте установлен PEAR, но я просто не могу заставить его работать должным образом.

Это код PHP, который работает:

$id = $_POST['id'];
        $fname = $_POST['fname'];
        $lname = $_POST['lname'];
        $email = $_POST['email'];
        $phone = $_POST['phone'];
        $address = $_POST['address'];
        $country = $_POST['country'];
        $province = $_POST['province'];
        $city = $_POST['city'];
        $postalcode = $_POST['postalcode'];
        $item = $_POST['item'];
        $qty = $_POST['qty'];
        $total = $_POST['total'];

        $storemail = "orders@mymailserver.co.za";
        $clientmail = "$email";
        $subject = "Order #$id";

        $mailstore = "<html>
                    <body>
                    <h3>Order Details</h3>
                    <ul>
                    <li><b>Order:</b> #$id</li>
                    <li><b>Items:</b> $item</li>
                    <li><b>Qty:</b> $qty</li>
                    <li><b>Total:</b> $total</li>
                    </ul>
                    <h3>Customer Details</h3>
                    <ul>
                    <li><b>Name:</b> $fname $lname</li>
                    <li><b>Email:</b> $email</li>
                    <li><b>Phone:</b> $phone</li>
                    <li><b>Address:</b> $address</li>
                    <li><b>Province:</b> $province</li>
                    <li><b>City:</b> $city</li>
                    <li><b>Postal Code:</b> $postalcode</li>
                    </ul>
                    </body>
                    </html>";

        $mailclient = "<html>
                    <body>
                    <h3>Order Confirmation</h3>
                    <p>Hey $fname,<p>
                    <p>Thanks for your order!</p>
                    <ul>
                    <li><b>Order #$id</b></li>
                    <li><b>Items:</b> $item</li> 
                    <li><b>Qty:</b> $qty</li> 
                    <li><b>Total:</b> $total</li>
                    </ul>

                    <ul>
                    <li><i>$address</i></li>
                    <li><i>$city</i></li>
                    <li><i>$postalcode</i></li>
                    </ul>

                    </body>
                    </html>";

        $headers = "MIME-Version: 1.0" . "\r\n"; 
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
        $headers .= 'From: '.My E-store.'<'.$storemail.'>' . "\r\n"; 

        mail($storemail, $subject, $mailstore, $headers) or die("Error!");
        mail($clientmail, $subject, $mailclient, $headers) or die("Error!");

Это тот же код PHP с аутентификацией SMTP, который не работает:

$id = $_POST['id'];
        $fname = $_POST['fname'];
        $lname = $_POST['lname'];
        $email = $_POST['email'];
        $phone = $_POST['phone'];
        $address = $_POST['address'];
        $country = $_POST['country'];
        $province = $_POST['province'];
        $city = $_POST['city'];
        $postalcode = $_POST['postalcode'];
        $item = $_POST['item'];
        $qty = $_POST['qty'];
        $total = $_POST['total'];

        $storemail = "orders@mymailserver.co.za";
        $clientmail = "$email";
        $subject = "Order #$id";

        $mailstore = "<html>
                    <body>
                    <h3>Order Details</h3>
                    <ul>
                    <li><b>Order:</b> #$id</li>
                    <li><b>Items:</b> $item</li>
                    <li><b>Qty:</b> $qty</li>
                    <li><b>Total:</b> $total</li>
                    </ul>
                    <h3>Customer Details</h3>
                    <ul>
                    <li><b>Name:</b> $fname $lname</li>
                    <li><b>Email:</b> $email</li>
                    <li><b>Phone:</b> $phone</li>
                    <li><b>Address:</b> $address</li>
                    <li><b>Province:</b> $province</li>
                    <li><b>City:</b> $city</li>
                    <li><b>Postal Code:</b> $postalcode</li>
                    </ul>
                    </body>
                    </html>";

        $mailclient = "<html>
                    <body>
                    <h3>Order Confirmation</h3>
                    <p>Hey $fname,<p>
                    <p>Thanks for your order!</p>
                    <ul>
                    <li><b>Order #$id</b></li>
                    <li><b>Items:</b> $item</li> 
                    <li><b>Qty:</b> $qty</li> 
                    <li><b>Total:</b> $total</li>
                    </ul>

                    <ul>
                    <li><i>$address</i></li>
                    <li><i>$city</i></li>
                    <li><i>$postalcode</i></li>
                    </ul>

                    </body>
                    </html>";

        $host = "ssl://mail.mymailserver.co.za";
        $port = "465";
        $username = "orders@mymailserver.co.za";
        $password = "emailpassword";

        $headers = "MIME-Version: 1.0" . "\r\n"; 
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
        $headers .= 'From: '.My E-store.'<'.$storemail.'>' . "\r\n";

        $smtp = Mail::factory('smtp',
        array ('host' => $host,
        'port' => $port,
        'auth' => true,
        'username' => $username,
        'password' => $password));

        $mail = $smtp->send($storemail, $subject, $mailstore, $headers);
        $mail = $smtp->send($clientmail, $subject, $mailclient, $headers);

        mail($storemail, $subject, $mailstore, $headers) or die("Error!");
        mail($clientmail, $subject, $mailclient, $headers) or die("Error!");

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

Я понимаючто добавление этих двух строк может вызвать проблему:

$mail = $smtp->send($storemail, $subject, $mailstore, $headers);
$mail = $smtp->send($clientmail, $subject, $mailclient, $headers);

Но важно, чтобы я отправил два письма. Один на оба адреса электронной почты моих заказов и клиента. Очень важно, чтобы клиентская почта прошла проверку подлинности по протоколу SMTP, но я не могу понять, как это сделать.

Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...