2012-04-25 5 views
0

나는 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 ([email protected]_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; 
} 
+0

서식을 수정하는 편집을 제출 하겠지만 코드 서식 지정 방법에 대한 도움말을 읽어야합니다.
을 여기 저기에 추가하면 특히 일관성이 없을 때 어려워집니다. – jedwards

+0

@jedwards : 수정했습니다. 갑자기 편집 권한을 잃었습니다. http://pastebin.com/CTVRdwhm – nyson

+0

리뷰를 업데이트해야 업데이트되었습니다. – jedwards

답변

0

당신이 할 때 $ 메일 -> AddAttachment ("업로드/file.pdf을"); "파일이있는 경우 추가 첨부 파일"절에 추가 첨부 파일을 넣으면 해당 파일이 첨부되지 않습니까? "Uploads/file.pdf"라고 생각하면 충분한 경로가 없습니다.

+0

파일이 첨부됩니다. 다운로드 한 후에는 볼 수 없습니다. 텍스트 파일을 볼 수 있습니다. 나는 그것의 무언가가 첨부 파일의 암호화와 암호 해독과 관련이 있다고 생각한다. –

+0

코드를 사용하여 메일을 보내려고하지만 contenttype 행을 주석 처리 할 수 ​​있습니까? – BugFinder

+0

예. 이메일 주소를 알려주세요. –

0

the documentation for this class에 따르면 해당 파일의 상대 경로를 지정할 수 있어야합니다.

// 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); 

난 그냥 당신이 내 생각을 보여주기 위해 중간 단계를 포함 : PHP를 테스트하여 그 라인을 이전

시도는 파일이 실제로 존재하는지 여부를 확인합니다.

if 문을 테스트하지는 않았지만 $attachment 변수가 유효한 절대 (첫 번째 부분) 또는 상대 (두 번째 부분) 경로인지 확인하는 것이 좋습니다.

+0

파일이 첨부됩니다. 다운로드 한 후에는 볼 수 없습니다. 텍스트 파일을 볼 수 있습니다. 나는 그것의 무언가가 첨부 파일의 암호화와 암호 해독과 관련이 있다고 생각한다.어쨌든, 이것은 첨부 파일을 확인하는 데 도움이되는 코드입니다. 감사합니다. –

+0

AddAttachment의 코드는 질문에서 업데이트되었습니다. –

관련 문제