[Помогите] Рассылка писем с вложенным файлом.

Тема в разделе "OpenCart", создана пользователем passtools, 12 май 2013.

  1. passtools

    passtools

    Регистрация:
    4 фев 2013
    Сообщения:
    231
    Симпатии:
    51
    В общем ищу модуль (хак) для рассылки сообщений с вложенным файлом (прайс-лист). Может кто писал или у кого есть модуль. Буду признателен.
    Пока нашел код
    Код:
    <?php
    function multi_attach_mail($to, $files, $sendermail){
    	 // email fields: to, from, subject, and so on
    	 $from = "Files attach <".$sendermail.">"; 
    	 $subject = date("d.M H:i")." F=".count($files); 
    	 $message = date("Y.m.d H:i:s")."\n".count($files)." attachments";
    	 $headers = "From: $from";
      
    	 // boundary 
    	 $semi_rand = md5(time()); 
    	 $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
      
    	 // headers for attachment 
    	 $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
      
    	 // multipart boundary 
    	 $message = "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
    	 "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 
      
    	 // preparing attachments
    	 for($i=0;$i<count($files);$i++){
    		 if(is_file($files[$i])){
    			 $message .= "--{$mime_boundary}\n";
    			 $fp =	@fopen($files[$i],"rb");
    		 $data =	@fread($fp,filesize($files[$i]));
    					 @fclose($fp);
    			 $data = chunk_split(base64_encode($data));
    			 $message .= "Content-Type: application/octet-stream; name=\"".basename($files[$i])."\"\n" . 
    			 "Content-Description: ".basename($files[$i])."\n" .
    			 "Content-Disposition: attachment;\n" . " filename=\"".basename($files[$i])."\"; size=".filesize($files[$i]).";\n" . 
    			 "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    			 }
    		 }
    	 $message .= "--{$mime_boundary}--";
    	 $returnpath = "-f" . $sendermail;
    	 $ok = @mail($to, $subject, $message, $headers, $returnpath); 
    	 if($ok){ return $i; } else { return 0; }
    	 }
    ?>
     
    winner7 нравится это.
  2. winner7

    winner7

    Регистрация:
    6 мар 2013
    Сообщения:
    322
    Симпатии:
    55
  3. kur1977

    kur1977

    Регистрация:
    11 фев 2013
    Сообщения:
    123
    Симпатии:
    59
    Посмотрите в код файла system/library/mail.php
    Там есть готовая обвязка
    PHP:
    public function addAttachment($file$filename '') {
    if (!
    $filename) {
    $filename basename($file);
    }
     
    $this->attachments[] = array(
    'filename' => $filename,
    'file'     => $file
    );
    }
    Если посмотреть в контроллер /information/contact.php :
    PHP:
    $mail = new Mail();
    $mail->protocol $this->config->get('config_mail_protocol');
    $mail->parameter $this->config->get('config_mail_parameter');
    $mail->hostname $this->config->get('config_smtp_host');
    $mail->username $this->config->get('config_smtp_username');
    $mail->password $this->config->get('config_smtp_password');
    $mail->port $this->config->get('config_smtp_port');
    $mail->timeout $this->config->get('config_smtp_timeout');
    $mail->setTo($this->config->get('config_email'));
       
    $mail->setFrom($this->request->post['email']);
       
    $mail->setSender($this->request->post['name']);
       
    $mail->setSubject(sprintf($this->language->get('email_subject'), $this->request->post['name']));
       
    $mail->setText(strip_tags(html_entity_decode($this->request->post['enquiry'], ENT_QUOTES'UTF-8')));
           
    $mail->send();
    То здесь чтобы письмо было с вложением - нужно добавить перед $mail->send(); еще одну строку
    PHP:
    $mail->addAttachment('Путь к файлу')
     
    passtools нравится это.