PHP'nin IMAP fonksiyonlarını kullanırken POP3 e-posta msj vücut alma bazı sistemlerde başarısız

0 Cevap php

Ben yorum bölümünde ve içinde PHP.net sitesinden aldım bir çift fonksiyonları dışında bir POP3 posta retriever inşa ettik tadil edilmiş bir temel olarak, ileti yapısını alır bit, ve ayrı değişkenler içine "parça" ayrıştırır.

Şimdi bu benim yerel sistemde gayet iyi çalışıyor ve bir web'de sunucu ..... benim amaçlar için ben "$ plainmsg" değişkeni kullanıyorum ... msg cezanın içeriğini olsun.

Ancak komut dosyasını çalıştırdığınızda hep boş bir gövde ile biter .. benim müşterilerine yerel makine üzerinde çalışıyor görünmüyor nedense .... Burada gövde kısmı için ilgili 2 yöntemleri ..

function getMsg($connection,$uid) {

    global $htmlmsg,$plainmsg,$charset,$attachments;

    // Define data holder array
    $part_array = array();

    // Define some vars
    $htmlmsg = '';
    $plainmsg = '';
    $charset = '';
    $attachments = '';

    // Get message structure
    $structure = imap_fetchstructure($connection,$uid, FT_UID);

    if (!$structure->parts) {  // not multipart

        $this->getPart($connection,$uid,$structure,0);  // no part-number, so pass 0

    } else {  // multipart: iterate through each part

        foreach ($structure->parts as $partno0 => $part) {
            $this->getPart($connection,$uid,$part,$partno0+1);
        }

    }

    if (!empty($htmlmsg)) $part_array['html'] = $htmlmsg;
    if (!empty($plainmsg)) $part_array['plain'] = $plainmsg;
    if (!empty($charset)) $part_array['charset'] = $charset;
    if (!empty($attachments)) $part_array['attachments'] = $attachments;

    // Return data array
    return $part_array;

}

/* Makes up & decodes the different 'parts' of the message body */

protected function getPart($connection,$uid,$p,$partno) {

    // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart
    global $htmlmsg,$plainmsg,$charset,$attachments;

    // DECODE DATA
    $data = ($partno)?
        imap_fetchbody($connection,$uid,$partno, FT_UID):  // multipart
        imap_body($connection,$uid, FT_UID);  // not multipart
    // Any part may be encoded, even plain text messages, so check everything.
    if ($p->encoding==4)
        $data = quoted_printable_decode($data);
    elseif ($p->encoding==3)
        $data = base64_decode($data);
    // no need to decode 7-bit, 8-bit, or binary

    // PARAMETERS
    // get all parameters, like charset, filenames of attachments, etc.
    $params = array();
    if ($p->parameters)
        foreach ($p->parameters as $x)
            $params[ strtolower( $x->attribute ) ] = $x->value;
    if ($p->dparameters)
        foreach ($p->dparameters as $x)
            $params[ strtolower( $x->attribute ) ] = $x->value;

    // ATTACHMENT
    // Any part with a filename is an attachment,
    // so an attached text file (type 0) is not mistaken as the message.
    if ($params['filename'] || $params['name']) {
        // filename may be given as 'Filename' or 'Name' or both
        $filename = ($params['filename'])? $params['filename'] : $params['name'];
        // filename may be encoded, so see imap_mime_header_decode()
        $attachments[$filename] = $data;  // this is a problem if two files have same name
    }

    // TEXT
    elseif ($p->type==0 && $data) {
        // Messages may be split in different parts because of inline attachments,
        // so append parts together with blank row.
        if (strtolower($p->subtype)=='plain')
            $plainmsg .= trim($data) ."\n\n";
        else
            $htmlmsg .= $data ."<br><br>";
        $charset = $params['charset'];  // assume all parts are same charset
    }

    // EMBEDDED MESSAGE
    // Many bounce notifications embed the original message as type 2,
    // but AOL uses type 1 (multipart), which is not handled here.
    // There are no PHP functions to parse embedded messages,
    // so this just appends the raw source to the main message.
    elseif ($p->type==2 && $data) {
        $plainmsg .= trim($data) ."\n\n";
    }

    // SUBPART RECURSION
    if ($p->parts) {
        foreach ($p->parts as $partno0=>$p2)
            $this->getPart($connection,$uid,$p2,$partno.'.'.($partno0+1));  // 1.2, 1.2.1, etc.
    }

}

Ben $ plainmsg getParts altındaki değişken () metodu ve dışarı yankılandı ettik Bu benim iki sunucularda ve üzerinde para cezası çalışacak neden boş ... Herkes biliyor benim müşteri? Bu ayarı PHP çeşit şey etkiliyor?

0 Cevap