【发布时间】:2017-10-08 17:32:52
【问题描述】:
对不起,我对 PHP 很陌生,可能很容易:
我收到了一个带附件的联系表,但是当我尝试在没有附件的情况下发送它时,它不会发送,但会出现我的错误消息。我不知道如何才能发送带附件和不带附件。这是我的基本代码
if(isset($_POST) && !empty($_POST)) {
// catch spam bots which never loaded contact form
if (!isset($_POST["p3"]) || $_POST["p3"] != "sometext") {
header("Location: contactform.php");
exit;
}
// check whether the POST method was used
if ("POST" != getenv("REQUEST_METHOD")) {
header("Location: contactform.php");
exit;
}
// check for user-agent and http-referer
if ("" == getenv("HTTP_USER_AGENT") || "" == getenv("HTTP_REFERER")) {
header("Location: contactform.php");
exit;
}
// trick the spam bot into identifying itself using a honeypot
if (!empty($_POST["email"])) {
exit;
}
//if there is an attachment
if(!empty($_FILES['attachment']['name'])) {
//store some varables
$file_name = $_FILES['attachment']['name'];
$temp_name = $_FILES['attachment']['tmp_name'];
$file_type = $_FILES['attachment']['type'];
//get the extension of the file
$base = basename($file_name);
$extension = substr($base, strlen($base)-4, strlen($base));
// only thes file types will be allowed
$allowed_extensions = array(".doc","docx",".pdf",".zip",".png","jpeg",".jpg",".gif",".txt","docm",".odt","xlsx","xlsm",".csv",".xml",".ods","tiff",".rtf","");
// check that this file type is allowed
if(in_array($extension,$allowed_extensions)){
//mail essentials
$from = $_POST['mail'];
$to = "abcabacagagagag@gmx.de";
$subject = "Anfrage über Website";
$message = $_POST['quote'];
// things you need
$file = $temp_name;
$content = chunk_split(base64_encode(file_get_contents($file)));
$uid = md5(uniqid(time()));
// standard mail headers
$header = "From: ".$from."\r\n";
$header .= "Reply-To: ".$to."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$message .= "This is a multi-part message in MIME format.\r\n";
// plain text part
$message .= "--".$uid."\r\n";
$message .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$message .= $message."\r\n\r\n";
// file attachment
$message .= "--".$uid."\r\n";
$message .= "Content-Type: ".$file_type."; name=\"".$file_name."\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: attachment; filename=\"".$file_name."\"\r\n";
$message .= $content."\r\n\r\n";
$msg = "";
//send the mail
if (mail($to, $subject, $message, $header)) {
$msg = "Ich habe Ihre Mail erhalten und melde mich in Kürze!";
} else {
$msg = "Nachricht konnte nicht gesendet werden. Bitte senden Sie mir Ihre Anfrage an bm-translations@email.de";
}
} else {
$msg = "Dieser Dateityp kann über das Formular nicht gesendet werden. Bitte senden Sie mir Ihre Anfrage an bm-translations@email.de";
}
}
// if no file, send anyway (does not work)
//elseif (empty($_FILES['attachment']['name']) || !(is_uploaded_file($_FILES['attachment']['name']))) {
//}
}
现在我尝试了此代码以允许不带附件发送,但不幸的是它不起作用。
// if no file, send anyway
elseif (empty($_FILES['attachment']['name']) ||(is_uploaded_file($_FILES['attachment']['name']))) {
}
出了什么问题还是有更简单的方法?请在否决之前告诉我您还需要什么,因为可能不清楚。非常感谢!
【问题讨论】:
-
如果上面的有附件,那么为什么不在另一种情况下简单地使用
else(而不是elseif)呢?无论如何,您没有提供足够的信息让我们真正了解问题所在。尝试制作minimal reproducible example。 -
请发布完整代码
-
谢谢,完整代码已贴出
标签: php sendmail contact-form