Jump to content
php.lv forumi

Vairaku failu attachaa nosutishana over PHP mail()


Recommended Posts

Guest noisex
Posted

Mosh kads var palidzet izdomat, kaa atrisinat problemu ar vairaku failu attacha nosutishanu ar PHP mail(); f-ju...Ar 1u failu nerodas problemas, viss tiek nosutits, MIME type etc lietas ir OK, tipo ar 1u failu http://paste.php.lv/1842 ...tachu man vajaga ar n-tajiem :)

 

tipo forma ir:

 

<input type="file" name="pfile[]" class="ffield">

<input type="file" name="pfile[]" class="ffield">

....

<input type="file" name="pfile[]" class="ffield">

 

var but cik velas :)

 

f-ja, kas to apstaraa:

 

function mail_attach_sender($to, $from, $subject, $message, $files ,$lb="\n") {

 

$mime_boundary = "<<<:" . md5(uniqid(mt_rand(), 1));

$header = "From: ".$from;

if(is_array($pfile)) {

$header.= $lb;

$header.= "MIME-Version: 1.0".$lb;

$header.= "Content-Type: multipart/mixed;".$lb;

$header.= " boundary=\"".$mime_boundary."\"".$lb;

$content = "This is a multi-part message in MIME format.".$lb.$lb;

$content.= "--".$mime_boundary.$lb;

$content.= "Content-Type: text/plain; charset=\"windows-1257\"".$lb;

$content.= "Content-Transfer-Encoding: 7bit".$lb.$lb;

}

 

$content.= $message.$lb;

if(is_array($pfile)) {

$content.= "--".$mime_boundary.$lb;

foreach($files as $filename=>$filelocation) {

if(is_readable($filelocation)) {

$data = chunk_split(base64_encode(implode("", file($filelocation))));

$content.= "Content-Disposition: attachment;".$lb;

$content.= "Content-Type: Application/Octet-Stream;";

$content.= " name=\"".$filename."\"".$lb;

$content.= "Content-Transfer-Encoding: base64".$lb.$lb;

$content.= $data.$lb;

$content.= "--".$mime_boundary.$lb;

}

}

}

if(mail($to, $subject, $content, $header)) {

return TRUE;

}

return FALSE;

}

 

Nu vot fishka tada, ka nevaru dabut tagad tiem n-tjaiem failiem isti filename un MIME type prieksh boundary :) bet njus sutas visi faili, kaa 0.dat, 1.dat etc :)

Guest noisex
Posted

njus taa ari izsauc:

 

mail_attach_sender($to, $from, $subject, $message, $files ,$lb="\n");

 

bikku nokljudijos ar variabli, korochit files=pfile :)

Posted

Tad tu nepareizi izsauc. Izsaukumā parametrs nedrīkst būt izskatā ..., $lb="\n");

Parādi konkrētu rindiņu ar mainīgo veidiem, kurus tam padod.

Guest noisex
Posted

Njus problema jau nav taja ka visapr nestradaa, viss straaa visi atachi atnak, tikai vinjiem visiem nosaukums ir 0.dat, 1.dat, 2.dat etc, nu cik daudz lauku, tik daudz to failu ar .dat.

 

ar 1u failu ir easy nolasit vinja filename, type, etc, ar vairakiem man neizdodas - tur ir ta problema, vienk esmu iestredzis -nav ideju vairs :)

 

bet nu ok, varu izlabot to vietu.

Posted
Tad tu nepareizi izsauc. Izsaukumā parametrs nedrīkst būt izskatā  ..., $lb="\n");

Parādi konkrētu rindiņu ar mainīgo veidiem, kurus tam padod.

16316[/snapback]

 

vareet jau var to dariit, tikai tas reaali funkcijai pados veertibbu true

Posted
vareet jau var to dariit, tikai tas reaali funkcijai pados veertibbu true

16322[/snapback]

Vai tad? Manuprāt gan "\n", jo lietota jau piešķiršana (=) nevis salīdzināšana (==).

Bet mans nolūks iepriekš bija pateikt, ka tas izsaukums kā viņš parādīja, neko taču neizsaka kādi mainīgie tiek padoti.

Guest noisex
Posted
Vai tad? Manuprāt gan "\n", jo lietota jau piešķiršana (=) nevis salīdzināšana (==).

Bet mans nolūks iepriekš bija pateikt, ka tas izsaukums kā viņš parādīja, neko taču neizsaka kādi mainīgie tiek padoti.

16331[/snapback]

 

tu gribi lai paradu kadas values es padodu uz to f-ju ?

Posted (edited)

chunk_split(base64_encode(implode("", file($filelocation))));

nomainam uz

chunk_split(base64_encode(file_get_contents($filelocation)));

 

$content.= "Content-Type: Application/Octet-Stream;";
$content.= " name=\"".$filename."\"".$lb;

 

nomainam uz

 

$content.= "Content-Type: ".$files[$idx]['type']."; name=\"".$files[$idx]['name']."\"".$lb;

Edited by Delfins
Posted

tikai jāpiemin, ka $files masīvu jāpartaisa, ka tas būtu līdzīgs $_FILES

 

foreach( $files AS $idx => $file )
{
   $files[$idx] = Array();
   $files[$idx]['type'] = mime_content_type($file);
   $files[$idx]['name'] = $file;
}

Guest noisex
Posted

Nu tagad final relize, pateicoties Delfinam :)

 

<!--///////////////////// HTML INPUTS ////////////////////////-->

<input type="file" name="pfile[]" class="ffield">
<input type="file" name="pfile[]" class="ffield">
<input type="file" name="pfile[]" class="ffield">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="<? echo ($max_file_size * 1024) ?>">

 

<?
######## SEND EMAIL WITH MULTIPLE ATTACHMENTS #########

$from = $name."<".$mail_.">";
$to = $email;
$message = $body;
$files = $_FILES['pfile'];

mail_attach($to, $from, $subject, $message, $files, $lb="\n");

function mail_attach($to, $from, $subject, $message, $files ,$lb="\n") {
    $mime_boundary = "-----" . md5(uniqid(mt_rand(), 1));
    $header = "From: ".$from;
    if(!empty($files)) {
        $header.= $lb;
        $header.= "MIME-Version: 1.0".$lb;
        $header.= "Content-Type: multipart/mixed;".$lb;
        $header.= ' boundary="'.$mime_boundary.'"'.$lb;
        $content = "This is a multi-part message in MIME format.".$lb;
        $content.= "--".$mime_boundary.$lb;
        $content.= "Content-Type: text/plain; charset=windows-1257; format=flowed".$lb;
        $content.= "Content-Transfer-Encoding: 7bit".$lb.$lb;
    }
    $content.= $message.$lb;
    if(!empty($files)) {
        foreach( $files['tmp_name'] AS $idx => $tmp_name ) {
            if(is_readable($files['tmp_name'][$idx])) {
                $content.= "--".$mime_boundary.$lb;
                $data = chunk_split(base64_encode(file_get_contents($files['tmp_name'][$idx])));
                $content.= "Content-Disposition: attachment;".$lb;
                $content.= "Content-Type: ".$files['type'][$idx]."; name=\"".$files['name'][$idx]."\"".$lb;
                $content.= "Content-Transfer-Encoding: base64".$lb.$lb;
                $content.= $data.$lb;
            }
        }
        $content.= "--".$mime_boundary.'--'.$lb;
    }
    return mail($to, $subject, $content, $header );
}  ?>

Posted

NB: neesi mēģinājis sūtīt Bcc/Cc headerus ar vairākiem lietotājiem? man nenosūta

(mēģināju sadalīt gan ar ',', ', ', gan ",\n" u.c.)

kā tur īsti pēc specifikācijas un kas beigu beigās apstrāda tos headerus - serveris vai maileris?

Posted
NB: neesi mēģinājis sūtīt Bcc/Cc headerus ar vairākiem lietotājiem? man nenosūta

(mēģināju sadalīt gan ar ',', ', ', gan ",\n" u.c.)

kā tur īsti pēc specifikācijas un kas beigu beigās apstrāda tos headerus - serveris vai maileris?

16419[/snapback]

 

SMTP apstrādā.

Mailers tikai saliek headerus un caur soketiem nosuuta to SMTP serverim :)

 

 

To: mails@aaa.lv, (\n) ...

CC: [tas pats]

 

vajadzētu iet... gļukains SMTP tev ?

×
×
  • Create New...