在邮件传递过程中丢失部分图像


loosing part of image during mail delivery

我在用php发送电子邮件时遇到问题。我的base64编码图像的第一行在邮件传递过程中消失。我在这里做错了什么?

这是发送前打印消息的一部分:

...
--67e5a910fa8cffc2b52b2aec743f9332
Content-Disposition: attachment
Content-Type: image/svg; name="aaa.svg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="aaa.svg"
PHN2ZyB2aWV3Qm94PSIwIDAgMjk2NjkgMjA5OTAiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcv
ZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25z
...

这是我收到的消息:

...
--67e5a910fa8cffc2b52b2aec743f9332
Content-Disposition: attachment
Content-Type: image/svg; name="aaa.svg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="aaa.svg"
ZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25z
...

我的代码:

<?php
if($_POST) {
  date_default_timezone_set('Europe/Berlin');
  $uid = md5(uniqid(time()));
  $eol = PHP_EOL;
  $name = $_POST['name'];
  $gliderName = $_POST['glider'];
  $gliderSize = $_POST['size'];
  $subject = $gliderName . "_" . $gliderSize . "_" . $name . "_" . date('d-m-Y_h:i:s', time());
  $subject = str_replace(' ', '_', $subject);
  $comment = $_POST['comment'];
  $attachment = $_POST['image'];
  $sendToSwing = $_POST['sendToSwing'];
  $mail = $_POST['email'];
  $mail_to = $mail;
  if ($sendToSwing) {
      $mail_to .= "," . "ZIELADRESSE@aaa.DE";
  }
  $mail_from = "ABSENDERADRESSE@aaa.DE";
  $from_name = "ABSENDERNAME";
  $header = "From: " . $from_name . " <" . $mail_from . ">" . $eol;
  $header .= "Reply-To: " . $mail_from.$eol;
  $header .= "MIME-Version: 1.0" . $eol;
  $header .= "Content-Type: multipart/mixed; boundary='"" . $uid . "'"" . $eol . $eol;
  $msg = '<html><head><title>' . $subject . '</title></head><body>' . $eol;
  $msg .= '<b>glider:</b> ' . $gliderName . $eol;
  $msg .= '<b>size:</b> ' . $gliderSize . $eol;
  $msg .= '<b>customer name:</b> ' . $name . $eol;
  $msg .= '<b>customer email:</b> ' . $mail . $eol;
  $msg .= '<b>message from customer:</b> ' . $comment . $eol;
  $msg .= '</body></html>' . $eol;
  $message = "--" . $uid . $eol;
  $message .= "Content-type:text/html; charset=utf-8" . $eol;
  $message .= "Content-Transfer-Encoding: utf-8" . $eol . $eol;
  $message .= $msg . $eol;
  // attachment
  //echo $eol.$attachment.$eol;
  $attachment = chunk_split(base64_encode($attachment));
  //echo $eol.$attachment.$eol;
  $message .= "--" . $uid . $eol;
  $message .= "Content-Type: image/svg; name='"" . $subject . ".svg'"" . $eol;
  $message .= "Content-Transfer-Encoding: base64" .$eol;
  $message .= "Content-Disposition: attachment; filename='"" . $subject . ".svg'"" . $eol;
  $message .= $attachment . $eol;
  $message .= "--".$uid."--";
  echo $eol.$message.$eol;
  if (mail($mail_to, $subject, $message, $header)) {
    echo "success ";
  } else {
    echo "error sending email";
  }
}
?>

像这样它应该可以工作(有效载荷前两个新行):

$message .= "Content-Disposition: attachment; filename='"" . $subject . ".svg'"" . $eol.$eol;