PHP

2008-09-22 5 views
16

से ईमेल और उनके अनुलग्नक कैसे प्राप्त करें मैं एक दोस्त की शादी के लिए एक फोटो गैलरी वेबपैप लिख रहा हूं और वे मेहमानों के लिए फोटो गैलरी चाहते हैं जो वे दिन में लेते डिजिटल फोटो सबमिट करते हैं।PHP

सभी विकल्पों का मूल्यांकन करने के बाद, मैंने तय किया है कि उपयोगकर्ताओं के लिए सबसे आसान चीज़ उन्हें एक परिचित इंटरफ़ेस (उनके ईमेल) का उपयोग करने देगी और उन्हें चित्रों में संलग्नक के रूप में भेज दें।

मैंने एक मेलबॉक्स बनाया है लेकिन अब मुझे गैलरी सिस्टम में जोड़ने के लिए स्वचालित प्रसंस्करण के लिए इन अनुलग्नकों को कनेक्ट और पुनर्प्राप्त करने की आवश्यकता है। पर कैसे? क्या ऐसा करने के लिए आपने देखा कोई ट्यूटोरियल या प्रीफैब कक्षाएं हैं?

उत्तर

3

आप किस एमटीए का उपयोग कर रहे हैं? यदि आप पोस्टफिक्स + मेलड्रॉप का उपयोग करते हैं तो आप एक फ़िल्टरिंग नियम बना सकते हैं जो कुछ संदेशों को एक PHP स्क्रिप्ट के माध्यम से पाइप करता है जो आने वाले मेलों को संभालता है। (मेलड्रॉप के लिए Google और xfilter)।

+0

हाँ पोस्टफिक्स-रूटिंग जहां मैं बैठा हूं वहां से एक अच्छा समाधान की तरह दिखता है। धन्यवाद! – Oli

+0

यह तरीका अधिक सुरुचिपूर्ण है लेकिन मेरा होस्ट इसका समर्थन नहीं करता है। ऐसा लगता है कि यह मेजबानों के साथ बनाया गया है जो सीपीनल का उपयोग करते हैं (हो सकता है कि यह दूसरा होस्ट ढूंढने का समय हो) – Shanimal

1

मुझे लगता है कि आप एक एमआईएमई संदेश पार्सर चाहते हैं।

मैंने this one पहले उपयोग किया है और ऐसा लगता है कि यह ठीक काम करता है, हालांकि मैंने इसे वास्तव में बड़े अनुलग्नकों पर परीक्षण नहीं किया है (यानी डिजिटल कैमरे से आपको 2-3 एमबी फाइलें मिल सकती हैं)।

क्या आपके पास पहले ही पीओपी 3/आईएमएपी मेलबॉक्स पढ़ने के लिए एक प्रणाली है? उसी साइट पर another class है जो पीओपी 3 पर भी काम करता है (मुझे विश्वास है कि एक आईएमएपी भी है) - हालांकि यदि आप एक उचित मात्रा डाउनलोड कर रहे हैं तो शायद आप कुछ सी-आधारित समाधानों की जांच करना चाहेंगे क्योंकि मुझे विश्वास है कि एक शुद्ध PHP है।

10

मैं इससे पहले बहुत कुछ करता था, लेकिन मुझे कोड नहीं मिला, यहां मुझे एक स्केल डाउन संस्करण मिला है। यह आपको सही रास्ते पर रखना चाहिए। मैं इस प्रकार की स्क्रिप्ट को cronjob से चलाने के लिए प्रयोग करता था। क्षमा करें मुझे अंतिम संस्करण नहीं मिल रहा है। ; (

// Open pop mailbox 
if (!$mbox = imap_open ("{localhost:110/pop3/notls}INBOX", "user", "tester")) { 
    die ('Cannot connect/check pop mail! Exiting'); 
} 

if ($hdr = imap_check($mbox)) { 
    $msgCount = $hdr->Nmsgs; 
} else { 
    echo "Failed to get mail"; 
    exit; 
} 

$MN=$msgCount; 
$overview=imap_fetch_overview($mbox,"1:$MN",0); 

for ($X = 1; $X <= $MN; $X++) { 

    $file = imap_fetchbody($mbox, $X, 1); 

    imap_delete($mbox, $X); 
} 

imap_expunge($mbox); 
imap_close($mbox); 

गुड लक

+1

यदि वे एमटीए प्राप्त करने पर नियंत्रण रखते हैं तो मेरा मानना ​​है कि आईटीएपी सर्वर की बजाय एमटीए प्रोग्राम को वितरित करने के लिए यह अधिक सुरुचिपूर्ण है, क्योंकि यह है विफलता के बस कम अंक। यह हमेशा एक विकल्प नहीं है, मैं स्वीकार करता हूं। –

6

आप इस उद्देश्य के लिए एक समर्पित मेलबॉक्स बना रहे हैं, एक फ़िल्टर प्रणाली का उपयोग कर लगभग निश्चित रूप से आप क्या नहीं करना चाहता इसके बजाय, आप के लिए मेलबॉक्स एक होना चाहते हैं। आवेदन के लिए पाइप, और एप्लिकेशन को सीधे stdin से संदेश में पढ़ा है, शरीर को पार्स कर दें, और एमआईएम शरीर को अनुलग्नक प्राप्त करने के लिए पार्स करें।

मेलबॉक्स होने के बाद एक पाइप सभी लोकप्रिय यूनिक्स- आधारित एमटीए जिन्हें मैं जानता हूं, जैसे sendmail, postfix, और qmail। आम तौर पर आप इसे अपने उपनाम फ़ाइल में परिभाषित करते हैं, जैसे:


# sendmail या postfix वाक्यविन्यास
msgsubmit: "|/Usr/bin/php ~ path/to/example.php "

फिर मेल msgsubmit लिए @ वितरण के लिए एक php कार्यक्रम के लिए कराई मिलता है।

यह IMAP सर्वर या किसी पर भरोसा नहीं का लाभ दिया है एमटीए से परे अन्य सर्वर जीवित है, और यह तब तक ठीक काम करता है जब तक आप गंतव्य होस्ट के एमटीए पर नियंत्रण रखते हैं। फ़िल्टरिंग वह है जो आप चाहते हैं कि अगर आप किसी सिस्टम पर सभी संदेशों को स्क्रिप्ट द्वारा निरीक्षण करना चाहते हैं, जो मैं चाहता हूं। मैं अनुमान नहीं कर रहा हूँ।

आप एक प्रति कहीं (नहीं एक बुरा विचार) एक मेलबॉक्स में रखा चाहते हैं बस इतना की तरह, एक से अधिक पते पर जाने के लिए अन्य नाम को परिभाषित:


msgsubmit: "| /usr/bin/php ~path/to/example.php", msgsubmit-box 

या पोस्टफ़िक्स आभासी प्रारूप:


msgsubmit 
    "| /usr/bin/php ~path/to/example.php" 
    msgsubmit-box 

6

क्या आपने Google के Picasa Web Albums का उपयोग करने पर विचार किया है? आप उन्हें फोटो भेजने और उन्हें ऑनलाइन साझा करने के लिए एक ईमेल पता सेट अप कर सकते हैं। फिर आप इन तस्वीरों की एक आरएसएस फ़ीड प्राप्त कर सकते हैं, जो अधिकांश प्रोग्रामर एमटीए से अधिक परिचित हैं।

+0

यह एक साफ विकल्प है! Google आपकी गुप्त कुंजी साझा करने के खिलाफ सलाह देता है, इसलिए, आप अपने एमटीए उपनाम को अपने उपनाम फ़ाइल में कुछ ऐसा करने के साथ इसे एक निश्चित पता कर सकते हैं: msgsubmit: [email protected] –

+0

प्लस –

+0

बॉक्स के बाहर सोचने के लिए आप में से एक महान काम करता है। अछा सुझाव। धन्यवाद। – evanmcd

-4
<?php 
//make sure that submit button name is 'Submit' 
if(isset($_POST['Submit'])){ 


     $name = $_POST['visitorname']; 
     $email = $_POST['visitoremail']; 
     $message = $_POST['visitormessage']; 


      $to="[email protected]"; 

      $subject="From ".$name; 


      $from = $email; 

      // generate a random string to be used as the boundary marker 
      $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; 

      // now we'll build the message headers 
      $headers = "From: $from\r\n" . 
      "MIME-Version: 1.0\r\n" . 
      "Content-Type: multipart/mixed;\r\n" . 
      " boundary=\"{$mime_boundary}\""; 

      // next, we'll build the invisible portion of the message body 
      // note that we insert two dashes in front of the MIME boundary 
      // when we use it 
      $message = "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
      $message . "\n\n"; 

foreach($_FILES as $userfile) 
      { 
      // store the file information to variables for easier access 
      $tmp_name = $userfile['tmp_name']; 
      $type = $userfile['type']; 
      $name = $userfile['name']; 
      $size = $userfile['size']; 



      // if the upload succeded, the file will exist 
      if (file_exists($tmp_name)) 
      { 

       // check to make sure that it is an uploaded file and not a system file 
       if(is_uploaded_file($tmp_name)) 
       { 

        // open the file for a binary read 
        $file = fopen($tmp_name,'rb'); 

        // read the file content into a variable 
        $data = fread($file,filesize($tmp_name)); 

        // close the file 
        fclose($file); 

        // now we encode it and split it into acceptable length lines 
        $data = chunk_split(base64_encode($data)); 
       } 

       // now we'll insert a boundary to indicate we're starting the attachment 
       // we have to specify the content type, file name, and disposition as 
       // an attachment, then add the file content. 
       // NOTE: we don't set another boundary to indicate that the end of the 
       // file has been reached here. we only want one boundary between each file 
       // we'll add the final one after the loop finishes. 
       $message .= "--{$mime_boundary}\n" . 
        "Content-Type: {$type};\n" . 
        " name=\"{$name}\"\n" . 
        "Content-Disposition: attachment;\n" . 
        " filename=\"{$fileatt_name}\"\n" . 
        "Content-Transfer-Encoding: base64\n\n" . 
       $data . "\n\n"; 
      } 
      } 


$ok = @mail($to, $subject, $message , $headers); 
if ($ok) { 
if (($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg") 
&& ($_FILES["file"]["size"] < 20000)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 

if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 

     } 
    } 
    } 
else 
    { 

    } 
echo "<span class='red'>E-mail has been sent successfully from $mail_name to $to</span>"; } 
else{ 
echo "<span class='red'>Failed to send the E-mail from $from to $to</span>"; 
} 
} 
?> 

पी/एस: मैं इस अपने काम code.hope और you.just प्रति सहायता और यह सुनिश्चित करें में के रूप में इस files.for के सभी प्रकार के लिए काम करते page.its आगे अपने पाठ फ़ील्ड नाम में ही है paste.make इस्तेमाल किया प्रश्न, बस मुझे शाह @ mc-oren.com पर ईमेल करें। वैसे भी, मैं सीखने की प्रक्रिया में भी हूं। =) धन्यवाद।

+2

-1: ओपी यह नहीं पूछ रहा है कि ईमेल कैसे भेजना है। वह उन्हें पुनः प्राप्त करना चाहता है। – Shannon

0

Majordomo, ईमेल को संभालने का एक विकल्प हो सकता है, लेकिन फ़ाइल अटैचमेंट हैंडलिंग पर कुछ सीमाएं हैं।

संबंधित मुद्दे