Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP/MySQL自动化电子邮件活动,不知道如何构造查询_Php_Mysql_Email_Sendgrid - Fatal编程技术网

使用PHP/MySQL自动化电子邮件活动,不知道如何构造查询

使用PHP/MySQL自动化电子邮件活动,不知道如何构造查询,php,mysql,email,sendgrid,Php,Mysql,Email,Sendgrid,我有两个MySQL表,一个是订户详细信息,另一个是我跟踪谁收到了发送给他们的电子邮件,哪个活动,哪个版本,等等(分别是crawler和sent_mail)。我构建了一个脚本,可以通过crawler表发送基于SendGrid API、web表单和一些javascript的电子邮件。但是我正在试图弄清楚如何告诉脚本从爬虫表中提取电子邮件,而当前活动没有列在sent_mail表中。我知道我必须使用连接,但不确定如何将逻辑构建到查询中。思想?我的尝试如下: foreach ('SELECT crawle

我有两个MySQL表,一个是订户详细信息,另一个是我跟踪谁收到了发送给他们的电子邮件,哪个活动,哪个版本,等等(分别是crawler和sent_mail)。我构建了一个脚本,可以通过crawler表发送基于SendGrid API、web表单和一些javascript的电子邮件。但是我正在试图弄清楚如何告诉脚本从爬虫表中提取电子邮件,而当前活动没有列在sent_mail表中。我知道我必须使用连接,但不确定如何将逻辑构建到查询中。思想?我的尝试如下:

foreach ('SELECT crawler.email FROM crawler LEFT JOIN sent_mail ON crawler.email = sent_mail.email WHERE sent_mail.campaigns <> "$campaign"') as $address) as $address) {
    $email = new SendGrid\Email();
    $email
        ->addTo($address)
        ->setFrom($address)
        ->setSubject($title)
        ->setText($text)
        ->setHtml($text)
    ;
    $sendgrid->send($email);
    $db-> $query = "
          INSERT INTO sent_mail (email, campaigns, campaign_version)
          VALUES ($address, $campaign, $campaign_version)"; echo 'great success';
}
foreach('SELECT crawler.email FROM crawler LEFT JOIN sent_mail ON crawler.email=sent_mail.email WHERE sent_mail.mail“$campaign”)作为$address){
$email=new SendGrid\email();
$email
->地址($地址)
->setFrom($address)
->设置主题($title)
->setText($text)
->setHtml($text)
;
$sendgrid->send($email);
$db->$query=”
插入已发送邮件(电子邮件、活动、活动版本)
价值观($address,$campaign,$campaign_version)”;呼应“巨大成功”;
}

我想您正在寻找以下代码。。 我认为下面的代码可能会有所帮助

    $get_records = mysql_query('SELECT crawler.email as `email_val` FROM crawler LEFT JOIN sent_mail ON crawler.email = sent_mail.email WHERE sent_mail.campaigns <> "$campaign"');

$i = 1;
while($data = mysql_fetch_assoc($get_records)){

    $to = $data['email_val'];
    $subject = 'Your Subject';

    // Always set content-type when sending HTML email
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

    // More headers
    $headers .= 'From: Your Name <you@you.com>' . "\r\n";


    $sendmail = mail($to,$subject,$message,$headers);
    if($sendmail){
        $insert = mysql_query("INSERT INTO sent_mail (email, campaigns, campaign_version)
          VALUES ('your value', 'your value', 'your value')");
        if($insert){
            echo  $i.'Value inserted & Mail sent to'.$data['email'];
        }else{
            echo  $i.'Value not inserted but Mail sent to'.$data['email'];
        }
    }else{
        echo  $i.'Mail sending fail to'.$data['email'];
    }
$i++;
}
$get_records=mysql_query('选择crawler.email作为'email_val',从crawler LEFT加入crawler.email=sent_mail.email WHERE sent_mail.campaign“$campaign”);
$i=1;
而($data=mysql\u fetch\u assoc($get\u records)){
$to=$data['email_val'];
$subject='您的主题';
//发送HTML电子邮件时始终设置内容类型
$headers=“MIME版本:1.0”。\r\n”;
$headers.=“内容类型:text/html;字符集=UTF-8”。\r\n”;
//更多标题
$headers.=“发件人:您的姓名”。“\r\n”;
$sendmail=mail($to、$subject、$message、$headers);
如果($sendmail){
$insert=mysql\u查询(“插入已发送邮件(电子邮件、活动、活动版本))
价值观(“你的价值”、“你的价值”、“你的价值”);
如果($插入){
回显$i.“插入值并将邮件发送至”。$data[“电子邮件”];
}否则{
echo$i.“未插入值,但已将邮件发送至”。$data['email'];
}
}否则{
echo$i.“邮件发送失败”。$data['email'];
}
$i++;
}

注意:在运行上述代码之前,请确保已建立数据库连接

您在这里使用的是什么应用程序或数据库框架?一般来说,使用字符串插值是一种迹象,表明您正在做一些严重错误的事情,因为您没有正确地使用它。它在我的本地服务器上运行,在互联网上不可用,所以我不担心SQL注入。不要对此漫不经心。使用PDO正确地完成这项工作并不困难,而且如果该代码以某种方式投入生产,它将为您避免潜在的破坏公司的错误。老实说,你在这里这么马虎是没有理由的。写起来真的很容易。如果有人在其中任何一个字符串中输入报价,您在此处所做的操作都将失败。如果给定的电子邮件已在给定的活动中被点击(意味着该活动位于该电子邮件的Send_mail表项中),我应该更清楚,我不希望再次发送该电子邮件。因此,您必须通过选择query签入db。。。现在,我正在更改代码,假设您在$campaign中传递了正确的值,并且提供了正确的表名和字段,那么
mysql\u query
在这里做什么?