Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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_Notifications - Fatal编程技术网

使用PHP-MySQL的电子邮件通知系统

使用PHP-MySQL的电子邮件通知系统,php,mysql,email,notifications,Php,Mysql,Email,Notifications,我目前正在做一个需要向用户发送电子邮件通知的项目。它的工作方式是,用户遵循特定类别的帖子/群组,每当在帖子类别/群组下有新帖子或评论时,他们都会收到一封电子邮件,用帖子本身的片段通知他们 我预计每天发送超过5000封电子邮件。使用cron job获取用户并每隔一段时间发送电子邮件是否有效,或者是否有更好的方法来推送此电子邮件,同时避免电子邮件提供商将我的IP列入黑名单 下面是我的表格结构 第一桌 Notification ID // autoincrement message // the me

我目前正在做一个需要向用户发送电子邮件通知的项目。它的工作方式是,用户遵循特定类别的帖子/群组,每当在帖子类别/群组下有新帖子或评论时,他们都会收到一封电子邮件,用帖子本身的片段通知他们

我预计每天发送超过5000封电子邮件。使用cron job获取用户并每隔一段时间发送电子邮件是否有效,或者是否有更好的方法来推送此电子邮件,同时避免电子邮件提供商将我的IP列入黑名单

下面是我的表格结构

第一桌

Notification
ID // autoincrement
message // the message sent to users
createDate // date created
第二桌

User_Notification
ID // auto increment
userid // Id of users
notification_id // id of notification from first table
status // 0 or 1 
因此,每当添加帖子时,我都会在第一个表(通知)中插入通知,然后从另一个表(下面)中获取该组的所有追随者,我在该表中存储userid和组id。然后在第二个表中为每个用户插入(用户通知)

我的cron作业从user_通知表中获取大约20条记录,还从通知表中获取通知消息。我还从我的用户表中获取用户电子邮件

$firstquery = $lnk->mysqli->query("select * from user_notification where status=0 order by id ASC limit 0, 20", MYSQLI_USE_RESULT);
$secondquery = $lnk->mysqli->query("select * from notification where id=$notification_id", MYSQLI_USE_RESULT);
$thirdquery = $lnk->mysqli->query("select email from user_table where id IN($userids)", MYSQLI_USE_RESULT);

for($no=0;$no<counter;$no++)// loop to send emails
{
$lnk->emailsender($subject,$emailbody,$usr_email[$no]);
}
$firstquery=$lnk->mysqli->query(“从用户通知中选择*,其中状态=0,按id排序ASC限制0,20”,mysqli\u使用结果);
$secondquery=$lnk->mysqli->query(“从通知中选择*,其中id=$notification\u id”,mysqli\u使用\u结果);
$thirdquery=$lnk->mysqli->query(“从用户表中选择电子邮件,其中id位于($userids)”,mysqli\u使用结果);
对于($no=0;$noemailsender($subject,$emailbody,$usr_email[$no]);
}

请问有什么更好的方法吗?

每天5000封电子邮件大约是每分钟4封电子邮件,或者每15秒一封电子邮件。如果我是你,我会编写一个cron例程,每分钟运行一次,以发送应发送的电子邮件。这将确保你不会被当作垃圾邮件发送者对待,因为你会在考试时快速发送2500封电子邮件这也意味着你的用户可以很快收到电子邮件通知

您也可以在用户收到通知后立即发送电子邮件,绕过cron例程的需要。但是,如果您的站点由于任何原因出现活动激增,您可能会发现一些电子邮件无法通过


你也可以考虑使用像PixCIMP这样的第三方服务,它已经与电子邮件提供商有很好的权限,但是这是有代价的,4分钟的电子邮件一分钟我都不认为它值得。

< P>除非你与你的ISP有非常具体的关系,否则你极有可能被列入黑名单,否则你的电子邮件将被G。o直截了当地说是垃圾邮件。很难将群发电子邮件确定为合法的。你可以使用群发邮件服务API为你做一些肮脏的工作,比如邮件黑猩猩或经常联系


因此,您的代码最有可能工作,减去应通过邮件服务及其相关API完成的电子邮件位。

isp的黑名单实际上与您是否每隔一段时间发送它们无关。我们尝试了这一点,我们的isp首先阻止了它们,因为他们认为我们受到了黑客攻击,在解除阻止后,我们拒绝这样做n与我们的DNS服务器主机有问题,因为他们说,通过DNS进行查询的数量会降低DNS服务器的速度。我们还权衡了各种选择,然后意识到,最好使用第三方,该第三方已经拥有白名单上的ip地址,并且专为此类应用程序而构建。除非ss您可以使用其他东西发送电子邮件。尝试使用sendgrid确实很容易使用,而且也不贵。@LiamSorsby感谢您的解释,我很感激。@dvidsilva感谢您的建议,我目前正在考虑让他们的现收现付选项比sendgrid便宜。@andychukse好的,这是一个不错的选项,我没有检查不同的定价方式,因为不幸的是,我从来没有看过10封每日电子邮件:我要买的汉克(归mailchimp所有)。我感谢你坦率的建议。