使用从数组中提取的 id 向用户发送电子邮件

Posted

技术标签:

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

我有使用 phpmysql 中导入 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();
                


            

现在我有两个问题,

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

    另外,我将如何创建数组以传入 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')) 【参考方案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);

【讨论】:

以上是关于使用从数组中提取的 id 向用户发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用xampp从本地主机向特定的电子邮件ID发送电子邮件[重复]

使用 Javamail API 从 yahoo id 向其他电子邮件 id 发送邮件

Stripe - 向用户收费并通过电子邮件发送发票

如何从 textarea 字段中提取电子邮件 ID

从 Outlook 电子邮件中提取嵌入的图像

在 Django 中发送批量电子邮件