Hej Skicka med följande header i mailet: Jag har testat och testat och testat men får det inte att bli bra. Här är ett problem:Bifoga ett pdf dokument i ett mail
Jag har ett problem. Jag håller på att bygga ett script i php som använder funktionen mail().
Tanken är att mailet ska bifoga en pdf fil som ett annat script lagt på servern.
Problemet är att antingen skickas mailet och allt hamnar i meddelandet eller så bifogas allt som en pdf fil.
Så pdf filen när man öppnar den i notepad innehåller både pdfen plus meddelande texten.
Hur ska man göra för att skilja meddelandet från filen?
Mvh
KjellSv: Bifoga ett pdf dokument i ett mail
<code>
Content-Type: multipart/mixed;
boundary="NextPart"
</code>
Sedan i mailets kropp har du flera avsnitt med egna headers:
<code>
This is a multi-part message in MIME format.
--NextPart
Content-Type: text/plain;
format=flowed;
charset="iso-8859-1";
reply-type=original
Content-Transfer-Encoding: 8bit
Här kommer mailets textdel.
--NextPart
Content-Type: application/pdf;
name="dokument.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="dokument.pdf"
JVBERi0xLjMKJcfsj6IKOCAwIG9iago8PC9MZW5ndGggOSAwIFIvRmlsdGVyIC9GbGF0ZURlY29k
ZT4+CnN0cmVhbQp4nO1cy3IdtxHd36+YpVyVCw/eQFbxQ3blbdlMsvHGoixalkhblJxUfiRflG/I
FzD5hKzT88AMcHEA4g4vbUZJqUpiNYFGA919utGN0euuZ7zrhz/zv+eXu9e79z833cWbXc+c1fQb
...
(PDF-filen kodad med base64)
--NextPart--
</code>Sv:Bifoga ett pdf dokument i ett mail
Min kod ser ut ungefär så här:
<code>
function skickaMittMail($file, $vepost){
$boundary = "----=_NextPart_". md5(uniqid(time()));
$to = $vepost;
$headers = "From: Fiskekortet <kundtjanst@fiskekortet.com>\n";
$headers .= 'MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="'.$boundary.'"';
$message = "This is a multi-part message in MIME format.\n\n";
$message .= $boundary."\n";
$message .='Content-type: text/plain;
format=flowed;
charset="iso-8859-1";
reply-type=original
Content-Transfer-Encoding: 8bit';
$message .="\n\n";
$message .= "texten i bodyn\n\n";
if(file_exists($file))
{
$message .= $boundary."\n";
$message .= 'Content-Type: application/pdf; name="'.$file.'"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;\n\n';
$filedata = implode(file($file), '');
$message .= chunk_split(base64_encode($filedata));
}
$message .= $boundary;
mail($to, "Meddelande med pdf", $message, $headers);
}
</code>
Jag vet att koden ser lite kladdig ut men nu ser jag inget av mailet om jag inte tittar på meddelande källa.
Hur får man headers inne i meddelandet att förstå att de är headrers?
Det är säkert det som är felet.
Mvh
KjellSv: Bifoga ett pdf dokument i ett mail
$message .= 'Content-Type: application/pdf; name="'.$file.'"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;\n\n';
Inne i strängar omgärdade av 'enkelt citattecken' tolkas inte \n som radbrytning utan som de två tecknen \ och n. Pröva därför att ändra till $message .= "Content-Type: application/pdf; name='$file'
Content-Transfer-Encoding: base64
Content-Disposition: attachment\n\n";
Dessutom fungerar "boundary" som så att man lägger till -- före de inre avgränsningarna, och även -- efter den avslutande:
<code>MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="xyz"
--xyz
Content-Type: ...
...
--xyz
Content-Type: ...
...
--xyz--</code>
Alltså: $message .= '--' . $boundary."\n"; // Inre
$message .= '--' . $boundary . '--'; // Avslutande