2016-10-11 5 views
4

Я не могу показаться, чтобы выяснить последующие:Вложения в PHPMailer

  • Как сделать вложенный файл только конкретный файл (например: только файл .jpg может быть прикреплено).
  • Ограничить размер файла
  • После файла отправляется, он будет удален с сервера

    <div class="white-jumbotron"> 
        <div class="container"> 
    
    <form action="" method="post" enctype="multipart/form-data"> 
    
    <div class="form-group"> 
        <label for="name" class="col-sm-2 control-label">First Name</label> 
        <div class="col-sm-10"> 
        <input class="form-control" type="text" name="firstName" id="firstName" required /> 
        <p class='text-danger'></p> 
        </div> 
    </div> 
    
    <div class="form-group"> 
        <label for="name" class="col-sm-2 control-label">Last Name</label> 
        <div class="col-sm-10"> 
        <input class="form-control" type="text" name="lastName" id="lastName" required /> 
        <p class='text-danger'></p> 
        </div> 
    </div> 
    
    <div class="form-group"> 
        <label for="name" class="col-sm-2 control-label">Email</label> 
        <div class="col-sm-10"> 
        <input class="form-control" type="text" name="email" id="email" required /> 
        <p class='text-danger'></p> 
        </div> 
    </div> 
    
    <div class="form-group"> 
        <label for="name" class="col-sm-2 control-label">Resume upload</label> 
        <div class="col-sm-10"> 
        <input type="file" name="uploaded_file" id="uploaded_file"> 
        <br /> 
        </div> 
    </div> 
    <div class="col-sm-10"> 
        <input type="submit" name="submit" class="btn btn-green" /> 
    </div> 
    </form> 
    
    <?php 
    if(isset($_POST['submit'])) { 
    $emailAddress = '[email protected]'; 
    require "class.phpmailer.php"; 
    $msg = 'First Name:'.$_POST['firstName'].'<br /> Last name:'.$_POST['lastName'].'<br /> Email:'.$_POST['email'].'<br />'; 
        move_uploaded_file($_FILES["uploaded_file"]["tmp_name"], $_FILES["uploaded_file"]["name"]); 
        $mail = new PHPMailer(); 
        $mail->IsMail(); 
    
        $mail->AddReplyTo($_POST['email'], $_POST['name']); 
        $mail->AddAddress($emailAddress); 
        $mail->SetFrom($_POST['email'], $_POST['name']); 
        $mail->Subject = "Subject"; 
        $mail->MsgHTML($msg); 
        $mail->AddAttachment($_FILES["uploaded_file"]["name"]); 
        $mail->Send(); 
    
        echo'<script> window.location="../careers-sent.php"; </script> '; 
    } 
    ?> 
    
        </div> 
    </div> 
    
+0

что вы пробовали? по трем критериям? – Bhavin

+0

Создайте свой код в [примере загрузки, предоставленном PHPMailer] (https://github.com/PHPMailer/PHPMailer/blob/master/examples/send_file_upload.phps), и [используйте последнюю версию] (https: // github .com/PHPMailer/PHPMailer). – Synchro

+0

Будьте осторожны с вложением post-переменных непосредственно в ваше сообщение - если кто-то вводит большой код HTML-кода в поле 'firstName', тогда вы получите электронное письмо, которое выглядит совсем не так, как вы ожидаете. Вы должны сделать некоторые основные проверки здравомыслия на этих полях. – Simba

ответ

1

Прежде всего, разделить мнение (< Див ...) и обработки (<? Php ...) в двух разных файлах, чтобы избежать повторной отправки почты, когда пользователь нажимает F5.

1) При обработке поставить условие на имя файла

if (preg_match("/\\.jpg$/",$_FILES["uploaded_file"]["name"])) 
{ 
    //OK 
} 
else 
{ 
    //KO, redirect to error page 
} 

2) Не можете проверить здесь, но я предполагаю, что также может быть «размер» в атрибут объявления файла

3) Поставьте галочку на посыле

if ($mail->send()) 
{ 
    unlink($_FILES["uploaded_file"]["name"]); 
} 
else 
{ 
    //KO, log to debug file 
} 

EDIT: код интеграция

view.php (REN AME на удобство)

<div class="white-jumbotron"> 
    <div class="container"> 

    <form action="" method="post" action="val_mail.php" enctype="multipart/form-data"> 

    <div class="form-group"> 
     <label for="name" class="col-sm-2 control-label">First Name</label> 
     <div class="col-sm-10"> 
     <input class="form-control" type="text" name="firstName" id="firstName" required /> 
     <p class='text-danger'></p> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label for="name" class="col-sm-2 control-label">Last Name</label> 
     <div class="col-sm-10"> 
     <input class="form-control" type="text" name="lastName" id="lastName" required /> 
     <p class='text-danger'></p> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label for="name" class="col-sm-2 control-label">Email</label> 
     <div class="col-sm-10"> 
     <input class="form-control" type="text" name="email" id="email" required /> 
     <p class='text-danger'></p> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label for="name" class="col-sm-2 control-label">Resume upload</label> 
     <div class="col-sm-10"> 
     <input type="file" name="uploaded_file" id="uploaded_file"> 
     <br /> 
     </div> 
    </div> 
    <div class="col-sm-10"> 
     <input type="submit" name="submit" class="btn btn-green" /> 
    </div> 
    </form> 

val_mail.php (переименовать в удобное, но совпадает с выше action атрибутом формы)

<?php 
if(isset($_POST['submit'])) { 
    if (!preg_match("/\\.jpg$/",$_FILES["uploaded_file"]["name"])) 
    { 
    echo'<script> window.location="../error-attachment.php"; </script> '; exit;// create error page 
    } 
    $emailAddress = '[email protected]'; 
    require "class.phpmailer.php"; 
    $msg = 'First Name:'.$_POST['firstName'].'<br /> Last name:'.$_POST['lastName'].'<br /> Email:'.$_POST['email'].'<br />'; 
    move_uploaded_file($_FILES["uploaded_file"]["tmp_name"], $_FILES["uploaded_file"]["name"]); 
    $mail = new PHPMailer(); 
    $mail->IsMail(); 

    $mail->AddReplyTo($_POST['email'], $_POST['name']); 
    $mail->AddAddress($emailAddress); 
    $mail->SetFrom($_POST['email'], $_POST['name']); 
    $mail->Subject = "Subject"; 
    $mail->MsgHTML($msg); 
    $mail->AddAttachment($_FILES["uploaded_file"]["name"]); 
    if ($mail->Send()) 
    { 
    unlink($_FILES["uploaded_file"]["name"]); 
    } 
    else 
    { 
    echo'<script> window.location="../error-sent.php"; </script> '; exit;// create error page 
    } 

    echo'<script> window.location="../careers-sent.php"; </script> '; 
} 
?> 
+0

Могли бы вы изменить мой код, чтобы включить то, что вы написали. Я все еще учусь и получаю полный ноб на PHP. – Emanuel

+0

Я не могу отредактировать ваш код в сообщении вопроса, потому что я не знаю о вашей среде разработки, поэтому могут быть некоторые побочные эффекты ... Также, когда посетители SO достигают этой страницы, код в вопросе должен быть «ложным» для них чтобы лучше понять контекст ответов. Вы, возможно, noob на PHP, но знаете ли вы об общей алгоритмике (функции, условия, циклы, ...)? Если это так, вы можете легко адаптировать мой ответ к существующему коду, тем самым получив опыт. – Goufalite

+0

Я разделил форму (html и dive) на php и добавил php include. Однако я все еще запутался, где разместить код, который вы предоставили. Я пробовал и не сделал этого. Как только я добавлю код, файл больше не привязывается. – Emanuel

0

Try Это

if (isset($_FILES['uploaded_file']) && 
    $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK) { 
    $mail->AddAttachment($_FILES['uploaded_file']['tmp_name'], 
         $_FILES['uploaded_file']['name']); 
} 

пример: https://code.google.com/archive/a/apache-extras.org/p/phpmailer/wikis/AdvancedMail.wiki

+0

Можете ли вы включить это в код. Я попытался сделать это в форме, и он не работает для меня. – Emanuel

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