E-posta posta Eklenti () ile Trouble

3 Cevap php

Ben ek olarak benim sunucuda bir görüntüyü e-çalışıyorum. Bu görevi başarmak için, benim sunucudan "ekran" olarak adlandırılan bir dizinde bulunan ("php.jpg" olarak adlandırılır) bir JPG kapmak ve bir eki olarak gönderir aşağıdaki PHP komut dosyası kullanılır.

<?php

$path = "screenshots/php.jpg";
$fp = fopen($path, 'r');
do //we loop until there is no data left
{
        $data = fread($fp, 8192);
        if (strlen($data) == 0) break;
        $content .= $data;
      } while (true);
$content_encode = chunk_split(base64_encode($content));


$mime_boundary = "<<<--==+X[".md5(time())."]";

$headers .= "From: Automatic <an.e.mail@domain.net>\r\n"; 
$headers .= "To: SomeName <me@gmail.com>\r\n"; 

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " boundary=\"".$mime_boundary."\"";

$message .= "This is a multi-part message in MIME format.\r\n";
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "\r\n";
$message .= "Email content and what not: \r\n";
$message .= "This is the file you asked for! \r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: image/jpeg;\r\n";
$message .= " name=\"php.jpg\"\r\n";
$message .= "Content-Transfer-Encoding: quoted-printable\r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= " filename=\"php.jpg\"\r\n";
$message .= "\r\n";
$message .= $content_encode;
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$ok = mail("me@gmail.com", "file by email", $message, $headers);

Genel olarak, komut çalışır. Yukarıda belirtilen mesaj metnini ve bir JPG eki içeren benim kutunuza bir e-posta alacaksınız. Yığın taşması Ben yeni olduğum için bana bir fotoğraf sonrası izin vermez, ancak mesajın bir ekran görüntüsü burada mevcuttur: http://i48.tinypic.com/xfuee0.png

Ben eki görüntülemek için çalışırken sorun oluşur. Eki tıklayarak sadece yeni bir tarayıcı penceresi açılır ve eksik bir görüntü simgesi görüntüler.

Eğer görünmesini görüntüyü önleyecek benim komut ile herhangi bir sorun görüyor musunuz?

Herhangi bir bilgi harika olurdu. Teşekkürler!

3 Cevap

Gelecekte bu yazı üzerinde gelen herkese, sorunun base64 ayarlanmış olmalıdır "Content-Transfer-Encoding" geldi.

$message .= "Content-Transfer-Encoding: quoted-printable\r\n";

olur:

$message .= "Content-Transfer-Encoding: base64\r\n";

Eğer görüntü görmüyoruz neden bir olası neden görebilirsiniz. ((Daha fazla olabilir!).)

Değiştirmeyi deneyin:

$message .= "--".$mime_boundary."\r\n"; 

karşı

$message .= "--".$mime_boundary."--\r\n"; 

For the last line before the call karşı mail (ie the "epilogue" boundary).

Üç şey dışarı atlamak:

Bir değişkenler $content ve $message ve ilk append $headers açıkça yeni bir değer ayarlamak olmamasıdır. Yani neden olmasın, bir

$headers = "From: Automatic <an.e.mail@domain.net>\r\n";

yerine benzeri var:

$headers .= "From: Automatic <an.e.mail@domain.net>\r\n";

Yani artık bazı şeyler değişkenler asılı olduğu olasılığını ortadan kaldırır.

İkinci \r\n yerine, düz \n, hangi hatta Windows, her sistem üzerinde çalışması gerektiğini olmasıdır. Ben bu bir sorun olsa da şüpheliyim.

Üçüncü kapanış mim sınır açık olarak aynı değil mi.