2011-12-27 3 views
4

Я изучаю использование SwiftMailer, и у меня возникли проблемы с приложением для работы с типа ввода . Не следует ли мне нужно всего лишь:PHP-приложение с использованием SwiftMailer

<input name="attachment" id="attachment" type="file"> 

затем

$message = Swift_Message::newInstance() 
->attach(new Swift_Message_Attachment(new Swift_File($file), $filename,)); 

Вот мой полный код

<?php 
if (!empty($_POST)) { 

$success = $error = false; 

$post = new stdClass; 

$file = $_FILES["attachment"]["tmp_name"]; //"attachment" is the name of your input field, "tmp_name" gets the temporary path to the uploaded file. 

$filename = $_FILES["attachment"]["name"]; //"name" gets the filename of the uploaded file.   

foreach ($_POST as $key => $val) 
    $post->$key = trim(strip_tags($_POST[$key])); 

    if (empty($post->name) OR empty($post->email)) 
    $error = true; 

else { 

    $dir = dirname(__FILE__); 

    ob_start(); 
    require_once($dir.'/pdf.php'); 
    $pdf_html = ob_get_contents(); 
    ob_end_clean(); 

    require_once($dir.'/dompdf/dompdf_config.inc.php'); 

    $dompdf = new DOMPDF(); 
    $dompdf->load_html($pdf_html); 
    $dompdf->render(); 
    $pdf_content = $dompdf->output(); 

    ob_start(); 
    require_once($dir.'/html.php'); 
    $html_message = ob_get_contents(); 
    ob_end_clean(); 

    require_once($dir.'/swift/swift_required.php'); 

    $mailer = new Swift_Mailer(new Swift_MailTransport()); 

    $message = Swift_Message::newInstance() 
        ->setSubject('Order Entry') // Message subject 
        ->setTo(array('[email protected]' => 'Eric Hilse')) // Array of people to send to 
        ->setFrom(array('[email protected]' => 'PAi Order Entry')) 
        ->setBody($html_message, 'text/html') // Attach that HTML message from earlier 
        ->attach(Swift_Attachment::newInstance($pdf_content, 'design.pdf', 'application/pdf')); // Attach the generated PDF from earlier 
        ->attach(new Swift_Message_Attachment(new Swift_File($file), $filename)); 
    // Send the email, and show user message 
    if ($mailer->send($message)) 
     $success = true; 
    else 
     $error = true; 

} 

} 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>PAi Cap &amp; Tee Art Pack Order Form</title> 
<link href="css/style.css" rel="stylesheet" type="text/css" /> 
</head> 

<body> 

<div id="container"> 
      <div id="logo"> 
       <img src="images/pailogo.png" id="logo" /> 
      </div> 
     <h1><abbr title="Paramount Apparel International">PAi</abbr> Cap &amp; Tee Art Pack Order Form</h1> 

     <?php if ($success) { ?> 
      <div class="message success"> 
       <h4>Congratulations! It worked! Your order has been sent.</h4> 
      </div> 
     <?php } elseif ($error) { ?> 
      <div class="message error"> 
       <h4>Sorry, an error occurred. Try again!</h4> 
      </div> 
     <?php } ?> 

     <form method="post" action="" enctype="multipart/form-data"> 
      <fieldset> 
       <legend>Please fill in the following form:</legend> 
        <label for="name">Your Name:<span class="required">*</span></label> 
        <input type="text" name="name" id="name" class="input" /> 

        <label for="email">Your Email:<span class="required">*</span></label> 
        <input type="text" name="email" id="email" class="input" />  

     <br /> 

        <label for="artpacknumber">Art Pack Number:<span class="required">*</span></label> 
        <input type="text" name="artpacknumber" id="artpacknumber" class="input" />   

        <label for="language">New Or Revise?<span class="required">*</span></label> 
        <select name="language" id="language"> 
         <option value="NEW">New</option> 
         <option value="REVISE">Revise</option> 
        </select> 

     <br /> 

        <label for="duedate">Due Date:<span class="required">*</span></label> 
        <input type="text" name="duedate" id="duedate" class="input" /> 

        <label for="dateentered">Date Entered:<span class="required">*</span></label> 
        <input type="text" name="dateentered" id="dateentered" class="input" /> 

     <br /> 

        <label for="designname">Design Name:<span class="required">*</span></label> 
        <input type="text" name="designname" id="designname" class="input" /> 

     <br /> 

        <label for="customer">Customer:<span class="required">*</span></label> 
        <input type="text" name="customer" id="customer" class="input" /> 

        <label for="account">Account:<span class="required">*</span></label> 
        <input type="text" name="account" id="account" class="input" /> 

     <br /> 

        <label for="salesrep">Sales Rep:<span class="required">*</span></label> 
        <input type="text" name="salesrep" id="salesrep" class="input" /> 

        <label for="extension">Extension:<span class="required">*</span></label> 
        <input type="text" name="extension" id="extension" class="input" /> 

     <br /> 

        <label class="commentslabel" for="comments">Comments:<span class="required">*</span></label> 
        <textarea name="comments" id="comments" rows="4" cols="40"></textarea> 

     <br /> 

        <label for="attachment">File Upload<br />.</label> 
        <input name="attachment" id="attachment" type="file"> 

     <br />   

        <input type="submit" class="submit" id="submit" value="Submit" /> 

     </fieldset> 

    </form> 

</div> 

Вот мои новые ошибки [27-DEC- 2011 14:51:58] PHP Устарел: функция set_magic_quotes_runtime() устарела в/Applications/M AMP/htdocs/paipdf2/dompdf/lib/class.pdf.php on line 4332

[27-Dec-2011 14:51:58] PHP Устарел: функция set_magic_quotes_runtime() устарела в/Applications/MAMP/htdocs /paipdf2/dompdf/lib/class.pdf.php on line 4348

[27-Dec-2011 14:51:58] PHP Warning: require_once (/ Applications/MAMP/htdocs/paipdf2/dompdf/include/swift_message_attachment .cls.php) [function.require-once]: не удалось открыть поток: нет такого файла или каталога в /Applications/MAMP/htdocs/paipdf2/dompdf/dompdf_config.inc.php в строке 194

[27- Dec-2011 14:51:58] PHP Неустранимая ошибка: require_once() [function.require]: Не удалось открыть требуемое '/ Applications/MAMP/htdocs/pai pdf2/dompdf/include/swift_message_attachment.cls.php '(include_path ='.:/Applications/MAMP/bin/php/php5.3.6/lib/php ') в/Applications/MAMP/htdocs/paipdf2/dompdf/dompdf_config. inc.php on line 194

+3

возможно дубликат [вложения Swift Mailer] (http://stackoverflow.com/questions/4667822/swift-mailer-attachments) - понять, где загруженный файл идет в, см : http://php.net/manual/en/features.file-upload.php – hakre

ответ

1

Я предполагаю, что $file и $filename не имеют фактического значения пути и имени файла.

Предполагая вид проводки сделано правильно, чтобы получить доступ к пути из загруженного файла вы должны использовать $_FILES суперглобальном массив, например, так:

$file = $_FILES["attachment"]["tmp_name"]; //"attachment" is the name of your input field, "tmp_name" gets the temporary path to the uploaded file. 
$filename = $_FILES["attachment"]["name"]; //"name" gets the filename of the uploaded file. 
$message = Swift_Message::newInstance() 
->attach(new Swift_Message_Attachment(new Swift_File($file), $filename)); 

Документация: http://www.php.net/manual/en/reserved.variables.files.php

+0

Я добавил свой полный код с тем, что вы сказали, и по какой-то причине он сломал его полностью.Можете ли вы сказать, что я сделал не так? – ehilse

+0

Вы уверены, что ваш код движется мимо второго оператора 'if'? Кроме того, если какие-либо ошибки или предупреждения отображаются, пожалуйста, разделите их тоже. –

+0

Это единственная ошибка, которую я получил ошибку PHP Parse: ошибка синтаксиса, неожиданный T_OBJECT_OPERATOR в /Applications/MAMP/htdocs/paipdf2/form.php в строке 49 – ehilse

1

хорошо, есть проблема при включении DOMpdf перед включением Swiftmailer.

Я не узнал, почему это неправильно, но у меня есть решение.

Изменить этот мир кода в 'dompdf_config.inc.php':

function DOMPDF_autoload($class) { 
    $filename = mb_strtolower($class) . ".cls.php"; 
    require_once(DOMPDF_INC_DIR . "/$filename"); 
} 

к этому:

function DOMPDF_autoload($class) { 
    $filename = mb_strtolower($class) . ".cls.php"; 
    if (file_exists(DOMPDF_INC_DIR . "/$filename")) { 
    require_once(DOMPDF_INC_DIR . "/$filename"); 
    } 
} 

Afther что изменение это работает, и вы можете отправить свой PDF с Swiftmailer.

Дополнительная информация. Как я DOMPDF:

require_once("lib/dompdf/dompdf_config.inc.php"); 
spl_autoload_register('DOMPDF_autoload'); 
$dompdf = new DOMPDF(); 
$dompdf->load_html($pdfhtml); 
$dompdf->set_paper('a4', 'portrait'); 
$dompdf->render(); 
$dompdf->stream("invoice", array('Attachment'=>0)); 
Смежные вопросы