PHP: Как отправить электронную почту с вложением с помощью smtp-настроек?

Я успешно отправляю письма, используя следующий код. Но теперь я хочу прикрепить текстовый файл (пример: test.txt) с помощью электронной почты. Есть идеи?

require_once "Mail.php"; $from = "Usman <from@example.com>"; $to = "Naveed <to@example.com>"; $subject = "subject"; $body = ""; $host = "smtp.gmail.com"; $username = "username"; $password = "password"; $headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); $smtp = Mail::factory( 'smtp', array('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password ) ); $mail = $smtp->send( $to, $headers, $body ); if ( PEAR::isError($mail) ) { echo( "<p>" . $mail->getMessage() . "</p>" ); } else { echo( "<p>Message successfully sent!</p>" ); } 

Solutions Collecting From Web of "PHP: Как отправить электронную почту с вложением с помощью smtp-настроек?"

Нашел этот код как один из первых хитов поиска google://pear mail attachment .

 include('Mail.php'); include('Mail/mime.php'); $text = 'Text version of email'; $html = '<html><body>HTML version of email</body></html>'; $file = './files/example.zip'; $crlf = "rn"; $hdrs = array( 'From' => 'someone@domain.pl', 'To' => 'someone@domain.pl', 'Subject' => 'Test mime message' ); $mime = new Mail_mime($crlf); $mime->setTXTBody($text); $mime->setHTMLBody($html); $mime->addAttachment($file,'application/octet-stream'); $body = $mime->get(); $hdrs = $mime->headers($hdrs); $mail =& Mail::factory('mail', $params); $mail->send('mail@domain.pl', $hdrs, $body); в include('Mail.php'); include('Mail/mime.php'); $text = 'Text version of email'; $html = '<html><body>HTML version of email</body></html>'; $file = './files/example.zip'; $crlf = "rn"; $hdrs = array( 'From' => 'someone@domain.pl', 'To' => 'someone@domain.pl', 'Subject' => 'Test mime message' ); $mime = new Mail_mime($crlf); $mime->setTXTBody($text); $mime->setHTMLBody($html); $mime->addAttachment($file,'application/octet-stream'); $body = $mime->get(); $hdrs = $mime->headers($hdrs); $mail =& Mail::factory('mail', $params); $mail->send('mail@domain.pl', $hdrs, $body); в include('Mail.php'); include('Mail/mime.php'); $text = 'Text version of email'; $html = '<html><body>HTML version of email</body></html>'; $file = './files/example.zip'; $crlf = "rn"; $hdrs = array( 'From' => 'someone@domain.pl', 'To' => 'someone@domain.pl', 'Subject' => 'Test mime message' ); $mime = new Mail_mime($crlf); $mime->setTXTBody($text); $mime->setHTMLBody($html); $mime->addAttachment($file,'application/octet-stream'); $body = $mime->get(); $hdrs = $mime->headers($hdrs); $mail =& Mail::factory('mail', $params); $mail->send('mail@domain.pl', $hdrs, $body); 

Если вы также используете модуль PHP PEAR Mail_Mime, он обеспечивает соответствующую обработку и кодировку для включения вложений в составе вашей электронной почты.

Отправка электронной почты с PHP всегда немного напоминает борьбу. Если вы сможете их использовать, я бы порекомендовал одну из этих двух почтовых библиотек для PHP:

  • PHP Mailer
  • Swiftmailer

вот код, который вы ищете:

 $from = "Robert Davis <robertdavis@pobox.com>"; $to = "Sam Hill <sam.hill@aol.com>"; $subject = 'Test mime message with an attachment'; $headers = array ('From' => $from,'To' => $to, 'Subject' => $subject); $text = 'Text version of email';// text and html versions of email. $html = '<html><body>HTML version of email. <strong>This should be bold</strong></body> </html>'; $file = './sample.txt'; // attachment $crlf = "\n"; $mime = new Mail_mime($crlf); $mime->setTXTBody($text); $mime->setHTMLBody($html); $mime->addAttachment($file, 'text/plain'); //do not ever try to call these lines in reverse order $body = $mime->get(); $headers = $mime->headers($headers); $host = "sasl.smtp.pobox.com"; $username = "robertdavis@pobox.com"; $password = "Kdu48Adi3"; $smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username,'password' => $password)); $mail = $smtp->send($to, $headers, $body); if (PEAR::isError($mail)) { echo("<p>" . $mail->getMessage() . "</p>"); } else { echo("<p>Message successfully sent!</p>"); } ?> 

Кажется, вы используете пакет PEAR Mail.

Взгляните на объект Mail_Mine, который делает то, что вы пытаетесь сделать, и имеет простой способ добавления вложений (просто вызвать addAttachments).

http://pear.php.net/manual/en/package.mail.mail-mime.php