Вы можете просто использовать функцию сборки в PHP mail
. Часть body
не обязательно должна быть просто текстом, она также может содержать смешанные данные детали.
Имейте в виду, что это доказательство концепции. Функция sendEmlFile
может использовать некоторые дополнительные проверки, такие как «Существует ли файл» и «Есть ли у него набор границ». Как вы упоминали, это для тестирования / разработки, я не включил его.
<?php
function sendmail($body,$subject,$to, $boundry='') {
define ("CRLF", "\r\n");
//basic settings
$from = "Example mail<info@example.com>";
//define headers
$sHeaders = "From: ".$from.CRLF;
$sHeaders .= "X-Mailer: PHP/".phpversion().CRLF;
$sHeaders .= "MIME-Version: 1.0".CRLF;
//if you supply a boundry, it will be send with your own data
//else it will be send as regular html email
if (strlen($boundry)>0)
$sHeaders .= "Content-Type: multipart/mixed; boundary=\"".$boundry."\"".CRLF;
else
{
$sHeaders .= "Content-type: text/html;".CRLF."\tcharset=\"iso-8859-1\"".CRLF;
$sHeaders .= "Content-Transfer-Encoding: 7bit".CRLF."Content-Disposition: inline";
}
mail($to,$subject,$body,$sHeaders);
}
function sendEmlFile($subject, $to, $filename) {
$body = file_get_contents($filename);
//get first line "--Apple-Mail-159-396126150"
$boundry = $str = strtok($body, "\n");
sendmail($body,$subject,$to, $boundry);
}
?>
Обновление:
После еще одного тестирования я обнаружил, что все файлы .eml
различны. Там может быть стандарт, но у меня было множество вариантов при экспорте в .eml
. Мне пришлось использовать отдельный инструмент для создания файла, потому что вы не можете сохранить в .eml
по умолчанию, используя outlook.
Вы можете загрузить пример почтового скрипта . Содержит две версии.
Простая версия имеет два файла, один из них - файл index.php
, который отправляет файл test.eml
. Это просто файл, куда я вставил пример кода, который вы опубликовали в своем вопросе.
Расширенная версия отправляет электронное письмо с использованием созданного мной .eml
файла. он получит необходимые заголовки из самого файла. Имейте в виду, что это также устанавливает часть почты To
и From
, поэтому измените ее, чтобы она соответствовала вашим собственным настройкам / настройкам сервера.
Расширенный код работает так:
<?php
function sendEmlFile($filename) {
//define a clear line
define ("CRLF", "\r\n");
//eml content to array.
$file = file($filename);
//var to store the headers
$headers = "";
$to = "";
$subject = "";
//loop trough each line
//the first part are the headers, until you reach a white line
while(true) {
//get the first line and remove it from the file
$line = array_shift($file);
if (strlen(trim($line))==0) {
//headers are complete
break;
}
//is it the To header
if (substr(strtolower($line), 0,3)=="to:") {
$to = trim(substr($line, 3));
continue;
}
//Is it the subject header
if (substr(strtolower($line), 0,8)=="subject:") {
$subject = trim(substr($line, 8));
continue;
}
$headers .= $line . CRLF;
}
//implode the remaining content into the body and trim it, incase the headers where seperated with multiple white lines
$body = trim(implode('', $file));
//echo content for debugging
/*
echo $headers;
echo '<hr>';
echo $to;
echo '<hr>';
echo $subject;
echo '<hr>';
echo $body;
*/
//send the email
mail($to,$subject,$body,$headers);
}
//initiate a test with the test file
sendEmlFile("Test.eml");
?>