phpmailer отправка почты - PullRequest
0 голосов
/ 04 мая 2010

Я использую класс phpmailer для отправки электронной почты и прикрепляю файл к почте. Письмо успешно отправлено, но вложение, являющееся файлом sql, пусто, чего не должно быть. Я попытался с файлом изображения, но кажется, что каждый файл, который я прикрепляю, пуст. Может кто-нибудь помочь мне решить эту проблему, пожалуйста?

$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 = "abc@gmail.com";  
    $mail->Password = "abc";              
   $mail->SetFrom('abc@gmail.com',
  'blbla');
   $mail->AddReplyTo("name@yourdomain.com","First Last");
   $mail->Subject = "Your order has been successfully placed"
   $mail->MsgHTML($body);
   $mail->AddAddress("xyz@live.com","xyz");
   $mail->AddAttachment("D:\b2\shop3.sql","shop3.sql");

ОБНОВЛЕНИЕ: я пытался отобразить размер файла перед его прикреплением, и он фактически отображает размер файла. Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 4 ]

0 голосов
/ 07 апреля 2013

Это может помочь вам вместо этого. Сначала я заархивировал файл .sql, чтобы убедиться, что все содержимое включено, и уменьшил размер электронного письма (полезно, если у вас база данных объемом 10 МБ или более). Для этого я использую скрипт .sh, который я назвал "sqlbackup.sh":

примечание: мой файл .sql хранится в папке "db_backup / sqldata" на веб-сервере и является единственным файлом .sql в этой папке. Создайте две папки, если они еще не существуют.

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

далее я создал почтовый файл php, который отправляет этот zip-файл на мою электронную почту, которую я назвал "mail.php"

примечание: я использовал адрес no-reply@domain.co.za для адреса from и в качестве ответа на него, так как он отправлялся самому себе. отредактируйте соответственно.

<?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, чтобы создать zip, а затем, в зависимости от размера файла, создать задание cron для запуска файла mail.php. Я запускаю свой файл mail.php через час после настройки zip.

если вы хотите добавить сообщение к электронному письму, посетите ЭТУ ССЫЛКУ и добавьте соответствующий код в область после 'ob_start (); ?> '

Надеюсь, это поможет.

0 голосов
/ 04 мая 2010

Я предлагаю вам попробовать swiftmailer.org вместо

0 голосов
/ 06 мая 2010

Пара предложений для дальнейшего тестирования:

1 - Попробуйте присоединить простой файл * .txt, расположенный в том же каталоге, что и выполняемый скрипт. Это протестирует сторону Attachment и может доказать, не нравится ли сценарию прикрепление каких-либо файлов или только * .sql.

2 - Если # 1 работает нормально, переместите файл * .txt в ту же папку, в которой находится файл * .sql, затем протестируйте снова. Это должно доказать, может ли скрипт получить доступ к файлу через используемый вами путь к файлу.

3 - Попробуйте отобразить содержимое файла * .sql либо в выводе веб-браузера, сгенерированном сценарием, либо в тексте сообщения электронной почты. Это также должно доказать, способен ли скрипт прочитать рассматриваемый файл.

С этими предложениями я, возможно, не согласен, но с них я начну, если попытаюсь решить эту проблему.

0 голосов
/ 04 мая 2010

Вы можете попробовать проверить наличие файла, прежде чем пытаться его прикрепить. Кроме того, неизвестно, как \ будет действовать внутри строки в PHP, поэтому лучше избегать его с помощью стандартов C:

$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";
}
...