2

我正在尝试修改脚本以发送带有附件的电子邮件。它现在可以工作,但所有字段都是必需的,我想知道我缺少什么来制作它,所以这些字段不是必需的。

<?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;      
}
?>

我相信它与 foreach 有关,但如果我尝试将其取出,它会破坏整个代码。如果有人可以提供帮助,那就太好了。我进行验证的原因是因为我想在客户端而不是服务器端进行验证。

4

1 回答 1

2

您可以删除 for each 但是您必须单独请求每个发布的字段并一次处理/验证它们而不是循环,因为循环将所有帖子变量拉到本地变量。

此外,您不需要将 swift mailer 包括在循环内等,它们可以移到循环外,就像 $mailer = new transport start 行可以全部移出循环一样

编辑示例

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;
    }
}
?>
于 2013-03-14T14:21:06.847 回答