试图从html表单添加附件到PHP电子邮件



我真的很挣扎,已经尝试了很多不同的方法来让我的表单附加一个文件到通过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';
}

相关内容

  • 没有找到相关文章

最新更新