在邮件传递期间丢失部分图像

时间:2016-04-21 17:26:25

标签: php email svg

我在使用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";
  }

}

?>

1 个答案:

答案 0 :(得分:1)

像这样它应该有效(在有效载荷之前有两个新行):

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