我真的很挣扎,已经尝试了很多不同的方法来让我的表单附加一个文件到通过PHP发送的电子邮件。
这是HTML表单:
<form id="form1" enctype="multipart/form-data" action="submit/applicationscript.php" method="post" name="form1">
<input checked type="radio" name="school" value="English Martyres"/>
<input type="radio" name="stop" value="stop1" />
<input type="radio" name="stop" value="stop2" />
<input type="radio" name="stop" value="stop3" />
<input type="radio" name="stop" value="stop4" />
<input type="checkbox" name="mon" value="Monday" />
<input type="checkbox" name="tue" value="Tuesday" />
<input type="checkbox" name="wed" value="Wednesday" />
<input type="checkbox" name="thu" value="Thursday" />
<input type="checkbox" name="fri" value="Friday" />
<input type="text" class="text" name="name" required placeholder="First Name" /></div>
<input type="text" class="text" name="surname" required placeholder="Surname" /></div>
<input type="text" class="text" name="dob" required maxlength="10" placeholder="Date of Birth" />
<input type="file" name='uploaded_file' required />
<input type="submit" id="form1" name="submit" value="Submit" onClick="document.form1.submit()">
</form>
这是PHP:
<?php
// Read POST request params into global vars
$to = $_POST['my@email.com'];
$from = $_POST['from@email.co.uk'];
$subject = $_POST['subject'];
$message = $_POST['message'];
// Obtain file upload vars
$fileatt = $_FILES['fileatt']['tmp_name'];
$fileatt_type = $_FILES['fileatt']['type'];
$fileatt_name = $_FILES['fileatt']['name'];
$headers = "From: $from";
if (is_uploaded_file($fileatt)) {
// Read the file to be attached ('rb' = read binary)
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
// Generate a boundary string
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// Add the headers for a file attachment
$headers .= "nMIME-Version: 1.0n" .
"Content-Type: multipart/mixed;n" .
" boundary="{$mime_boundary}"";
// Add a multipart boundary above the plain message
$message = "This is a multi-part message in MIME format.nn" .
"--{$mime_boundary}n" .
"Content-Type: text/plain; charset="iso-8859-1"n" .
"Content-Transfer-Encoding: 7bitnn" .
$message . "nn";
// Base64 encode the file data
$data = chunk_split(base64_encode($data));
// Add file attachment to the message
$message .= "--{$mime_boundary}n" .
"Content-Type: {$fileatt_type};n" .
" name="{$fileatt_name}"n" .
//"Content-Disposition: attachment;n" .
//" filename="{$fileatt_name}"n" .
"Content-Transfer-Encoding: base64nn" .
$data . "nn" .
"--{$mime_boundary}--n";
}
// Send the message
$ok = @mail($to, $subject, $message, $headers);
if ($ok) {
echo "<p>Mail sent! Yay PHP!</p>";
} else {
echo "<p>Mail could not be sent. Sorry!</p>";
}
?>
发送或不附加附件,或者无法发送或$message
为空,因此不发送。
没有人可以帮助我,真的需要这个工作,我没有很好的PHP知识,已经看了这么多的文章,但不能得到我的头围绕它
我使用PHPMailer
,我没有任何问题。
点击这里下载:https://github.com/PHPMailer/PHPMailer
下面是一个例子:
<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'user@example.com'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = 'from@example.com';
$mail->FromName = 'Mailer';
$mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
$mail->addAddress('ellen@example.com'); // Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
$mail->WordWrap = 50; // Set word wrap to 50 characters
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}