0

こんにちは、アプリケーションのニーズに合わせて 2 種類のメールを送信しています。こんな感じで、ユーザーが何かを承認すると、承認した旨のメールが送信され、それ以外の場合は承認後に請求書が 1 通生成され、メールに添付されて送信されます。

今起こっていることは、これら 2 つのメールが 1 分以内にユーザーに送信されるため、最初のメールでは添付ファイルが不要になることです。もう 1 つ、別のユーザーも承認したとします。ちなみに、請求書はユーザーごとに異なります。しかし、2 番目のユーザーの場合、最初のユーザーと 2 番目のユーザーの請求書の両方のファイルが添付されます。

このようなことが起こることはわかっているので、データベース内のユーザーに送信するたびにメールのコピー全体を保存しています。不要な添付ファイルが表示されている最初のケースのデータベースには添付ファイルがなく、2 つの添付ファイルが表示されている 2 番目のケースでは、データベースにのみユーザー 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 に答える