在CI中发送邮件时会发生不必要的附件吗?

时间:2013-04-04 05:29:21

标签: php codeigniter email

大家好我发送两种邮件类型以满足我的应用需求。当用户批准我将向他们发送邮件的情况表明您已批准并且在批准一张发票后的其他情况下将生成并且它将作为附件发送到邮件时,场景就是这样。

现在发生的事情是这两封邮件会在一分钟内向用户发送一个或更少的间隙,因此对于第一封邮件来说,附件是不必要的。还有一件事,假设另一位用户也同意了。顺便说一下,不同用户的发票是不同的。但对于第二个用户,第一个用户和第二个用户发票都附加了两个文件。

我知道会发生这样的事情,这就是为什么我每次都要保存整个邮件副本,我发送给数据库中的任何用户。在我看到不必要的附件的第一种情况的数据库中没有附件,在第二种情况下,我看到两个附件,只有附件才在数据库中属于用户2。

注意:这整封邮件都是在LAMP环境中使用CI电子邮件类发送的。

以下我用来发送邮件的功能。这是一个帮助函数,我会在整个应用程序中调用它。“

function mail_send($to, $email_text_key, $subject_key_values, $message_key_values,$file)
{
    $CI = & get_instance();
    $CI->config->load('email_text');
    //      echo $to;echo $email_text_key;print_r($subject_key_values);print_r($message_key_values);
    $subject = $CI->config->item($email_text_key."_email_subject");
    $message = $CI->config->item($email_text_key."_email_body");// print_r($subject);print_r($message);
    send_mail($to, $subject, $message, $subject_key_values, $message_key_values,$file);
}


function send_mail($to, $subject, $message, $subject_key_values, $message_key_values,$file)
{
    $CI = & get_instance();
    $CI->config->load('email_text');
//  print_r($message_key_values);   
    foreach ( $subject_key_values as $key => $val ) {
        $subject = str_replace ("%$key%", $val, $subject);
    }

    foreach ( $message_key_values as $key => $val ) {
        $message = str_replace ("%$key%", $val, $message);
    }
    $message = str_replace ("%FAQ%", base_url()."index.php/welcome/faq", $message);
    $message = str_replace ("%LOGO%", base_url()."images/logo.png", $message);
    $message = str_replace ("%LOGO%", base_url()."images/Icon.ico", $message);
    $CI->load->library('email');

    $CI->email->from($CI->config->item('from_email'), $CI->config->item('from_email_name'));
    $CI->email->to($to);

    $CI->email->subject($subject);
    $CI->email->message($message);
    if($file !='') {
    $CI->email->attach($file);
    $file_type='pdf';
    $file_size = filesize($file);
    $fp = fopen($file,'r');
    $content = fread($fp,$file_size);
    $content = addslashes($content);
    fclose($fp);
    $CI->email->send();
    } else {
     $CI->email->send();
    }
    //make mail copied
    $CI->load->model('email_model');
    $user_data = array(
                        'to_email' =>$to,
                        'subject' =>$subject,
                        'message' =>$message,
                        'date_time' => date("Y-m-d H:i:s"),
                        'file_name' =>$file,
                        'file_type' =>$file_type,
                        'file_size' =>$file_size,
                        'content' =>$content,
                    );
    $CI->email_model->make_email_copy($user_data);              
}

注意:请检查我的代码,我将文件附加到if和else条件下的邮件。

1 个答案:

答案 0 :(得分:1)

$这 - >的电子邮件 - >清除()

将所有电子邮件变量初始化为空状态。如果您在循环中运行电子邮件发送功能,允许在循环之间重置数据,则可以使用此功能。

foreach ($list as $name => $address)
{
    $this->email->clear();

    $this->email->to($address);
    $this->email->from('your@example.com');
    $this->email->subject('Here is your info '.$name);
    $this->email->message('Hi '.$name.' Here is the info you requested.');
    $this->email->send();
}

如果您将参数设置为TRUE,则也会清除所有附件:

$this->email->clear(TRUE);