我正在制作一个允许注册时事通讯然后管理它的应用程序。如果该字段为空,是否为电子邮件类型,唯一的 ecc,则进行正常验证。但是我如何检查电子邮件是否真的存在?如果有人输入了假邮件,该邮件就会被输入数据库,这可能会弄乱数据库。还有其他的烦恼。是否可以检查邮件是否真的存在?
否则可以在10天后自动删除未注册用户吗?
我正在制作一个允许注册时事通讯然后管理它的应用程序。如果该字段为空,是否为电子邮件类型,唯一的 ecc,则进行正常验证。但是我如何检查电子邮件是否真的存在?如果有人输入了假邮件,该邮件就会被输入数据库,这可能会弄乱数据库。还有其他的烦恼。是否可以检查邮件是否真的存在?
否则可以在10天后自动删除未注册用户吗?
您可以创建一个规则来检查电子邮件格式是否有效:
$validator = Validator::make(
Input::all(),
array('email' => 'required|email')
);
if ($validator->fails())
{
return "This is not a valid e-mail";
}
但这只会检查格式 (name@domain.tld),因为无法知道电子邮件地址是否真的存在。
嗯......这并不完全正确,有一种方法:向该地址发送电子邮件,如果您没有收到错误消息,则该地址可能存在。
完成您需要的最佳方法是,当用户在您的系统中创建帐户时,向他/她发送一封确认电子邮件,其中包含他/她应该单击以验证该地址的链接。如果帐户在 x 天内未验证,则将其删除。这是一个可能对您有所帮助的问题:Laravel 4:如何制作确认电子邮件?.
关于您的最后一个问题:创建一个Artisan Command来检查未验证的帐户并将其删除。看看文档,很简单,Laravel 几乎可以为你完成所有工作。您可以使用 cron 或任务管理器每天运行一次此命令:
php /var/www/your-site-dir/artisan check:accounts
编辑:
这个问题将向您展示如何创建命令:Creating and using Laravel 4 commands
在 fire() 方法中,您应该执行以下操作:
public function fire()
{
$dt = Carbon\Carbon::now();
User::where('activated', false)
->where('created_at', '<', $dt->subDays(10))
->delete();
}
您可以使用一些 API 来验证电子邮件的有效性和存在性,但我不确定它们有多好。免费的通常将您限制在每小时 10 个左右,这对您来说可能还不够,具体取决于您的网站的繁忙程度。
查看http://verify-email.org/register/levels.html
如果您担心输入的电子邮件数量庞大,您可能会 log $_SERVER['REMOTE_ADDR']
,这将是电子邮件数据库中客户端的 IP 地址,并在将其他记录保存到表中之前检查以确保它是唯一的。
至于如何自己实际验证输入的电子邮件的存在和有效性,我相信您必须使用 fsockopen 并向服务器发出 smtp 命令。我确实找到了这个 php 类,它试图做我们正在谈论的事情http://www.webdigi.co.uk/blog/wp-content/uploads/2009/01/smtpvalidateclassphp.txt
我怀疑它是否有效,但应该为您提供一个不错的起点。