简体   繁体   English

尝试从HTML表单向PHP电子邮件添加附件

[英]Trying to add attachment to PHP email from html form

I am seriously struggling and have tried so many different methods to get my form to attach a file to the email sent through PHP. 我很努力,尝试了许多不同的方法来使我的表单将文件附加到通过PHP发送的电子邮件中。

This is the HTML form: 这是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> 

This is the PHP: 这是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.0\n" .
 "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.\n\n" .
 "--{$mime_boundary}\n" .
 "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
 "Content-Transfer-Encoding: 7bit\n\n" .
 $message . "\n\n";

 // 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: base64\n\n" .
 $data . "\n\n" .
 "--{$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>";
}

?>

It either sends and does not attach an attachment or it is unable to send or the $message is empty and therefore does not send. 它要么发送并且不附加附件,要么无法发送,或者$message为空,因此不发送。

Cannot anyone please help me, really need this to work and don't have a great knowledge of PHP, have looked at so many articles but cannot get my head around it. 谁也不能帮助我,真的需要这个才能工作,并且对PHP并不了解,已经看了很多文章,但我无法理解。

I use PHPMailer for this and I haven't had any issues. 我为此使用PHPMailer ,但没有任何问题。

Get it here: https://github.com/PHPMailer/PHPMailer 在这里获取: https : //github.com/PHPMailer/PHPMailer

Here is an example: 这是一个例子:

<?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';
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM