Windows — Как отправить электронную почту с помощью PHP на локальный сервер с MailEnable

Это на Windows Server 2016. Я включил реле на MailEnable для 127.0.0.1, поэтому он работает и ему не нужны учетные данные (я проверил это с SMTP Tester). Сайт PHP также находится на том же сервере. Я не ищу альтернативных решений, таких как реализация другой почтовой библиотеки PHP.

-1

Решение

Я потратил много часов на создание PHP-файла, который можно отправлять с вложением или без него. Я тестировал это на Windows Server 2016, IIS 10, PHP 5.6. Может быть, это кому-то поможет.

Относительно MailEnable; MailEnable не была проблемой. Старый код, который я использовал, был из старой версии PHP, которая не работала. Для MailEnable вам просто нужно включить Relay (свойства SMTP) для 127.0.0.1, который включен по умолчанию, и вам не нужно использовать аутентификацию, если вы отправляете с 127.0.0.1.

<?php
/*   include_once("db/dbUtil.php");
$dbUtil = new DbUtil();*/

// carriage return type (RFC)
$eol = "\r\n";

$name = "";
if (isset($_REQUEST['name'])) {
$name = $_REQUEST['name'];
}

$email = "";
if (isset($_REQUEST['email'])) {
$email = $_REQUEST['email'];
}

$message = '';
if (isset($_REQUEST['question'])) {
$message = $_REQUEST['question'];
}

$fileToUpload = "";
if (isset($_FILES["fileToUpload"]["tmp_name"])) {
$fileToUpload = $_FILES["fileToUpload"]["tmp_name"];
}

// main header
$headers = "From: " . $name . " <" . str_replace(array("\r", "\n"), '', $email) . ">" . $eol;

if ($fileToUpload != "") {
// a random hash will be necessary to send mixed content
$separator = md5(time());

// main header (multipart mandatory)
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
$headers .= "Content-Transfer-Encoding: 7bit" . $eol;
$headers .= "This is a MIME encoded message." . $eol;

// message
$body = "--" . $separator . $eol;
$body .= "Content-Type: text/plain; charset=\"utf-8\"" . $eol;
$body .= "Content-Transfer-Encoding: 8bit" . $eol . $eol;
$body .= $message . $eol;

$filename = basename($_FILES["fileToUpload"]["name"]);
$content = file_get_contents($fileToUpload);
$content = chunk_split(base64_encode($content));

// attachment
$body .= "--" . $separator . $eol;
$body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . $eol;
$body .= "Content-Transfer-Encoding: base64" . $eol;
$body .= "Content-Disposition: attachment" . $eol . $eol;
$body .= $content . $eol;
$body .= "--" . $separator . "--";
}
else{
$headers .= "Content-type:text/plain; charset=utf-8" . $eol;
$headers .= "Content-Transfer-Encoding: 7bit" . $eol;

$body = $message;
}

$mailto = '[email protected]';
$subject = 'NSD';

//SEND Mail
if (mail($mailto, $subject, $body, $headers)) {
echo "mail send ... OK"; // or use booleans here
} else {
echo "mail send ... ERROR!";
print_r( error_get_last() );
}
?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]