Я пытаюсь отправить 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, но я не могу понять, как это сделать.
Любая помощь очень ценится.