У меня есть простой скрипт для отправки электронной почты с вложением, которое пользователь загружает. Как изменить сценарий так, чтобы он отправил по электронной почте файл, который был сгенерирован в php (например, в этом случае я хочу вытащить контактную информацию из базы данных, сгенерировать vCard файла и привязать ее к Эл. адрес.
ViewCompany.php
<?php // this auto-magically inserts header.html here require('header.html'); include('mail.php'); if(isset($_POST['name'], $_FILES['file'])){ $body = array( "From: {$_POST['name']}", "Details:", "Name: {$_FILES['file']['name']}", "Size: {$_FILES['file']['size']}", "Type: {$_FILES['file']['type']}" ); mail_file('receiver@email.com','sender@email.com','subject', implode("\r\n", $body), $_FILES['file']); } ?>
<?php echo "<form action='' method='post' enctype='multipart/form-data'>"; echo "<p>"; echo "<label for='name'>Name</label>"; echo "<input type='text' name='name' id='name'>"; echo "</p>"; // $file = "getVcard.php?CompanyID=" . $CompanyID; echo "<p>"; echo "<label for='file'>File</label>"; echo "<input type='file' name='file' id='file'>"; echo "</p>"; echo "<p>"; echo "<input type='submit' value='Email file'>"; echo "</p>"; echo "</form>"; ?>
mail.php
<?php function mail_file($to, $from, $subject, $body, $file){ $boundary = md5(rand()); $headers = array( "MIME-Version: 1.0", "Content-Type: multipart/mixed; boundary=\"{$boundary}\"", "From: {$from}" ); $message = array( "--{$boundary}", "Content-Type: text/plain", "Content-Transfer-Encoding: 7bit", "", chunk_split($body), "--{$boundary}", "Content-Type: {$file['type']}; name=\"{$file['name']}\"", "Content-Disposistion: attachment; fielname=\"{$file['name']}\"", "Content-Transfer-Encoding: base64", "", chunk_split(base64_encode(file_get_contents($file['tmp_name']))), "--{$boundary}--" ); mail($to, $subject, implode("\r\n", $message), implode("\r\n", $headers)); } ?>
Я попытался изменить
echo "<label for='file'>File</label>"; echo "<input type='file' name='file' id='file'>";
в
$file = "getVcard.php?CompanyID=" . $CompanyID;
для создания vcard, но когда я это сделаю, письмо не отправляется.
Какие-либо предложения?
Спасибо,
CampSoup1988
Это мой файл getVcard.php:
<?php include "connection.php"; $CompanyID = $_GET['CompanyID']; $CompanyID=$_GET['CompanyID']; // Collecting data from query string if(!is_numeric($CompanyID)){ // Checking data it is a number or not echo "Data Error"; exit; } $query = "SELECT * FROM company where CompanyID = $CompanyID"; $result = mysql_query($query) or die(mysql_error()); header('Content-Type: text/vcard'); header('Content-Disposition: attachment; filename=vcardexport.vcf'); while($ResultsLists = mysql_fetch_array($result)){ echo "BEGIN:VCARD\n"; echo "VERSION:4.0\n"; echo "KIND:org\n"; echo "FN:" . $ResultsLists['CompanyName'] . "\n"; echo "ORG:" . $ResultsLists['CompanyName'] . "\n"; echo "ADR;TYPE=work;LABEL=\"". $ResultsLists['CompanyAddress1'] . "\n" . $ResultsLists['CompanyAddress2'] . "\n". $ResultsLists['CompanyCity'] . "\, " . $ResultsLists['CompanyState'] . " " . $ResultsLists['CompanyZipcode'] . "\n" . $ResultsLists['CompanyCountry'] . "\":" . $ResultsLists['CompanyAddress2'] . ";" . $ResultsLists['CompanyAddress1'] . ";" . $ResultsLists['CompanyCity'] . ";" . $ResultsLists['CompanyState'] . ";" . $ResultsLists['CompanyZipcode'] . ";" . $ResultsLists['CompanyCountry'] . "\n"; if($ResultsLists['CompanyPhone'] != ""){ echo "TEL;TYPE=\"work,voice\";VALUE=uri:tel:" . $ResultsLists['CompanyPhone'] . "\n"; } if($ResultsLists['CompanyEmail'] != ""){ echo "WORK.EMAIL:" . $ResultsLists['CompanyEmail'] . "\n"; } echo "WORK.LANG;PREF=1:en\n"; if($ResultsLists['CompanyNotes'] != ""){ echo "NOTE:" . $ResultsLists['CompanyNotes'] . "\n"; } if($ResultsLists['CompanyWebsite'] != ""){ echo "URL:" . $ResultsLists['CompanyWebsite'] . "\n"; } echo "END:VCARD"; ?>
UPDATE: возможно ли сохранить файл vcf в временном расположении, а затем автоматически привязать временный файл к электронной почте (переименовывая файл temp, прежде чем присоединять его к электронной почте)
Самое простое решение – передать данные вашего vcard вручную:
$file = array( 'type' => 'text/plain', 'name' => 'vcard.txt', 'tmp_name' => 'http://yourdomain/getVcard.php?CompanyID=' . $CompanyID );
Но это очень грязное решение. В конечном итоге будет лучше использовать класс, например phpmailer .