Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php表单生成的空白电子邮件_Php_Email Attachments - Fatal编程技术网

从php表单生成的空白电子邮件

从php表单生成的空白电子邮件,php,email-attachments,Php,Email Attachments,我有下面的代码,当有人点击表单上的发送按钮时执行 我的问题是,我收到了一封主题行和发件人/收件人地址正确的电子邮件。但是,如果电子邮件包含附件,则正文为空。但是,如果没有电子邮件附件,电子邮件正文将填充用户输入的文本 我应该注意的是,我知道代码并不像当前状态那样安全,并且没有限制上传像exe这样的不适当文件。然而,我不想或不需要一个教训,如何使代码安全。我只需要帮助,了解如何/为什么上传附件时不填充文本正文 <?php //send email

我有下面的代码,当有人点击表单上的发送按钮时执行

我的问题是,我收到了一封主题行和发件人/收件人地址正确的电子邮件。但是,如果电子邮件包含附件,则正文为空。但是,如果没有电子邮件附件,电子邮件正文将填充用户输入的文本

我应该注意的是,我知道代码并不像当前状态那样安全,并且没有限制上传像exe这样的不适当文件。然而,我不想或不需要一个教训,如何使代码安全。我只需要帮助,了解如何/为什么上传附件时不填充文本正文

     <?php
         //send email
          if(isset($_POST['sendemail']))
            {
              $txtSid = md5(uniqid(time()));
              $emailsubject = $_POST['emailsubject'];
              $emailpriority = $_POST['emailpriority'];
              $emailto = $_POST['emailto'];
              $emailcc = $_POST['cc'];
              $emailbcc = $_POST['bcc'];
              $txtFilesName = $_FILES["attachment"]["name"];
              $emailbody = $_POST['wysiwg_editor'];

              //if their is an attachment add notice in body of email
               if($txtFilesName !='')
                  {
                    $emailbody = "$emailbody <br /><br />File name $txtFilesName attached to this email.";
                  }                                           

$headers = "From: $my_fname $my_lname <$my_emailaddr>\r\n";
$headers .= "Reply-To: $my_fname $my_lname <$my_emailaddr>\r\n";
$headers .= "CC: $emailcc\r\n";
$headers .= "BCC: $emailbcc\r\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$txtSid."\"\n\n";
$headers .= "This is a multi-part message in MIME format.\n";
$headers .= $emailbody."\n\n";

if($emailpriority == 'high priority')
 {
   $headers .= "X-Priority: 1 (Highest)\n";
   $headers .= "X-MSMail-Priority: High\n";
   $headers .= "Importance: High\n";
 }


   $headers .= "--".$txtSid."\n";
   $headers .= "Content-type: text/html; charset=utf-8\n";
   $headers .= "Content-Transfer-Encoding: 7bit\n\n";


/***********Email Attachment************/
if($_FILES["attachment"]["name"] != "")
{
    $txtFilesName = $_FILES["attachment"]["name"];
    $txtContent = chunk_split(base64_encode(file_get_contents($_FILES["attachment"]["tmp_name"]))); 
    $headers .= "--".$txtSid."\n";
    $headers .= "Content-Type: application/octet-stream; name=\"".$txtFilesName."\"\n"; 
    $headers .= "Content-Transfer-Encoding: base64\n";
    $headers .= "Content-Disposition: attachment; filename=\"".$txtFilesName."\"\n\n";
    $headers .= $txtContent."\n\n";
}


mail("$emailto","$emailsubject","$emailbody","$headers");


echo "<div class='alert alert-success'>Email Sent!</div>";
}

好的,我重新复制并粘贴了我正在使用的代码,它解决了我的问题。似乎我需要$headers.=$emailbody。\n\n;if电子邮件附件部分内的代码行。

在检测是否上载了附件的if语句下,您没有将以前的emailbody和通知组合在一起。相反,请使用以下代码:

$emailbody = $emailbody."<br /><br />File name ".$txtFilesName." attached to this email.";

你的PHP日志中有错误吗?我在错误日志中没有看到任何东西。通常,如果它们是我根目录中的一个错误,我会有一个error_log.txt文件来帮助我,但我似乎没有一个解决这个问题的文件