我正在制作一个包含文件上传的邮件邮件,但文件根本没有显示在测试电子邮件中。我已经调整并重新调整但无济于事。有什么建议吗?
表格的HTMl部分如下所示
<div class="contactleft">
<form action="former.php" method="post" enctype="multipart/form-data" id="former">
<div class="textbox"><span id="sprytextfield1">
<label for="fname"></label>
<input name="fname" type="text" class="inputer" id="fname" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox"><span id="sprytextfield2">
<label for="lname"></label>
<input name="lname" type="text" class="inputer" id="lname" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox"><span id="sprytextfield3">
<label for="email"></label>
<input name="email" type="text" class="inputer" id="email" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox"><span id="sprytextfield4">
<label for="file"></label>
<label for="file"></label>
<label for="fileField"></label>
<input type="file" name="fileField" id="fileField" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox">
<label for="sender"></label>
<input type="submit" name="sender" id="sender" value="click to send message" />
</div><!-- End TextBox -->
</form>
</div>
,邮件如下所示
<?
$mailto = 'info@siteripe.com'; // insert the email address you want the form sent to
//$returnpage = 'thanks.php'; // insert the name of the page/location you want the user to be returned to//
$sitename = '[siteripe.com]'; // insert the site name here, it will appear in the subject of your email
/* Do not edit below this line unless you know what you're doing */
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'] ;
$file = $_POST['file'];
$subject = $_POST['subject'];
if (!eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email)){
print("<strong>Error:</strong> this email address is not in a valid format.<br/><br/><a href='javascript:history.go(-1)'>Back</a>");
exit;
}
$message = "\n$name submitted the following message:\n\n$message\n\n$name's contact details are as follows:\n\nFirst Name: $fname\nLast Name: $lname\nEmail Address: $email\nForm: $file";
mail($mailto, "$subject", $message, "From: $email");
?>
答案 0 :(得分:1)
您不能只将$ file作为$ message的一部分传递而不添加一些额外的标题,表明该电子邮件是一个“多部分”电子邮件,并附带$ file作为附件。
如果你想使用vanilla PHP,请查看docs的mail()函数,有一些评论可以告诉你如何做你想要的。
如果您愿意查看第三方库,我建议使用Zend Framework,他们有一个Zend_Mail_Attachment类,它提供了一个干净的界面,用于发送带附件的电子邮件。
答案 1 :(得分:0)
尝试更改:
$file = $_POST['file'];
为:
$file = $_POST['fileField'];
答案 2 :(得分:0)
这应该有效:
<html>
<head>
<title>Test</title>
</head>
<body>
<?
if(count($_POST) > 0){
$mailto = 'info@siteripe.com'; // insert the email address you want the form sent to
//$returnpage = 'thanks.php'; // insert the name of the page/location you want the user to be returned to//
$sitename = '[siteripe.com]'; // insert the site name here, it will appear in the subject of your email
/* Do not edit below this line unless you know what you're doing */
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$name = $lname . ', ' . $fname;
$email = $_POST['email'] ;
$subject = (array_key_exists('subject', $_POST))?$_POST['subject']:'Default subject';
if (!@eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email)){
print("<strong>Error:</strong> this email address is not in a valid format.<br/><br/><a href='javascript:history.go(-1)'>Back</a>");
exit;
}
$message = "\n$name submitted the following message:\n\n...\n\n$name's contact details are as follows:\n\nFirst Name: $fname\nLast Name: $lname\nEmail Address: $email";
$rand = md5(time());
$mime_boundary = '==Multipart_Boundary_x' . $rand . 'x';
if(array_key_exists('fileField', $_FILES)){
if(is_file($_FILES['fileField']['tmp_name'])){
$message .= "--{$mime_boundary}\n";
$fp = @fopen($_FILES['fileField']['tmp_name'],"rb");
$data = @fread($fp,filesize($_FILES['fileField']['tmp_name']));
@fclose($fp);
$data = chunk_split(base64_encode($data));
$message .= "Content-Type: application/octet-stream; name=\"".$_FILES['fileField']['tmp_name']."\"\n" .
"Content-Description: ".$_FILES['fileField']['name']."\n" .
"Content-Disposition: attachment;\n" . " filename=\"".$_FILES['fileField']['name']."\"; size=".filesize($_FILES['fileField']['tmp_name']).";\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
}
}
$message .= "--{$mime_boundary}--";
$headers = 'From: ' . $email;
mail($mailto, "$subject", $message, $headers);
}
?>
<div class="contactleft">
<form action="" method="post" enctype="multipart/form-data" id="former">
<div class="textbox"><span id="sprytextfield1">
<label for="fname"></label>
<input name="fname" type="text" class="inputer" id="fname" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox"><span id="sprytextfield2">
<label for="lname"></label>
<input name="lname" type="text" class="inputer" id="lname" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox"><span id="sprytextfield3">
<label for="email"></label>
<input name="email" type="text" class="inputer" id="email" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox"><span id="sprytextfield4">
<label for="file"></label>
<label for="file"></label>
<label for="fileField"></label>
<input type="file" name="fileField" id="fileField" />
<span class="textfieldRequiredMsg">A value is required.</span></span></div><!-- End TectBox -->
<div class="textbox">
<label for="sender"></label>
<input type="submit" name="sender" id="sender" value="click to send message" />
</div><!-- End TextBox -->
</form>
</div>
</body>
</html>
答案 3 :(得分:0)
另外我看到你调用mail()函数但是$ file不在其中。我个人使用phpmailer类,然后你声明一个邮件对象,然后添加组件。
// SEND THANK YOU EMAIL
include('class.phpmailer.php');
$mail = new PHPMailer();
// Sender is the Reply-Path address; seems important
$mail->Sender = "auto-confirm@ca-cycleworks.com";
$mail->From = "auto-confirm@ca-cycleworks.com";
$mail->FromName = "Ca Cycleworks automated e-mail";
// $mail->AddAddress() is the To:
$blahtext=stripslashes($_SESSION['address_info']['b_first_name'])." ".stripslashes($_SESSION['address_info']['b_last_name']);
$mail->AddAddress($_SESSION['address_info']['b_email'],$blahtext );
$mail->AddReplyTo("orders@ca-cycleworks.com", "Ca Cycleworks Orders");
$subject = "Your Ca-Cycleworks.com Order # ".$_SESSION['order_number']." confirmation";
$mail->Subject = $subject;
$mail->AltBody = $text_body;
// ISO 8859-1 summary: http://www.btinternet.com/~andrew.murphy/html_character_set.html
//
// $Encoding
// PHPMailer::$Encoding in class.phpmailer.php
// Sets the Encoding of the message. Options for this are "8bit", "7bit", "binary", "base64", and "quoted-printable".
// string $ContentType = "text/plain" (line 42)
// False Sets ContentType = "text/html" or "text/plain"
//$mail->IsHTML(false);
$mail->Body = $body;
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Username = "auto-confirm@ca-cycleworks.com";
$mail->Password = "xxxxxxxxxxxx";