Преобразование HTML-генерирующего php-скрипта в автоматический почтовый скрипт - PullRequest
2 голосов
/ 20 марта 2010

Я получил этот скрипт для создания HTML-страницы из загрузчика изображений. Единственная проблема заключается в том, что он перезаписывает сам себя при каждой загрузке, я хотел бы изменить его так, чтобы вместо этого мне отправляли электронное письмо.

Идеи?

 <?php

$destination_dir = "uploaded/";
$targetPath = dirname($_SERVER['SCRIPT_URI']) . "/";

$html_start = "
<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">

<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
<title>Upload results</title>
</head>
<body>
";

$html_end = "
</body>
</html>
";

// Check if there are AdditionalStringVariable
$result = "AdditionalStringVariable: " . $_POST["AdditionalStringVariable"];
$result .= "<br>";


// Process value of QIU_thumbnails_Imagedata field, this is JPEG-files array of generated thumbnails
if($_FILES[QIU_thumbnails_Imagedata])
{
foreach ($_FILES[QIU_thumbnails_Imagedata][name] as $key => $value) 
{
    $uploadfile = $destination_dir . basename($_FILES[QIU_thumbnails_Imagedata][name][$key]);


    if (move_uploaded_file($_FILES['QIU_thumbnails_Imagedata']['tmp_name'][$key], $uploadfile)) 
    {

        $big_image_name = $_FILES[Imagedata][name][$key];

        $result .= "<a href='" .$big_image_name. "'>" . "<img border = '0' src='".$value . "'/></a><br><br>";
    }
}
}
//
$result .= "<br>";


// Process value of Imagedata field, this is JPEG-files array

foreach ($_FILES[Imagedata][name] as $key => $value) 
{
$uploadfile = $destination_dir . basename($_FILES[Imagedata][name][$key]);

if (move_uploaded_file($_FILES['Imagedata']['tmp_name'][$key], $uploadfile)) 
{
    $result .= "File uploaded: <a href='".  $value . "'>" . $value . "</a><br>";
}
}


//
$result .= "<br>";




//
// Process  GlobalControlData field, this is the array of serialized data for Global controls 
// the value for each control is: id|value
if($_POST[GlobalControlData])
    {
    foreach ($_POST[GlobalControlData] as $key => $value) 
{
    $globalControlExploded =  explode("|", $value);
    $result .= "\n" . "GlobalControlData:\n\t" . $globalControlExploded[0] ."\t:\t" . $globalControlExploded[1] . "<br>";
}
}

//
// Process LocalControlData  field, this is the array of serialized data for Local controls 
// value for each image is: image||id1|value1^id2|value2^id3|value3, where image - is picture name, id - is unique control ID , and a value - control value
if($_POST[LocalControlData])
{
foreach ($_POST[LocalControlData] as $key => $value) 
{
    $exploded = explode("||", $value);
    $parentFile = $exploded[0];

    $result .= "<br>" . $exploded[0] . "<br>";

    $explodedToControls = explode("^", $exploded[1]);

    foreach ($explodedToControls as $cnt => $val) 
    {
        $eachControl = explode("|", $val);
        $result .= "\tcontrol:\t" . $eachControl[0] . ", value:\t" . $eachControl[1] . "<br>";

    }
    //
}
}
//

$result = $html_start . $result . $html_end;

//
if(@$fp = fopen($destination_dir.'index.html', 'w')) {
      fwrite($fp, $result);
      fclose($fp);
}

132    echo $targetPath . $destination_dir;  
133  
134   ?>  

Я только что добавил это:

135 
136    $to = 'michael.robinson@mac.com';
137    $subject = 'Baublet Order Received';
138    $headers = 'From: orders@baublet.com '. "\r\n" .
139           'MIME-Version: 1.0' . "\r\n" .
140    'Content-type: text/html; charset=utf-8' . "\r\n";
141    mail($to, $subject, $result, $headers");
142
143   ?>  

1 Ответ

1 голос
/ 21 марта 2010

Я понимаю, что вместо сохранения HTML-кода на сервер вы хотите отправить его как-нибудь по электронной почте.Это то, что вы просите?Если нет, отредактируйте / прокомментируйте свой вопрос, чтобы уточнить, что вам нужно.

Блок

if(@$fp = fopen($destination_dir.'index.html', 'w')) {
      fwrite($fp, $result);
      fclose($fp);
}

заботится о записи файла в файловую систему сервера, потенциально заменяя что-либо.Если вы не хотите сохранять HTML в виде файла на сервере, вам просто нужно избавиться от этого блока (удалить его или закомментировать).

К этому моменту у вас уже есть сгенерированный HTMLв переменной $result (если вы посмотрите поближе, это то, что исходный код сохраняет в файл);так что если вы хотите отправить его по почте, у вас уже есть тело.Определите адреса «от», «до», «CC» (если есть) и «BCC» (если есть), а также тему вашей почты.Значение «from» часто идет как литерал или константа, но также может быть полем ввода из формы POST.Адрес «до» зависит от того, куда вы хотите отправить почту.Затем используйте что-то вроде этого для фактической отправки по почте:

$to = "here goes the destination address";
$subject = "here you put the subject line for the e-mail";
$headers = "From: " . $whatever_your_sender_address_is . "\r\n" .
           "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8\r\n";
mail($to, $subject, $result, $headers);

Посмотрите документацию mail () по http://ie2.php.net/manual/en/function.mail.php для получения дополнительной информации о функции mail ().Обратите внимание, что в этом случае вам нужно определить как минимум 3 заголовка: всегда нужно указывать «От» (некоторые почтовые приложения на стороне сервера могут иметь адрес «от» по умолчанию, но всегда рекомендуется переходить на твердую почву).Заголовки «MIME-Version» и «Content-type» предназначены для того, чтобы почта отправлялась как HTML, а не как текст.Возможно, вы захотите добавить «Reply-to», «CC», «BCC» и другие заголовки, в зависимости от ваших потребностей: в таком случае просто добавьте их в переменную $ headers, разделив ее «\ r \ n»,до звонка на почту ().

Надеюсь, это поможет.

...