Frage

As I'm working on building and sending email in PHP I've noticed that sometimes people put the code for the message and file attachment in the headers and sometimes in the body. They both work. So what's more correct, or does it make a difference?

Here's example code: In the headers

if (is_uploaded_file($attachment)) {
  $file = fopen($attachment, 'rb');
  $data = fread($file, filesize($attachment));
  fclose($file);

  $data = chunk_split(base64_encode($data));
  $uid = md5(uniqueid(time()));

  $headers = "From: $from\r\n";
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .= "Content-Type: multipart/mixed; boundary=\"{$uid}\"\r\n\r\n";

  $headers .= "--{$uid}\r\n";
  $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n\r\n";
  $headers .= $message. "\r\n\r\n";

  $headers .= "--{$uid}\r\n";
  $headers .= Content-Type: {$att_type}; name=\"{$att_type}\"\r\n";
  $headers .= Content-Transfer-Encoding: base64\r\n";
  $headers .= Content-Disposition: attachment; filename=\"{$att_name}\"\r\n\r\n";
  $headers .= $data . "\r\n\r\n";
  $headers .= "--{$uid}--\r\n";
}
  mail($to, $subject, $message, $headers);

Same code in the message (body):

if (is_uploaded_file($attachment)) {
  $file = fopen($attachment, 'rb');
  $data = fread($file, filesize($attachment));
  fclose($file);

  $data = chunk_split(base64_encode($data));
  $uid = md5(uniqueid(time()));

  $headers = "From: $from\r\n";
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .= "Content-Type: multipart/mixed; boundary=\"{$uid}\"\r\n\r\n";

  $message = "This is a multi-part message in MIME format.\r\n";
  $message .= "--{$uid}\r\n";
  $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n\r\n";
  $message .= $msg. "\r\n\r\n";

  $message .= "\r\n--{$uid}\r\n";
  $message .= Content-Type: {$att_type}; name=\"{$att_type}\"\r\n";
  $message .= Content-Transfer-Encoding: base64\r\n";
  $message .= Content-Disposition: attachment; filename=\"{$att_name}\"\r\n\r\n";
  $message .= $data . "\r\n";
  $message .= "--{$uid}--\r\n";
}
  mail($to, $subject, $message, $headers);

Assuming both of these work, is one method better than the other? When or why does it matter, or does it matter? I can't seem to find an answer to this.

War es hilfreich?

Lösung

It should be in the body - as per the spec.

Andere Tipps

It shouldn't matter; the header and message are ultimately just concatenated to each other. That said, by definition the headers of an email end at the first empty line. So, it's probably safer going forward to put the attachment in $message, just in case mail() ever starts stripping extra line breaks from headers.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top