【问题标题】:Attachments in phpMailerphpMailer 中的附件
【发布时间】:2016-10-11 06:11:45
【问题描述】:

我似乎无法弄清楚以下内容:

  • 如何使附加文件仅为特定文件(例如:仅 可以附加一个 .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>
    

【问题讨论】:

  • 到目前为止您尝试过什么?满足你的三个标准?
  • 小心在邮件中直接嵌入帖子变量——如果有人在firstName 字段中输入一大堆 HTML 代码,那么您将收到一封看起来与您完全不同的电子邮件重新期待。您应该对这些字段进行一些基本的完整性检查。
  • 另外,如果您要做的只是在电子邮件中发送并丢弃它,您可能不需要移动上传的文件。如果您打算将文件保留在您的服务器上,您只需要使用move_uploaded_file()。如果你不需要保留它,你可以在做AddAttachment()时简单地引用tmp_name
  • 最后,将 PHP 代码移动到程序的顶部,使其位于 HTML 代码之上。然后您将能够使用更好的重定向方法(即 header('Location:...') 而不是 javascript 重定向)。

标签: php phpmailer attachment


【解决方案1】:

首先,将视图(

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 的菜鸟。
  • 我无法在问题帖子中编辑您的代码,因为我不了解您的开发环境,因此可能会有一些副作用......此外,当访问者访问此页面时,问题中的代码必须是“错误的”,以便他们更好地理解答案的上下文。您可能是 PHP 的菜鸟,但您了解一般算法(函数、条件、循环...)吗?如果是这样,您可以轻松地将我的答案改编为您现有的代码,从而获得经验。
  • 我已经从 php 中拆分了表单(html 和潜水)并添加了一个 php 包含。但是,我仍然很困惑将您提供的代码放在哪里。我已经尝试过但没有成功。一旦我添加了你的代码,文件就不再附加了。
  • 已实施和测试。非常感谢!
【解决方案2】:

试试这个,

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

【讨论】:

  • 你能把它包含在代码中吗?我试图让它合身,但它不适合我。
猜你喜欢
  • 2011-09-13
  • 2016-10-28
  • 2017-04-29
  • 2013-08-07
  • 2013-02-17
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多