2012-06-04 3 views
0

사용자가 업로드 한 첨부 파일이 포함 된 이메일을 보내는 간단한 스크립트가 있습니다. PHP에서 생성 된 파일을 전자 메일로 보낼 수 있도록 스크립트를 수정하는 방법 (예 :이 경우 데이터베이스의 연락처 정보를 가져 와서 파일의 vCard를 생성하고 이메일.데이터베이스에서 생성 된 첨부 파일을 사용하여 php로 이메일 보내기

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('[email protected]','[email protected]','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)); 
} 

?> 

나는 vcard에서 발생하는

$file = "getVcard.php?CompanyID=" . $CompanyID; 

echo   "<label for='file'>File</label>"; 
echo   "<input type='file' name='file' id='file'>"; 

을 변경했지만, 나는이 작업을 수행 할 때 이메일을 전송하지 않습니다.

제안 사항?

이 내 getVcard.php 파일입니다


CampSoup1988, 감사 :

<?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 파일을 저장하는 것이 가능 임시 위치를 찾은 다음 자동으로 임시 파일을 emai에 연결합니다.

$file = array(
       'type' => 'text/plain', 
       'name' => 'vcard.txt', 
       'tmp_name' => 'http://yourdomain/getVcard.php?CompanyID=' . $CompanyID 
     ); 

을하지만 그것은 아주 더러운 솔루션입니다 : L

답변

1

가장 쉬운 해결책은 손으로 당신의 vCard의 데이터를 전달하는 것입니다 (이메일에 첨부하기 전에 임시 파일의 이름을 변경). 장기적으로는 phpmailer과 같은 클래스를 사용하는 것이 좋습니다.

+0

작업 제안을 얻지 못했습니다. 오류는 없지만 전자 메일은 보내지 않았습니다. 필자는 phpmailer를 살펴 보았지만 어떻게 설정해야하는지 확신 할 수 없었습니다. XAMPP와 함께 번들로 제공되는 Mercury Mail을 사용하고 Mercury Mail을 Gmail SMTP – CampSoup1988

+0

hm을 통해 전자 메일을 보내도록 설정하면이 코드가 작동합니다. 이메일이 전송됩니까? 메일 기능에 $ file을 정의하거나 다른 값을 사용하도록하십시오. // phpmailer에서 smtp 데이터를 직접 정의 할 수 있습니다. 그러나 나는 이것이 지금 너무 어렵 으면 이해한다. 어쨌든 당신은 익숙하거나 비슷한 수업을해야합니다. – Oliver

+0

이메일을받지 못했습니다. 원래의 메시지를 편집하여 vCard를 생성하는 비용을 게시합니다. vcard.vcf에 텍스트/vcard 및 파일 형식을 변경해 보았습니다. 그 중 하나가 작동하지 않았습니다. 나는 PHP에 관해서는 아직 초보자인데, 전에 전자 메일을 보내려고 한 적이 없었으며 전자 메일 스크립트에 대한 튜토리얼뿐만 아니라 Mercury를 설정하는 자습서를 사용했습니다. – CampSoup1988

관련 문제