Я пытаюсь отправить электронное письмо с PHP, используя почтовый пакет PEAR с вложением. Электронная почта успешно отправляется с кодом, который я получил из Интернета. Однако приложение не отправляется или не прикрепляется. Где я ошибаюсь, ниже мой код.
<?php require_once "Mail.php"; require_once "Mail/mime.php"; $from = "<my.name@company.com>"; $to = "<myname@gmail.com>"; $subject = "Testing email from PHP with attachment"; $body = "Testing email from PHP with attachment"; $file = "invoices/PRINV7_3.pdf"; $host = "host"; $port = "25"; $username = "username"; $password = "password"; $headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); $mime = new Mail_mime(); if ($mime->addAttachment($file,'application/pdf')){ echo "attached successfully! </br>"; } else { echo "Nope, failed to attache!! </br>"; } $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, '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>"); } ?>
Я не проверял этот код, поэтому, если не работает, мне жаль
include 'Mail.php'; include 'Mail/mime.php'; $text = 'Text version of email'; $html = '<html><body>HTML version of email</body></html>'; $file = '/home/richard/example.php'; $crlf = "\n"; $hdrs = array( 'From' => 'you@yourdomain.com', 'Subject' => 'Test mime message' ); $host = "host"; $port = "25"; $username = "username"; $password = "password"; $mime = new Mail_mime(array('eol' => $crlf)); $mime->setTXTBody($text); $mime->setHTMLBody($html); $mime->addAttachment($file, 'text/plain'); $body = $mime->get(); $hdrs = $mime->headers($hdrs); $mail = & Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password)); $mail->send('postmaster@localhost', $hdrs, $body);
Я считаю, что вам нужно добавить заголовки из вашего объекта $mime
в ваши $headers
$attachmentheaders = $mime->headers($headers);
а затем измените свой почтовый вызов:
$mail = $smtp->send($to, $attachmentheaders, $body);
Вот учебник, который может помочь: http://www.html-form-guide.com/email-form/php-email-form-attachment.html
Это рабочий код из одного из моих приложений:
/** * * @param type $recipient * @param type $subject * @param type $message * @param type $attachment * * To make this mail PEAR work, I needed to do: * pear install mail * pear install Net_SMTP * pear install Mail_Mime * */ public function sendmail($recipient, $subject, $message, $attachment = '') { require_once "Mail.php"; require_once "Mail/mime.php"; $from = "Dispatcher <server@mymailserver.com>"; $host = "smtp.mymailserver.com"; $port = "587"; $username = "mailuser"; $password = "password"; $headers = array ('From' => $from, 'To' => $recipient, 'Subject' => $subject); if ($attachment != '') { $crlf = "\n"; $mime = new Mail_mime($crlf); $mime->setTXTBody($message); $mime->addAttachment($attachment, 'application/pdf'); $body = $mime->get(); $headers = $mime->headers($headers); } else { $body = $message; } $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password)); $smtp->send($recipient, $headers, $body); }