Вложения электронной почты - PullRequest
0 голосов
/ 08 мая 2019

Я строю систему, в которой вы можете отправлять электронную почту в желаемую дату и время, есть интерфейс, который собирает эти данные, и через cron отправляется электронное письмо. Это все работает, как и ожидалось, но у меня проблема с вложениями.

Когда cron запускает и отправляет электронное письмо, создается впечатление, что выходит более 1 электронного письма, второе электронное письмо добавляет вложения предыдущего электронного письма, отправленного самому себе, и это продолжается. Я попытался сбросить значение массива, который содержит имена файлов, но все равно не повезло.

E-mail A - (имеет 3 вложения / отправляет 3 вложения)

E-mail B - (имеет 2 вложения / отправляет 5 вложений)

Электронная почта C - (имеет 2 вложения / отправляет 7 вложений)

Это странно, потому что это вывод моего массива после каждого цикла:

Successful
Array
(
    [id] => 38
    [company_id] => 225
    [message_sender] => Favour Sanctuary
    [message_subject] => Delayed Email Testing
    [recipients] => xxxxxxxx@gmail.com
    [message_body] => I hope you get this and the pictures
    [message_type_id] => 
    [time_sent] => 2019-05-08 14:17:27
    [attach_file] => ["instagram8.png","networking.jpg"]
    [date] => 2019-05-08
    [time] => 13:19:00
    [sent] => 0
)
Successful
Array
(
    [id] => 39
    [company_id] => 225
    [message_sender] => Verdana State
    [message_subject] => Attachment Mail
    [recipients] => xxxxxxxx@gmail.com
    [message_body] => This time you will get it
    [message_type_id] => 
    [time_sent] => 2019-05-08 14:33:16
    [attach_file] => ["checkout.gif","kokoseller_new_logo.jpg","data_empty.png"]
    [date] => 2019-05-08
    [time] => 14:35:00
    [sent] => 0
)
Successful
Array
(
    [id] => 40
    [company_id] => 225
    [message_sender] => Kwame Eugene
    [message_subject] => Memories of FFx
    [recipients] => xxxxxxxx@gmail.com
    [message_body] => Lets hope this goes well
    [message_type_id] => 
    [time_sent] => 2019-05-08 16:31:34
    [attach_file] => ["evidence.pdf","kokoelec.jpg"]
    [date] => 2019-05-08
    [time] => 16:35:00
    [sent] => 0
)

Вот моя функция Cron:

<code>function delayed_email(){
    $check_date = date('Y-m-d');
    $check_time = date('H:i:s');

    $events = $this->db->query('SELECT * from record_mail where `date` IS NOT NULL and `time` IS NOT NULL and (`sent` = 0 OR `sent` IS NULL)')->result_array();
    foreach($events as $e){

        if($e['date']==$check_date && $e['time'] <= $check_time){
            $company_id = $e['company_id'];
            $subject = $e['message_subject'];
            $message = $e['message_body'];
            $sender = $e['message_sender'];
            $recipients = $e['recipients'];

            $attach_files = json_decode($e['attach_file'], TRUE);
            $send = regular_email($recipients,$message,$subject,$attach_files,$company_id,$sender);
            unset($attach_files);
            $attach_files = array();

        }

            if ($send == TRUE){
                echo 'Successful';
                echo '<pre>';
                print_r($e);
                echo '
'; // $ params = array ('sent' => 1); // $ this-> db-> where ('id', $ e ['id']); // $ this-> db-> обновление ( 'record_mail', $ PARAMS); } Еще { эхо «не удалось»; } } }

Вот мой помощник по электронной почте:

function regular_email($recipients, $message=NULL, $subject=NULL, $attach_files= NULL, $company_id=NULL, $sender=NULL){

    $CI =& get_instance();
    $CI->load->database();    
    $CI->load->library('email');
    $CI->load->helper('url');

    $to = $recipients ? $recipients : 'xxxxxx@gmail.com';

    $subject = $subject ? $subject: 'Correspondence';
    $body = $message; 
    $sender = $sender ?: company_name($company_id);

    $CI->email->from('xxxxxxx@gmail.com' , $sender);
    $CI->email->reply_to('xxxxxxx@gmail.com');
    $CI->email->to($to);
    $CI->email->subject($subject);
    $CI->email->message($body);

        if(is_array($attach_files)) {
            foreach($attach_files as $k => $v){
                $attach = base_url('uploads/email_attach_file/') . '/' . $v;
                $CI->email->attach($attach);
            }
        } else {
                //ATTACH ONE
                $attach = base_url('uploads/email_attach_file/') . '/' . $attach_files;
                $CI->email->attach($attach);
        }

    $result = $CI->email->send();

        if($result){
            return TRUE;
        } else {
            return FALSE;
        };    

        /*if(!$CI->email->send()){
            return $CI->email->print_debugger();
        }    */

}

1 Ответ

1 голос
/ 11 мая 2019

Поскольку вы отметили это с помощью PHPMailer, я предполагаю, что PHPMailer используется за кулисами.Когда вы вызываете $CI->email->attach($attach);, он сохраняет список файлов, которые вы вложили, т.е. он всегда добавляет вложения, он не устанавливает их.Обратите внимание, что количество вложений всегда увеличивается на количество файлов, которые вы добавляете каждый раз, поэтому первый получает 3, вы добавляете 2, делая 5, затем добавляете еще 2, делая 7. Это не ваши входные массивы, которые находятся вошибка, это внутренний список вложений, хранящихся в вашем почтовом экземпляре ($CI->email).

Если там находится PHPMailer, вам нужно вызвать метод clearAttachments(), чтобы очистить их - я бы предположил, что CIесть эквивалент или обертка для него - обратитесь к их документам.

...