2014-01-30 4 views
0

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

$mail->attachment("images/hello.jpg"); 

ли кто-нибудь знает, как решить эту проблему, или любое альтернативное решение PHPMailer?

+1

[SwiftMailer] (http://www.swiftmailer.org) является одной из альтернатив. Но даже при этом вы захотите перенести файл на свой PHP-скрипт, обработать его, а затем прикрепить его. –

ответ

1

Что-то вроде этого на сервере обработки должны работать:

if ($_FILES['file']['error'] <= 0){ // success, no error 

    // read in the contents of temporary file 
    $file_contents = file_get_contents($_FILES['file']['tmp_name']); 

    // add the contents to phpmailer object, with original filename from upload 
    $mail->addStringAttachment($file_contents, $_FILES['file']['name']); 
} 

Это предполагает, что ваша форма элемент называется file, как:

<input type="file" name="file" /> 
+0

Это сработало, спасибо. У меня есть другой вопрос, знаете ли вы, как добавить индикатор выполнения, который будет указывать на уровень загрузки, или это новый уровень? Включит ли это использование AJAX? И у вас есть какая-то связь, где я мог бы что-то найти? –

+0

Это еще один уровень. Это возможно в некоторой степени в PHP 5.4 (см. Http://php.net/manual/en/session.upload-progress.php), но другие решения, вероятно, работают лучше. Например, https://github.com/Widen/fine-uploader. – Plenka

0

За эту работу вам нужно создать форму загрузки, см. http://www.php.net/manual/en/features.file-upload.post-method.php для получения дополнительной информации. После загрузки файла он может быть прикреплен к почте так же, как и в вашем примере. Затем имя файла заменяется именем пути и файла, в котором вы сохранили загрузку.

0

Попробуйте это, из http://www.finalwebsites.com/forums/topic/php-e-mail-attachment-script:

<?php 
function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) { 
    $file = $path.$filename; 
    $file_size = filesize($file); 
    $handle = fopen($file, "r"); 
    $content = fread($handle, $file_size); 
    fclose($handle); 
    $content = chunk_split(base64_encode($content)); 
    $uid = md5(uniqid(time())); 
    $name = basename($file); 
    $header = "From: ".$from_name." <".$from_mail.">\r\n"; 
    $header .= "Reply-To: ".$replyto."\r\n"; 
    $header .= "MIME-Version: 1.0\r\n"; 
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; 
    $header .= "This is a multi-part message in MIME format.\r\n"; 
    $header .= "--".$uid."\r\n"; 
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n"; 
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
    $header .= $message."\r\n\r\n"; 
    $header .= "--".$uid."\r\n"; 
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here 
    $header .= "Content-Transfer-Encoding: base64\r\n"; 
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; 
    $header .= $content."\r\n\r\n"; 
    $header .= "--".$uid."--"; 
    if (mail($mailto, $subject, "", $header)) { 
     echo "mail send ... OK"; // or use booleans here 
    } else { 
     echo "mail send ... ERROR!"; 
    } 
} 
?> 
+0

Хороший ответ, но OP использует класс 'PHPMailer', который абстрагирует большую часть работы, которую вы здесь показали. –

0

Возможно ли это, что вам нужно использовать AddAttachment() вместо вложения()?

$mail->addAttachment('/var/tmp/file.tar.gz');   // Add attachments 
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name 

Возможно, вам также необходимо убедиться, что путь к файлу верен в отношении вашего скрипта на сервере.

От https://github.com/Synchro/PHPMailer

Смежные вопросы