PHP-вложение с использованием SwiftMailer - PullRequest
4 голосов
/ 27 декабря 2011

Я учусь использовать 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('ehilse@paifashion.com' => 'Eric Hilse')) // Array of people to send to
                   ->setFrom(array('no-reply@paifashion.com' => '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 декабря 2011 14:51:58] PHP устарел: функция set_magic_quotes_runtime () устарела в /Applications/MAMP/htdocs/paipdf2/dompdf/lib/class.pdf.php в строке 4332

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

[27 декабря 2011 14:51:58] Предупреждение PHP: 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]: не удалось открыть обязательный файл '(include_path ='.: / Applications / MAMP / bin / php / php5.3.6 / lib / php ') в /Applications/MAMP/htdocs/paipdf2/dompdf/dompdf_config.inc.php в строке 194

Ответы [ 2 ]

1 голос
/ 17 мая 2014

Что ж, есть проблема при включении 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");
  }
}

После того, как это изменение сработает, вы можете отправить свой 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));
1 голос
/ 27 декабря 2011

Я предполагаю, $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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...