SMTP MIME-заголовок с вложением - PullRequest
1 голос
/ 02 ноября 2011

Я пытаюсь создать функцию PHP для отправки электронной почты с использованием SMTP с вложением.Я с трудом пытаюсь создать заголовки MIME, так как я хочу, чтобы тело включало текст в формате HTM и прикрепляемый файл. Я использую очень старую версию PHP (4.3.8), и это единственный методэто работает.Пробовал PEAR, но не будет аутентифицировать SMTP правильно.

Это то, что я до сих пор: я отредактировал этот код, так как теперь я получаю сообщение правильно, но файл поврежден.Я изменил файл в текстовый файл, и он начинает нормально, но затем появляется много мусора текста.

$newLine = "\r\n";
$attachment="myFile.zip";
$message = "<br><h1><center>TEST MESSAGE</center></h1>" ;   


    //Body
    $headers .= "Content-Type: multipart/mixed;" . $newLine;
    $headers .= "     boundary=\"_e9e06aa5-1550-464d-ace4-e85b575d1899_\"" . $newLine . $newLine;   
    $newLine . $newLine;

    $headers .= "--_e9e06aa5-1550-464d-ace4-e85b575d1899_" . $newLine;
    $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
    $headers .= "Content-Transfer-Encoding: quoted-printable" . $newLine;
    $headers .= "     boundary=\"_7fdd1316-6f68-41bb-93f7-134933fc9aad_\"" . $newLine . $newLine;

    $headers .=  $message . $newLine;

    //$headers .= "--_7fdd1316-6f68-41bb-93f7-134933fc9aad_--" . $newLine; // If I leave this line it appears in the end of the message area.

    //Attachment
    $headers .= "--_e9e06aa5-1550-464d-ace4-e85b575d1899_" . $newLine;

    $headers .= "Content-Transfer-Encoding: base64" . $newLine;
    $headers .= "Content-Type: text/plain;" . $newLine;
    $headers .= "Content-Disposition: attachment;" . $newLine;
    $headers .= "    filename=" . $attachment . $newLine . $newLine;

    $handle = fopen($attachment, "rb");
    $contents = '';
    while (!feof($handle)) {
        $contents .= fread($handle, filesize($attachment));
    }
    fclose($handle);

    $contents = base64_encode($contents);

    $headers .= $contents . $newLine;
    $headers .= "--_e9e06aa5-1550-464d-ace4-e85b575d1899_--" . $newLine;

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

А как насчет использования готового класса, например PHPMailer ?Это намного проще.И есть версия для PHP4.

Пример:

require_once '../class.phpmailer.php';

$mail = new PHPMailer();
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
$mail->AddAddress('whoto@otherdomain.com', 'John Doe');
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo('name@yourdomain.com', 'First Last');
$mail->Subject = 'PHPMailer Test Subject via mail()';
$mail->MsgHTML('Hello world');
$mail->AddAttachment('file.zip');
$mail->Send();

Создание пользовательских заголовков может вызвать головную боль.

0 голосов
/ 05 ноября 2017

Сценарий создания составного / смешанного сообщения MIME: https://github.com/breakermind/PhpMimeParser/blob/master/PhpMimeClient_class.php с вложениями и встроенными сообщениями, cc и bcc

$m = new PhpMimeClient();
// Add to
$m->addTo("email@star.ccc", "Albercik");
$m->addTo("adela@music.com", "Adela");
// Add Cc
$m->addCc("hello@email.be", "Ben");
$m->addCc("zonk@email.au");
// Add Bcc
$m->addBcc("boos@domain.com", "BOSS");    
// Add files inline
$m->addFile('photo.jpg',"zenek123");
// Add file
$m->addFile('sun.png');
// create mime
$m->createMime("Witaj księżniczko Alabambo",'<h1>Witaj księżniczko Alabambo <img src="cid:zenek123"> </h1>',"Wesołych świąt życzę!","Heniek Wielki", "heniek@domain.com");
// get mime
// $m->getMime();
// Show mime
echo nl2br(htmlentities($m->getMime()));
0 голосов
/ 01 сентября 2014

поток данных SMTP выглядит следующим образом: (пустые строки значимы и все заканчиваются CRLF)

To: <joeuser@roadrunner.com> 
From: mary@roadrunner.com 
MIME-Version: 1.0 
Subject:email subject line 
Content-Type: multipart/mixed; 
  boundary="Z--Z=_CGI_Perl_Cookbook_=1409529510"

This is a multi-part message in MIME format.

--Z--Z=_CGI_Perl_Cookbook_=1409529510
Content-Transfer-Encoding: quoted-printable 
Content-Type: text/plain;   charset="us-ascii" 

Email message 
text 

--Z--Z=_CGI_Perl_Cookbook_=1409529510
Content-Disposition: attachment; 
   filename=attachment.txt
Content-Type: plain/text 
Content-Transfer-Encoding: None 

sometext data
attached to
the email

--Z--Z=_CGI_Perl_Cookbook_=1409529510--

. << \n\.\n to terminate the email
...