Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не прицепляется вложение к почте
 
 автор: vladimir_sko   (07.02.2010 в 11:11)   письмо автору
 
 

Здравствуйте. Большая просьба помочь. Как искуственно создать файл-вложение с именем import.txt (без формы) и впихнуть в него часть информации из текста письма, например id товара и количество, разделенных точкой с запятой
если через форму выбирать файл с локального диска, то все получается, а если указывать путь к файлу на сервере

файл не прицепляется, что делаю не так?


case "email":
               
                     //stricter email validation - udated to allow + in local name part
                     if (strlen($value)>0 &&  !preg_match(
                     '/^(?:[a-z0-9+_-]+?\.)*?[a-z0-9_+-]+?@(?:[a-z0-9_-]+?\.)*?[a-z0-9_-]+?\.[a-z0-9]{2,5}$/i', $value) ){
                         $vMsg[count($vMsg)] = isset($formats[$name][4]) ? $formats[$name][4] : $desc . $_lang["ef_invalid_email"];
                         $rClass[$name]=$invalidClass;
                     }
                   
 $name=$rb_base_url."cache/import.txt";
                   
  
                           if ($_FILES[$name]['error']==1 || $_FILES[$name]['error']==2){
                                           
                         $vMsg[count($vMsg)]=$desc . $_lang['ef_upload_exceeded'];
                         $rClass[$name]=$invalidClass;
                     }elseif ($isRequired==1 && ($_FILES[$name] && $_FILES[$name]['type']=='')){
                     
                         $rMsg[count($rMsg)]=$desc;
                         $rClass[$name]=$requiredClass;
                     }elseif ($_FILES[$name]['tmp_name']){
                     
                         if( substr($fld[5],0,5)!="#LIST" || validateField($_FILES[$name]['name'],$fld,$vMsg,$isDebug) )
                         $attachments[count($attachments)] = $_FILES[$name]['tmp_name'];
                                 else $rClass[$name]=$invalidClass;
                     }
                   
                     break;

  Ответить  
 
 автор: t3ma   (07.02.2010 в 11:59)   письмо автору
 
   для: vladimir_sko   (07.02.2010 в 11:11)
 

Если Вы подставляете файл Import.txt НЕ через форму причем здесь массив $_FILES ?

  Ответить  
 
 автор: vladimir_sko   (07.02.2010 в 12:27)   письмо автору
 
   для: t3ma   (07.02.2010 в 11:59)
 

согласен, просто не знаю, что делать, не разу не сталкивался. есть файл на сервере , есть путь к нему

что надо записать в переменную $attachments ?




$attachments="path/import.txt"; 


                # send user a copy of the report
                if($ccsender && $fields['email']) {
                    $mail = new PHPMailer();
                    $mail->IsMail();
                    $mail->CharSet = $modx->config['modx_charset'];
                    $mail->IsHTML($isHtml);
                    $mail->From        = $from;
                    $mail->FromName    = $fromname;
                    $mail->Subject    = $subject;
                    $mail->Body        = $report;
                    AddAddressToMailer($mail,"to",$fields['email']);
                    AttachFilesToMailer($mail,$attachments);
                    if(!$mail->send()) return 'CCSender: ' . $_lang['ef_mail_error'] . $mail->ErrorInfo;
                }


так файл не прицепляется

  Ответить  
 
 автор: Sergeich   (07.02.2010 в 13:05)   письмо автору
 
   для: vladimir_sko   (07.02.2010 в 12:27)
 

Для начала следует прописать полный путь к файлу и посмотреть, что происходит. Если не работает, то проверить конфиг апаче относительно разрешенных директорий - лучше все делать не выходя за пределы корневой директории сервера и не подкручивая специально конфиги. Если работатет - смотреть где допустили ошибку в относительном пути.

  Ответить  
 
 автор: vladimir_sko   (07.02.2010 в 13:19)   письмо автору
 
   для: Sergeich   (07.02.2010 в 13:05)
 

путь правильный, папка cache 777.
если файл на сервере, то достаточно просто указать путь к нему??

                # send user a copy of the report
                if($ccsender && $fields['email']) {
                    $mail = new PHPMailer();
                    $mail->IsMail();
                    $mail->CharSet = $modx->config['modx_charset'];
                    $mail->IsHTML($isHtml);
                    $mail->From        = $from;
                    $mail->FromName    = $fromname;
                    $mail->Subject    = $subject;
                    $mail->Body        = $report;
                    AddAddressToMailer($mail,"to",$fields['email']);
                    $attachments="/home/users/a/***/domains/***.ru/new/assets/cache/import.txt";
                    AttachFilesToMailer($mail,$attachments);
                    if(!$mail->send()) return 'CCSender: ' . $_lang['ef_mail_error'] . $mail->ErrorInfo;
                }



# Attach Files to Mailer
function AttachFilesToMailer(&$mail,&$attachFiles) {
    if(count($attachFiles)>0){
        foreach($attachFiles as $attachFile){
            if(!file_exists($attachFile)) continue;
            $FileName = $attachFile;
            $contentType = "application/octetstream";
            if (is_uploaded_file($attachFile)){
                foreach($_FILES as $n => $v){
                    if($_FILES[$n]['tmp_name']==$attachFile) {
                        $FileName = $_FILES[$n]['name'];
                        $contentType = $_FILES[$n]['type'];
                    }
                }
            }
            $patharray = explode(((strpos($FileName,"/")===false)? "\\":"/"), $FileName);
            $FileName = $patharray[count($patharray)-1];
            $mail->AddAttachment($attachFile,$FileName,"base64",$contentType);
        }
    }
}



ошибка

Error: Invalid argument supplied for foreach()
Error type/ Nr.: Warning - 2
File: /home/users/a/***/domains/****.ru/new/assets/snippets/eform/eform.inc.php
Line: 662
Line 662 source: foreach($attachFiles as $attachFile){

  Ответить  
 
 автор: Sergeich   (07.02.2010 в 13:58)   письмо автору
 
   для: vladimir_sko   (07.02.2010 в 13:19)
 

А может все-таки неправильный? Или права на файл несоответствующие? Что будет, если звездочки реальными буквами заменить?

  Ответить  
 
 автор: vladimir_sko   (07.02.2010 в 14:20)   письмо автору
 
   для: Sergeich   (07.02.2010 в 13:58)
 

>А может все-таки неправильный? Или права на файл несоответствующие? Что будет, если звездочки реальными буквами заменить?

путь у движка проверенный звездочки вместо названия домена, права на файл 777 на папку 777

и если файл приклеплять через форму , то все работает


case "file":
                            if ($_FILES[$name]['error']==1 || $_FILES[$name]['error']==2){
                                $vMsg[count($vMsg)]=$desc . $_lang['ef_upload_exceeded'];
                                $rClass[$name]=$invalidClass;
                            }elseif ($isRequired==1 && ($_FILES[$name] && $_FILES[$name]['type']=='')){
                                $rMsg[count($rMsg)]=$desc;
                                $rClass[$name]=$requiredClass;
                            }elseif ($_FILES[$name]['tmp_name']){
                                if( substr($fld[5],0,5)!="#LIST" || validateField($_FILES[$name]['name'],$fld,$vMsg,$isDebug) )
                                {$attachments[count($attachments)] = $_FILES[$name]['tmp_name'];
                                    
                                
                                            else $rClass[$name]=$invalidClass;
                            }
                            break;

  Ответить  
 
 автор: vladimir_sko   (07.02.2010 в 16:21)   письмо автору
 
   для: vladimir_sko   (07.02.2010 в 14:20)
 

Получилось


function AttachFilesToMailer1(&$mail,&$attachFiles) {
    if(count($attachFiles)>0){
    $contentType = "application/octetstream";
    $mail->AddAttachment('/home/users/a/***/tmp/import.txt','import.txt',"base64",$contentType);
        }
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования