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 = 'myemail@gmail.com';
 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>

解决方法:

首先,将视图(< div ...)和处理(<?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
}

编辑:代码集成

view.php(方便地重命名)

<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 = 'myemail@gmail.com';
  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> ';
}
?>
上一篇:php – 带有str_replace的HTML电子邮件模板


下一篇:关于thinkphp3.2.3集成phpmailer