Using swiftmailer and sending attachments

杀马特。学长 韩版系。学妹 提交于 2019-12-02 02:32:59

问题


I am trying to modify a script to send a email with an attachment. It works right now but all the fields are required and I was wondering what I am missing to make it so the fields are not required.

<?php
if (($_POST)) {

$success = $error = false;

$post = new stdClass;

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

    $dir = dirname(__FILE__);

    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('Imperial Order') // Message subject
                   ->setTo(array($post->email => $post->name, 'ehilse@paifashion.com' => 'Janet McCauley')) // Array of people to send to
                   ->setFrom(array('noreply@paifashion.com' => 'Imperial Order'))
                   ->setBody($html_message, 'text/html') // Attach that HTML message from earlier
                   ->attach(Swift_Attachment::fromPath($_FILES['attachment']['tmp_name'])->setFilename($_FILES['attachment']['name']));

    // Send the email, and show user message
    if ($mailer->send($message))
        $success = true;
    else
        $error = true;      
}
?>

I believe it has something to do with the foreach but if I try taking it out it breaks the whole code. If anyone can help that would be great. The reason I am taking out the validation is because i'm wanting to do it on the client side instead of server side.


回答1:


you can remove the for each but then you'll have to request each posted field individually and process/validate them one at a time instead of in a loop as the loop is pulling all the post vars to local vars.

Also you don't need to require the swift mailer includes etc inside of the loop they can be moved outside of the loop as can the $mailer = new transport start line that can all go outside of the loop

EDIT WITH EXAMPLE

if (isset($_POST)) { //BAD BAD BAD way of checking there's better ways

$success = $error = false;

$input1 = $_POST['input1'];
$input2 = $_POST['input2'];
$input3 = $_POST['input3'];
$input4 = $_POST['input4'];

    $dir = dirname(__FILE__);
    // THIS BIT IS RETARDED BUT LEAVING IT IN FOR NOW
    ob_start();
    require_once($dir.'/html.php');
    $html_message = ob_get_contents();
    ob_end_clean();
    // END RETARDED BIT
    require_once($dir.'/swift/swift_required.php');
    $mailer = new Swift_Mailer(new Swift_MailTransport());
    if (isset($_FILES) && strlen($_FILES['attachment']['name']) > 0) { //here we're checking that there is attachments if there are then we're going to do the attach sw code
        $message = Swift_Message::newInstance()
                   ->setSubject('Imperial Order') // Message subject
                   ->setTo(array($input1 => $input2, 'ehilse@paifashion.com' => 'Janet McCauley')) // Array of people to send to
                   ->setFrom(array('noreply@paifashion.com' => 'Imperial Order'))
                   ->setBody($html_message, 'text/html') // Attach that HTML message from earlier
                   ->attach(Swift_Attachment::fromPath($_FILES['attachment']['tmp_name'])->setFilename($_FILES['attachment']['name']));
    } else {
        //non attach sw code
        $message = Swift_Message::newInstance()
                   ->setSubject('Imperial Order') // Message subject
                   ->setTo(array($input1 => $input2, 'ehilse@paifashion.com' => 'Janet McCauley')) // Array of people to send to
                   ->setFrom(array('noreply@paifashion.com' => 'Imperial Order'))
                   ->setBody($html_message, 'text/html') // Attach that HTML message from earlier
    }
    //there's better ways of doing the above but as an example this will suffice.
    // Send the email, and show user message
    if ($mailer->send($message)) {
        $success = true;
    } else {
        $error = true;
    }
}
?>


来源:https://stackoverflow.com/questions/15411805/using-swiftmailer-and-sending-attachments

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!