0

大家好,我为我的应用程序需要发送两种邮件类型。场景是这样的,当用户批准某事时,我会向他们发送一封邮件,说明您已批准,而在其他情况下,在批准后将生成一张发票并将其作为邮件的附件发送。

现在发生的事情是这两封邮件在一分钟或更短的时间内发送给用户,因此对于第一封邮件,附件是不必要的。假设另一个用户也批准了另一件事。顺便说一下,不同用户的发票是不同的。但是对于第二个用户,第一个用户和第二个用户发票这两个文件都被附加了。

我知道这类事情会发生,这就是为什么我每次发送给数据库中的任何用户时都会保存整个邮件副本。在我看到不必要的附件的第一种情况的数据库中,没有附件,而在我看到两个附件的第二种情况下,只有数据库中属于用户 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 条件下将文件附加到邮件的代码。

4

1 回答 1

1

$this->email->clear()

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

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);
于 2013-04-04T07:06:37.370 回答