2010-05-04 4 views
-1

phpmailer 클래스를 사용하여 전자 메일을 보내고 메일에 파일을 첨부하고 있습니다. 전자 메일은 성공적으로 전송되었지만 SQL 파일 인 첨부 파일은 비어 있습니다. 이미지 파일로 시도했지만 첨부 한 모든 파일이 비어있는 것처럼 보입니다. 누구든지이 문제를 해결할 수 있습니까?phpmailer 메일 보내기

$mail = new PHPMailer(); 
    $body = "Reminder"; 
    $mail->IsSMTP(); 
    $mail->Host  = "mail.yourdomain.com"; 
    $mail->SMTPDebug = 1; 

    $mail->SMTPAuth = true; 
    $mail->SMTPSecure = "ssl"; 
    $mail->Host = "smtp.gmail.com"; 
    $mail->Port = 465; 
    $mail->Username = "[email protected]"; 
    $mail->Password = "abc";    
    $mail->SetFrom('[email protected]', 
    'blbla'); 
    $mail->AddReplyTo("[email protected]","First Last"); 
    $mail->Subject = "Your order has been successfully placed" 
    $mail->MsgHTML($body); 
    $mail->AddAddress("[email protected]","xyz"); 
    $mail->AddAttachment("D:\b2\shop3.sql","shop3.sql"); 

업데이트 : 첨부하기 전에 파일 크기를 표시하려고 시도했지만 실제로 파일 크기를 표시합니다. 누구든지 제발 도와 주실 래요?

답변

0

첨부하기 전에 파일의 존재 여부를 테스트 해 볼 수 있습니다. 난 당신이 대신

+0

@amphetamachine : shop3.sql 첨부로 메일이 전송되었지만 비어 있습니다. 오류 메시지가 표시되지 않습니다. – chupinette

+0

예, PHP 코딩은 PHPMailer에게 "shop3.sql"첨부 파일의 이름을 지정합니다. 그것은 실제로 "D : \ b2 \ shop2.sql"파일을 찾을 수 있다고 말할 수는 없지만 대신 비어 있거나 존재하지 않거나 액세스 할 수없는 파일의 내용을 "shop3.sql"로 명명 할 수 있습니다. 첨부 파일이 없으면 표준 PHPMailer 세트에 오류 메시지가 표시됩니까? 방금 PHP 코드를 살펴 보았습니다. '$ mail-> AddAttachment()'는 파일을 읽을 수없는 경우 false를 반환해야합니다. 어쩌면 실행했을 때 반환되는 내용을 확인하고, false이면 전자 메일을 중단하고 오류 메시지를 표시 할 수 있습니다. –

-1

: 또한, 그것은 \는 PHP에서 문자열의 내부 행동 할 것입니다 방법을 알 수없는, 그래서는 C 표준을 통해 탈출하는 가장 좋은 방법입니다 추가 테스트를위한 몇 가지 제안 :

1 - 실행중인 스크립트와 동일한 디렉토리에있는 간단한 * .txt 파일을 시도하고 첨부하십시오. 이것은 Attachment 측면을 테스트 할 것이고 스크립트가 어떤 파일을 첨부하는 것을 좋아하지 않을지 아니면 * .sql 파일 만 첨부 할지를 증명할 것입니다.

2 - # 1이 정상적으로 작동하면 * .txt 파일을 * .sql 파일이있는 폴더로 이동 한 다음 다시 테스트하십시오. 그러면 스크립트가 사용중인 파일 경로를 통해 파일에 액세스 할 수 있는지 여부를 증명해야합니다.

3 - * .sql 파일의 내용을 스크립트에서 생성 된 웹 브라우저 출력이나 전자 메일 메시지 본문에 반향시켜보십시오. 또한 스크립트가 문제의 파일을 읽을 수 있는지 여부를 증명해야합니다.

나는이 제안들로 인해 기반이 떨어져 있을지 모르지만, 내가이 문제를 해결하려고한다면 내가 시작할 것입니다.

+2

-1 - 질문에 답하는 가장 큰 규칙 : 절대적으로 필요한 경우가 아니면 전체 재 작성을 제안하지 마십시오. 게다가, PHPMailer는 충분히 잘 작동합니다. – amphetamachine

0

swiftmailer.org을 시도하는 것이 좋습니다

$attach_filename = "D:\\b2\\shop3.sql"; 
if (is_file($attach_filename)) { 
    $mail->AddAttachment($attach_filename,"shop3.sql"); 
} else { 
    print "error: attachment $attach_filename doesn't exist"; 
} 
-1

대신 도움이 될 수 있습니다. 내가 한 것은 .sql 파일을 압축하여 모든 콘텐츠가 포함되어 있는지 확인하고 이메일을 작게 만듭니다 (데이터베이스가 10MB 이상인 경우 유용). .sh 스크립트를 사용하여 나는 "sqlbackup.sh"라는 이름을 붙였습니다.

사이드 노트 : 웹 서버의 "db_backup/sqldata"폴더에 저의 .sql 파일이 저장되며이 폴더에는 유일한 .sql 파일입니다. 두 개의 폴더가 아직 없으면 만듭니다. 내가 "mail.php"

보조 노트라는 이름의 내 이메일에이 압축 파일을 전송하는 PHP 메일 파일을 만든

#!/bin/sh 
cd /home/<username>/db_backup/sqldata/ 
tar -zcvf sqldata.tar *.sql 
cd /home/<username>/db_backup/ 
perl emailsql.pl 

다음 : 나는 [email protected] 주소를 사용 보낸 사람과 회신 주소는 나 자신에게로가는 것과 같습니다. 편집하십시오.

<?php 
$to = '<enter email to send to>'; 
$subject = 'SQL Backup' . date('r', time()); 
$random_hash = md5(date('r', time())); 
$headers = "From: <from address>\r\nReply-To: <reply to address>"; 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
$attachment= chunk_split(base64_encode(file_get_contents('sqldata/sqldata.tar'))); 
ob_start(); 
?> 

--PHP-alt-<?php echo $random_hash; ?>-- 

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: application/x-tar; name="sqldata.tar" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?> 
--PHP-mixed-<?php echo $random_hash; ?>-- 

<?php 
$message = ob_get_clean(); 
$mail_sent = @mail($to, $subject, $message, $headers); 
?> 

그럼 내가 한 모든 먼저, 파일의 크기에 따라 지퍼를 만드는 '메일을 실행하는 cron 작업을 만들기 위해'sqlbackup.sh '파일을 실행하는 cron 작업을 만들 수 있었다. PHP '파일. zip 구성 후 한 시간에 mail.php 파일을 실행합니다.

전자 메일에 메시지를 추가하려면 THIS LINK을 방문하고 'ob_start(); 뒤에 해당 영역에 코드를 추가하십시오. ?> '

희망이 도움이됩니다.