Контактная форма PHP - загрузка изображений на временную страницу, но не привязка к электронной почте - PullRequest
0 голосов
/ 28 сентября 2011

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

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

Я был бы очень признателен, если бы кто-то мог понять, что происходит.

<?php

ini_set("sendmail_from", "darren@mywebsite.co.uk");
ini_set("SMTP", "smtp.myhostingcompany.co.uk");

if($name = filter_var($_POST['name']))
if($address = filter_var($_POST['address']))
if($postcode = filter_var($_POST['postcode']))
if($phone = filter_var($_POST['phone']))
if($email = filter_var($_POST['email']))
if($details = filter_var($_POST['details']))
if($contactby = filter_var($_POST['contactby']))

/* Subject and Email Destinations */
$emailSubject = 'Work Email!';
$webMaster = 'darren@mywebsite.co.uk';

/* Gathering Data Variables */
$nameField = $_POST['name'];
$addressField = $_POST['address'];
$postcodeField = $_POST['postcode'];
$phoneField = $_POST['phone'];
$emailField = $_POST['email'];
$detailsField = $_POST['details'];
$contactbyField = $_POST['contactby'];

$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); 
$max_filesize = 524288; // Maximum filesize in BYTES (currently 0.5MB)  
$upload_path = './uploads/'; 

$filename = $_FILES['userfile']['name']; 
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); 

if(!in_array($ext,$allowed_filetypes))
die('The file you attempted to upload is not allowed.');

if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
die('The file you attempted to upload is too large.');

if(!is_writable($upload_path))
die('You cannot upload to the specified directory, please CHMOD it to 777.');

if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
echo 'Your file upload was successful, view the file <a href=
"' . $upload_path . $filename . '" title="Your File">here</a>'; // It worked.
else
echo 'There was an error during the file upload.  Please try again.'; // It failed

$body = <<<EOD
Name: $name
Address: $address
Postcode: $postcode
Phone: $phone
Email: $email
Details: $details
Contactby: $contactby
EOD;

$headers = "From: $email\r\n";
$headers .= "Contact-type: text/html\r\n";
$attachment = chunk_split(base64_encode(file_get_contents($temp_file)));
$tmp_file = $_FILES['userfile']['tmp_name'];
$success = mail($webMaster, $attatchment, $body, $headers, "-fdarren@mywebsite.co.uk");

/* Results rendered as HTML */

$theResults = <<<EOD
SENT SENT SENT
EOD;
echo "$theResults"
?>

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

Ваши почтовые заголовки неверны, вам нужно использовать MIME для определения различных типов контента (тело письма и вложение).

У меня есть код, который я использую для отправки по электронной почте, есличерез 10-20 минут вам не ответят, я постараюсь найти для вас.

Удачи!

Мне удалось выкопать код!Это не самый чистый код, но он выполняет свою работу.Вам нужно будет сделать несколько настроек, как это было изначально написано для отправки CSV-файлов по электронной почте, но я прокомментировал все, что смог для вас.

//The recipient(s) who will receive this email.
$mail_recipients = 'example@email.com';

//This is the subject line of the email.
$mail_subject .= 'A new CVS has arrived!';

//This is the emails body.
$message .= 'A new CVS file has been generated and sent to you, please find it attached to this email. <br />';

//This is the full path to the file you want to attach.
$full_path = '/example/path/file.csv';

//The file type of the attachment.
$file_type = 'text/csv';

//Create a file handle to open the file.
$file = fopen($full_path,'rb'); 

//Read all of the files contents into a variable.
$data = fread($file, filesize($full_path)); 

//encode and split the contents.
$data = chunk_split(base64_encode($data)); 

//Close the file, we don't need it anymore!
fclose($file); 

//Create a unique boundary
$new_boundary = md5(time());

//This is your basic header information such as who the email is from and the date it was sent.
$mail_header .= 'From: CSV Admin <noreply@website.co.uk>' . "\r\n";
$mail_header .= 'Date: ' . date('r') . "\r\n";

//This part of the header first defines to the email client that it is a multipart message and adds the emails content/body.
$mail_header .= 'Content-Type: multipart/mixed; boundary="' . $new_boundary . '"' . "\r\n\r\n";
$mail_header .= 'MIME-Version: 1.0' . "\r\n";
$mail_header .= 'This is a multi-part message in MIME format' . "\r\n";
$mail_header .= '--' . $new_boundary . "\r\n";
$mail_header .= 'Content-Type:text/html; charset="iso-8859-1"' . "\r\n";
$mail_header .= 'Content-Transfer-Encoding: 7bit' . "\r\n\r\n";
$mail_header .= $message . "\r\n\r\n";

//This part of the header is for the attachment and includes the contents of the file, the files name and other information.
$mail_header .= '--' . $new_boundary . "\r\n";
$mail_header .= 'Content-Type: ' . $file_type . '; name="' . $file_name . '"' . "\r\n";
$mail_header .= 'Content-Transfer-Encoding: base64' . "\r\n";
$mail_header .= 'Content-Disposition: attachment; filename="' . $file_name . '"' . "\r\n\r\n";
$mail_header .= $data . "\r\n\r\n";

//This is needed to stop any rendering errors by email clients and signifies the end of the emails header.
$mail_header .= '--' . $new_boundary  . '--' . "\r\n";

//This mails out all of the above.
mail($mail_recipients, $mail_subject, '', $mail_header);

//And we should be done!
0 голосов
/ 28 сентября 2011

Как ребята сказали, что у вас неправильный тип контента и у вас есть:

$attachment = chunk_split(base64_encode(file_get_contents($temp_file)));
$tmp_file = $_FILES['userfile']['tmp_name'];

Это должно быть

$tmp_file = $_FILES['userfile']['tmp_name'];
$attachment = chunk_split(base64_encode(file_get_contents($temp_file)));
0 голосов
/ 28 сентября 2011

У вас есть три различные ошибки:

  1. Заголовки для составной электронной почты немного сложнее.
  2. Параметры функции mail неверны.
  3. Вы передаете неопределенную переменную в file_get_contents.
$mime_boundary = md5(time());

$headers = "From: $email\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= "--".$mime_boundary."--\r\n";

$message .= "This is a multi-part message in MIME format.\r\n\r\n";
$message .= "--".$mime_boundary."--\r\n";

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "\r\n";
$message .= "$body\r\n";
$message .= "--".$mime_boundary."--\r\n";

$message .= chunk_split(base64_encode(file_get_contents($_FILES['userfile']['tmp_name'])));

mail($webMaster, 'email subject text', $message, $headers);

SitePoint имеет подробную статью о Расширенная электронная почта на PHP Статья , которая может оказаться полезной для вас.

...