使用从数组中提取的 id 向用户发送电子邮件
Posted
技术标签:
【中文标题】使用从数组中提取的 id 向用户发送电子邮件【英文标题】:sending emails to user with id extracted from array 【发布时间】: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();
现在我有两个问题,
这将为每一行发送电子邮件,但我只想发送一封包含两个订单的电子邮件,例如,在上表中,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发送电子邮件[重复]