加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何在PHP中发送电子邮件附件

发布时间:2020-12-13 17:01:52 所属栏目:PHP教程 来源:网络整理
导读:?php // array with filenames to be sent as attachment $files = array("sendFiles.php"); // email fields: to,from,subject,and so on $to = "dfjdsoj@googlemail.com"; $from = "mail@mail.com"; $subject ="My subject"; $message = "A logo has been
<?php
  // array with filenames to be sent as attachment
  $files = array("sendFiles.php");

  // email fields: to,from,subject,and so on
  $to = "dfjdsoj@googlemail.com";
  $from = "mail@mail.com";
  $subject ="My subject";
  $message = "A logo has been sen't by". $_SESSION['loggedin_business_name'];
  $headers = "From: $from";

  // boundary 
  $semi_rand = md5(time()); 
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

  // headers for attachment
  $headers .= "nMIME-Version: 1.0n" . "Content-Type: multipart/mixed;n" . " boundary="{$mime_boundary}"";

  // multipart boundary
  $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";
  $message .= "--{$mime_boundary}n";

  // preparing attachments
  for($x=0;$x<count($files);$x++){
      $file = fopen($files[$x],"rb");
      $data = fread($file,filesize($files[$x]));
      fclose($file);
      $data = chunk_split(base64_encode($data));
      $message .= "Content-Type: {"application/octet-stream"};n" . " name="$files[$x]"n" .
      "Content-Disposition: attachment;n" . " filename="$files[$x]"n" .
      "Content-Transfer-Encoding: base64nn" . $data . "nn";
      $message .= "--{$mime_boundary}n";       
  }

  // send       
  echo sizeof($files);
  $ok = @mail($to,$subject,$message,$headers);
  if ($ok) {
      echo "<p>mail sent to $to!</p>";
  } else {
      echo "<p>mail could not be sent!</p>";
  }
  ?>

我收到一封包含sendfiles.php的电子邮件,然后是一个文本文件ATT00424.txt.数量每次都在变化.发送到我的Gmail,没关系!很奇怪!

$files = array("sendFiles.php");

  // email fields: to,and so on

  $to = "hdfiuhufsadhfu@yaho.com";

  $from = "mail@mail.com";

  $subject ="My subject";

  $message = "A logo has been sen't by". $_POST['loggedin_business_name'];

  $headers = "From: $from";

  // boundary

  $semi_rand = md5(time());

  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

// headers for attachment

  $headers .= "rnMIME-Version: 1.0rn" . "Content-Type: multipart/mixed;rn" . " boundary="{$mime_boundary}"";
  // multipart boundary

  $message = "This is a multi-part message in MIME format.rn" . "--{$mime_boundary}rn" . "Content-Type: text/plain; charset="iso-8859-1"rn" . "Content-Transfer-Encoding: 7bitrn" . $message . "rn";

  $message .= "--{$mime_boundary}rn";
  // preparing attachments

  for($x=0;$x<count($files);$x++){

      $file = fopen($files[$x],"rb");

      $data = fread($file,filesize($files[$x]));

      fclose($file);

      $data = chunk_split(base64_encode($data));

      $message .= "Content-Type: {"application/octet-stream"};rn" . " name="$files[$x]"rn" .

      "Content-Disposition: attachment;rn" . " filename="$files[$x]"rn" .

      "Content-Transfer-Encoding: base64rn" . $data . "rn";

      $message .= "--{$mime_boundary}rn";

  }

在代码中添加CRLF修复了附件问题但是现在消息“A logo has sen’t by”消失了.为什么是这样?

解决方法

Use phpMailer()

<?php 
require_once('phpmailer.php');

$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors,which we need to catch
$mail->IsSendmail(); // telling the class to use SendMail transport

try {
    $mail->AddReplyTo('email@example.com','First Last');
    $mail->AddAddress('John@example.com','John Doe');

    $mail->SetFrom('email@example.com','First Last');
    $mail->Subject  =  "Subject Line";
    $mail->AltBody    = "Alternate Text"; // optional,comment out and test

    $mail->WordWrap     =   50; // set word wrap    
    $mail->Body = "This is the body of the email";
    $mail->IsHTML(true); // send as HTML

    // Single or Multiple File Attachments
    $mail->AddAttachment('../path-to-file.pdf','File-Name.pdf');
    $mail->Send(); // Try to send email
    //echo "Message Sent OK<p></p>n";
    } catch (phpmailerException $e) {
        echo $e->errorMessage(); //Pretty error messages from PHPMailer
    } catch (Exception $e) {
        echo $e->getMessage(); //Boring error messages from anything else!
}
// end try


?>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读