【问题标题】:sending emails to user with id extracted from array使用从数组中提取的 id 向用户发送电子邮件
【发布时间】:2016-01-29 12:22:22
【问题描述】:

我有使用 php 在 mysql 中导入 CSV 数据的代码,导入工作正常,但我需要额外的功能,通过从 csv 中搜索 user_id 向用户发送电子邮件。我已将 csv 转换为数组 $csv_array,

user_id     order    part

1           test     phone
1           another  pad
2           all      tab

现在,代码将搜索用户并从用户数据库中获取 user_email,然后向用户发送电子邮件。

foreach ($csv_array as $row) {

                $this->load->library('email');
                $this->load->library('parser');

                $email = $this->admin_model->getEmailNotification();

                $user = $this->model->getUserShipment($row['user_id']);

                if(count($user) == 1)
                {
                    $data = array(  
                        'user_firstname' => $user->user_firstname,
                        'user_lastname' => $user->user_lastname,
                        'user_email' => $user->user_email,
                        );

                    $subject = 'Your Order has been shipped';
                    $message = $this->parser->parse('templates/update', $data, TRUE);

                    $config['protocol'] = $email->email_protocol;
                    $config['smtp_host'] = $email->email_host;
                    $config['smtp_user'] = $email->email_address;
                    $config['smtp_pass'] = $email->email_password;
                    $config['smtp_port'] = $email->email_port;
                    $config['newline']    = "\r\n";

                    $this->email->initialize($config);

                    $this->email->from($email->email_address);
                    $this->email->to($user->user_email);  
                    $this->email->subject($subject);
                    $this->email->message($message);        

                    $this->email->send();
                }


            }

现在我有两个问题,

  1. 这将为每一行发送电子邮件,但我只想发送一封包含两个订单的电子邮件,例如,在上表中,user_id 1 将只收到一封包含订单和零件信息的电子邮件,

  2. 另外,我将如何创建数组以传入 user_id-1 的模板 -> 订单和零件放入模板内的表格中?

谢谢,

【问题讨论】:

  • 关于您的第一个问题,您如何包含“订单”和“零件”数据?它目前是发送 2 封包含 2 个订单的电子邮件还是 2 封包含一个订单的电子邮件?
  • @Silencio,是的,目前我还没有添加作为 $data 的一部分,但是如果我添加 'order' => $row['order],那么它将发送 2 封包含单个信息的电子邮件
  • 您希望如何包含您的订单和零件数据?如果您可以添加所需数据数组的示例,将会很有帮助。
  • @Silencio,它将是简单的 MD 数组,如 array(array('order' =>'test', 'part' => 'phone'), array('order' =>'another ', 'part' => 'pad'))

标签: php mysql arrays email csv


【解决方案1】:

我修改了你的代码。它只会在检测到新的 user_id 时发送电子邮件。

我将您的电子邮件发送过程提取到一个函数中,以便在阅读完 csv 后调用它(否则最后一个 user_id 将不会收到电子邮件)。

我创建的数组 $orderandparts 的格式是你想要的,你只需要把它放在函数内部使用。

代码:

function sendmail($user_id,$orderandparts)
{
$this->load->library('email');
$this->load->library('parser');

$email = $this->admin_model->getEmailNotification();

$user = $this->model->getUserShipment($user_id);

if(count($user) == 1)
{
    $data = array(  
        'user_firstname' => $user->user_firstname,
        'user_lastname' => $user->user_lastname,
        'user_email' => $user->user_email,
        );

    $subject = 'Your Order has been shipped';
    $message = $this->parser->parse('templates/update', $data, TRUE);

    $config['protocol'] = $email->email_protocol;
    $config['smtp_host'] = $email->email_host;
    $config['smtp_user'] = $email->email_address;
    $config['smtp_pass'] = $email->email_password;
    $config['smtp_port'] = $email->email_port;
    $config['newline']    = "\r\n";

    $this->email->initialize($config);

    $this->email->from($email->email_address);
    $this->email->to($user->user_email);  
    $this->email->subject($subject);
    $this->email->message($message);        

    $this->email->send();
}
}
$user_id ="";
$orders = array();
$parts = array();
$orderandparts = array();
foreach ($csv_array as $row) {
            if($user_id == "")
                $user_id = $row["user_id"];

            if($user_id == $row["user_id"])
            {
                array_push($orders,$row["orders"]);
                array_push($parts,$row["parts"]);
            }
            else//Sends mail if all user data has been finished (new user_id detected)
            {
            for($i;$i<count($orders);$i++)
            {
                $orderandparts[$i]["order"] = $orders[$i];
                $orderandparts[$i]["part"] = $orders[$i];
            }
            sendmail($user_id,$orderandparts);
            $user_id = $row["user_id"];
            unset($orders);
            unset($parts);
            unset($orderandparts);
            $orders = array();
            $parts = array();
            $orderandparts = array();
            array_push($orders,$row["orders"]);
            array_push($parts,$row["parts"]);
            for($i;$i<count($orders);$i++)
            {
                $orderandparts[$i]["order"] = $orders[$i];
                $orderandparts[$i]["part"] = $orders[$i];
            }
            }
}
sendmail($user_id,$orderandparts);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多