我有一个简单的用户注册表单,其中包含一个复选框,如果有任何项目的活动,用户可以获得每日电子邮件通知...就像Stack Overflow有一个“每天通知xxx@example.com”回答”。
我目前在LAMP环境中实现此目标的想法如下:
在用户数据库中,如果用户希望收到每日电子邮件,请设置一个布尔值。
如果有任何项目活动,项目将使用当前时间戳进行更新。
每晚(午夜),执行一个PHP文件(可能通过cron作业),该文件扫描项目数据库以确定哪些项目当天有活动。对于具有活动的项目,将选择项目所有者名称并扫描用户表以检查用户是否希望收到每日电子邮件通知。如果是,请添加到收件人列表;否则,忽略。
在我开始实施之前,我有一些问题/关注点会得到一些指导:
我在共享托管环境中。我是否需要采取哪些预防措施才能被托管公司或接收邮件服务器误认为垃圾邮件?
我是否需要“收集”收件人列表(一次50封电子邮件)并通过电子邮件发送每个组?这就像睡觉一样简单(30);每次调用mail()之间?
我正在使用CodeIgniter框架,并且cron作业会在控制器中调用相应的函数,以便在午夜运行它。如何限制仅来自cron作业的呼叫,以防止某些未经授权的用户从浏览器调用此功能?
感谢。
答案 0 :(得分:1)
1)从SPF记录和DKIM开始,如果可以的话,让邮件服务器知道您希望从服务器发送电子邮件
2)首先,您需要将收件人放在BCC字段中,这样每个用户都不会拥有系统上49个其他用户的电子邮件地址。更进一步是单独执行每封电子邮件,只将收件人放在“收件人”字段中。这种方法还允许您为用户定制每封电子邮件(可能会输入“Hi [First name]”。
3)让cron这样的工作
wget http://localhost/send-emails
然后在您的脚本中,检查$_SERVER
并确保您只允许来自127.0.0.1的请求
答案 1 :(得分:1)
关于第三个问题:您可以使用.htaccess文件来阻止访问该特定页面,也可以使用命令行参数在cron中调用脚本,并在$argv
中检查该变量。
答案 2 :(得分:1)
1)SPF记录是最重要的事情。使用来自域名的电子邮件,以及whatever@whatever.com,其中whatever.com正确设置了SPF记录。
2)限制电子邮件总是好的,特别是在首次启动时。您应该检查共享服务器策略,通常为200-500 /小时。计算到达的秒数。例如300 /小时是每12秒1。发送好的电子邮件几周后,你可以发送更多的金额。
3)您可以在webroot之外放置cron文件,或通过.htaccess或其他方法限制访问。
答案 3 :(得分:1)
如果您确实更改了php中的“发件人”标题,请确保将其更改为该服务器上托管的域。当b.com的服务器发送邮件@a.com时,它看起来很可疑。
我会单独发送电子邮件foreach ($Users as $User)...
,因为这样可以让您个性化电子邮件内容。即使您现在不需要对电子邮件进行个性化设置,也可能需要稍后进行,并且在您需要时对它的支持已经存在。
首先,我会将脚本存储在Web根目录之外。我不确定CodeIgniter是否允许你这样做,但是Apache不需要服务该脚本。 Cron不关心脚本的存储位置。另外,我已经检查了脚本执行的时间。如果不是午夜,那么请不要发送电子邮件。此外,您可以保留一个日志,并检查以确保在发送前一天尚未发送电子邮件。