Php 无法查看附件

Php 无法查看附件,php,Php,我正在通过php mail()发送电子邮件。这样,我就可以收到简单的(文本)邮件。当我附加文件时,我会收到电子邮件中的附件,但是当我试图查看它时,文件总是空白的,即使它是PDF格式!!!。请帮帮我。我的“发送邮件”页面的代码如下: include_once("db_connect.php"); session_start(); error_reporting(16); require_once('class.phpmailer.php');//Getting values from Sessio

我正在通过php mail()发送电子邮件。这样,我就可以收到简单的(文本)邮件。当我附加文件时,我会收到电子邮件中的附件,但是当我试图查看它时,文件总是空白的,即使它是PDF格式!!!。请帮帮我。我的“发送邮件”页面的代码如下:

include_once("db_connect.php");
session_start();
error_reporting(16);
require_once('class.phpmailer.php');//Getting values from Session
$tot = $_SESSION['$tot'];
$from = $_SESSION['from'];
$message = $_SESSION['message'];
$subject = $_SESSION['subject'];
$full_nm = $_SESSION['firstnm']." ".$_SESSION['lastnm'];
$temp_passwd = $_SESSION['e_pwd'];
$email_use = $_SESSION['email'];

function send_mail($to, $message, $subject, $from, $temp_passwd, $full_nm, $email_use)
{
    $message_org      = nl2br($message);
    $mail             = new PHPMailer();
    $body             = $message_org;
    $mail->IsSMTP(); 
    $mail->SMTPAuth   = true;
    $mail->SMTPSecure = "ssl";
    $mail->AddAttachment("Uploads/file.pdf");
    $mail->ContentType = "mutlipart/alternative";
    $mail->Host       = "smtp.mail.yahoo.com";
    $mail->Port       = 465;
    $mail->Username   = $from;
    $mail->Password   = $temp_passwd;
    $mail->SetFrom($from, $full_nm);
    $mail->Subject    = $subject;
    $mail->MsgHTML($body);
    $address = $to;
    $mail->AddAddress($address, $address);

    if(!$mail->Send())
    {
        $err_send = "Mailer Error: " . $mail->ErrorInfo;
    }
        else
    {
        $err_send = "";
    }
}
foreach($tot as $to_trim)
{
    $to = trim($to_trim);
    send_mail($to, $message, $subject, $from, $temp_passwd, $full_nm, $email_use);
    echo $err_send;
}

The function AddAttachment in class.phpmailer.php is as follows:

public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {
try {
  if ( !@is_file($path) ) {
    throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE);
  }
  $filename = basename($path);
  if ( $name == '' ) {
    $name = $filename;
  }

  $this->attachment[] = array(
    0 => $path,
    1 => $filename,
    2 => $name,
    3 => $encoding,
    4 => $type,
    5 => false,  // isStringAttachment
    6 => 'attachment',
    7 => 0
  );

} catch (phpmailerException $e) {
  $this->SetError($e->getMessage());
  if ($this->exceptions) {
    throw $e;
  }
  echo $e->getMessage()."\n";
  if ( $e->getCode() == self::STOP_CRITICAL ) {
    return false;
  }
}
return true;
}

当您执行$mail->AddAttachment(“Uploads/file.pdf”); 如果将添加附件放在“If file exists add attachment”子句中,该文件是否未被连接?我认为“Uploads/file.pdf”路径不够。

根据,您应该能够为该文件指定相对路径

尝试在该行前面进行PHP测试,以查看该文件是否实际存在:

// Change this
$mail->AddAttachment("Uploads/file.pdf");

// To this...
$attachment = "Uploads/file.pdf";
$mail->AddAttachment($attachment);

// And then to this
$attachment = "Uploads/file.pdf";
if(!file_exists($attachment) && !file_exists(getcwd().'/'.$attachment)
{
    die(sprintf("attachment: %s does not exist", $attachment));
}
$mail->AddAttachment($attachment);
我包括了一个中间步骤,只是想告诉你我的想法


我还没有测试
if
语句,但是我的想法是确保
$attachment
变量是有效的绝对(第一部分)路径或相对(第二部分)路径。

我将提交一个修正格式的编辑,但是您应该阅读有关如何格式化代码的帮助。到处添加
s会很困难,尤其是当它们不一致时。@jedwards:我做了一个修复,但我突然失去了编辑权限。我提交了一个编辑,一旦它被审核,它应该被更新。文件正在附加。但下载时无法查看。可以查看文本文件。我认为这与附件的加密和解密有关。你能试着用你的代码发送邮件,但注释掉contenttype行吗?当然。请给我您的电子邮件id。哦,我不是说发送给我,我是说调整您的代码并发送而不指定内容类型-因为它可能会手动这样做,它会变得混乱。哦,好的。我也试过了。但这和我得到的结果是一样的。只能发送文本文件,不能发送任何其他文件:(文件正在附加。但下载时无法查看。可以查看文本文件。我认为这与附件的加密和解密有关。无论如何,这是一个有助于我确认附件的代码。非常感谢。