2015-01-23 8 views
-1

나는 PHPmailer 라이브러리를 사용하여 전자 메일을 보내고 첨부 파일을 보내야합니다.PHPmailer를 사용하여 첨부 파일 보내기

현재 파일이 서버에 저장되어 있으며 파일에 대한 링크가 var $link에 저장되어 있습니다.

$phpmailer->AddAttachment('$link'); 

내가 대신 내 변수의 하드 코딩 된 경로를 시도했다 :

$phpmailer->AddAttachment('http://mysite.co.uk/link/to/my/file.pdf'); 

나는 시도하고 첨부 파일을 추가하려면 다음하지만 이메일이없는 첨부 파일이 도착 사용하고 있습니다

이메일에 나타나지만 첨부 파일이 없습니다.

나는 어떤 오류라도 잡기 위해 phpmailerException을 사용해 보았지만 응답을 얻지 못했습니다.

그 외 어떻게 PHPmailer로 첨부 파일을 보낼 수 있습니까?

전체 PHP 코드 :

require_once 'library/PHPMailer.php'; 
     $phpmailer = new PHPMailer(); 
     $phpmailer->isSMTP(); //switch to smtp 
     $phpmailer->Host = 'smtp.sendgrid.net'; 
     $phpmailer->SMTPAuth = true; 
     $phpmailer->SMTPSecure = 'ssl'; 
     $phpmailer->Port = 465; 
     $phpmailer->Username = 'username'; 
     $phpmailer->Password = 'password'; 
     $phpmailer->AddAttachment('http://mysite.co.uk/blah/cv.pdf'); 
     //$phpmailer->AddAttachment('$link'); 

     $subject = 'Job Application'; 

     $messageConfirmation = "The <b> 'Apply for Job' </b> form has recently been completed on <b>www.mysite.com.</b><br/><br/> <b>Please see contact details below:<br /><br/> </b>"; 
     $messageConfirmation.= "<b>Applying for:</b> $title <br/><br/>"; 
     $messageConfirmation .= "<b>Name:</b> $name <br/><br/><b>Surname:</b> $surname <br/><br/> <b>Email:</b> $email <br/><br/> <b>Comment:</b> $comment <br/><br/>"; 
     $messageConfirmation .= "<b>CV:</b> $link<br /><br />"; 
     $messageConfirmation .= "Please can you call them back in the next 24 hours. <br/><br/> Thank you \n\nMy Site<br/><br/>"; 


     $imgheader = 'http://blah.co.uk/blah/wp-content/uploads/2014/11/header.png'; 
     $imgfooter = 'http://blah.co.uk/blah/wp-content/uploads/2014/11/footer.png'; 

     $message = '<!DOCTYPE HTML>'. 
      '<head>'. 
      '<meta http-equiv="content-type" content="text/html">'. 
      '<title>Email notification</title>'. 
      '</head>'. 
      '<body>'. 
      '<div id="header" style="width: 600px;height: auto;margin: 0 auto;color: #fff;text-align: center;font-family: Open Sans,Arial,sans-serif;">'. 
      '<img src="'.$imgheader.'" >'. 
      '</div>'. 

      '<div id="outer" style="width: 600px;margin: 0 auto;margin-top: 10px;">'. 
      '<div id="inner" style="width: 600px;margin: 0 auto; padding-left: 20px;background-color: #fff;font-family: Open Sans,Arial,sans-serif;font-size: 13px;font-weight: normal;color: #444;margin-top: 10px;">'. 
      '<p>'.$messageConfirmation .'</p>'. 

      '</div>'. 
      '</div>'. 

      '<div id="footer" style="width: 600px;height: auto;margin: 0 auto;text-align: center;padding: 10px;font-family: Verdena;">'. 
      '<img src="'.$imgfooter.'" >'. 
      '</div>'. 
      '</body>'; 


     $phpmailer->IsHTML(true); 
     $phpmailer->AddAddress(CONTACTUSFORMEMAIL); 
     $phpmailer->From = CONTACTUSFORMEMAIL; 
     $phpmailer->FromName ='blah'; 
     $phpmailer->WordWrap = 50; // set word wrap to 50 characters 
     $phpmailer->Subject = $subject; 
     $phpmailer->Body  = $message; 
     $phpmailer->Send(); 



     $data['success'] = true; 
     $data['message'] = 'Thank you for your application'; 
+0

서버가 아닌 다른 곳에 파일을 첨부 하시겠습니까? –

+0

/home/x/public_html/pdf/d.pdf와 같은 파일 경로 추가 –

답변

1

이 문제는() 만 수락 기능 AddAttachment 함수 is_file()를 사용하고, (이것은 또한 상대 URL에 적용) is_file을 URL을 액세스 할 때 파일이 false를 반환하는 것으로되어 다음 코드를 시도하십시오 파일 경로. 따라서 보통 phpmailer는 오류 컨테이너에 오류를 추가해야합니다.

+0

맞습니다. 오류 컨테이너에 오류를 추가하고 함수에 대해 false를 반환하거나 예외를 설정 한 경우 예외를 throw합니다. – Synchro

0

파일의 경로를 수신 AddAttachment 방법.

소스 코드를 보면 fopen 함수를 사용하여 파일을 열 때 링크가 작동하지 않는다는 것을 알 수 있습니다. 파일을 직접 다운로드하고 함수에 경로를 전달해야합니다. .

+0

따라서 파일에 대한 내 링크를 상대적으로 다듬을 수 있습니까? 예를 들어'/ cv-folder/myfile.pdf' 대신에 그것을 사용합니까? 전체 경로에서 열 수없는 이유는 무엇입니까? 이 문서는 전체 경로를 사용할 때의 문제점을 언급하지 않았으며이를 사용하는 몇 가지 예제를 제공합니다. http://php.net/manual/en/function.fopen.php – Francesca

+0

'addAttachment'는 상대 경로와 절대 로컬 파일 경로. 상대 URL 또는 절대 URL로 설계된 것이 아니기 때문에 상대 URL 또는 절대 URL로 작업하지 않습니다. 수행 방법에 대한 내 대답을 참조하십시오.''fopen''이 할 수있는 일은 무의미합니다. – Synchro

1

안녕

<?php 
     $mail = new PHPMailer(); 
     $mail->From = $email_from; 
     $mail->SetFrom($email_from, $name_from); 
     $mail->AddAddress($email_to, $name_to); 
     $mail->AddReplyTo($email_from, $name_from); 
     $mail->MsgHTML($message_goes_here); 
     $mail->Subject = $your_subject; 
     $mail->AddAttachment($file_name_goes_here); 
     if($mail->Send()) { 
     } else { 
      echo "\r\nMail not sent. " . $mail->ErrorInfo; 
     } 
?> 
-1

급진적 인 생각처럼 들리 겠지만, reading the docs을 시도하거나 함수의 반환 값을 확인하거나 an up to date version of PHPMailer을 시도해 보거나 최근 예제에 기초하여 코드를 작성해보십시오.

PHPMailer는 $mail = new PHPMailer(true);으로 인스턴스화 할 때 예외를 발생시키고 @TheGreenKey가 말했듯이 디버깅을 활성화하면 오류 알림을 설정하고 오류 메시지를 표시합니다. 당신이 첨부 파일로 URL 내용을 추가하려면

,이 작업을 수행 할 수 있습니다 않았지만, 빠르고 안정적 ​​또는 효율적으로 않을 것

$mail->addStringAttachment(file_get_contents('http://mysite.co.uk/link/to/my/file.pdf'), 'cv.pdf');` 

.

관련 문제