我正在创建一个应用程序,允许注册一个时事通讯,然后进行管理。 如果字段为空则有正常验证,如果是电子邮件类型,则为唯一的ecc .. 但是我如何检查电子邮件是否确实存在? 如果有人输入了假邮件,那么该邮件就会输入到数据库中,这会弄乱数据库。还有其他烦恼。 是否可以检查邮件是否确实存在?
否则可以在10天后自动删除未注册的用户?
答案 0 :(得分:2)
您可以创建规则来检查电子邮件格式是否有效:
$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: how to make confirmation email?。
关于您的上一个问题:创建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();
}
答案 1 :(得分:1)
您可以使用一些API来验证电子邮件的有效性和存在性,但我不确定它们有多好。免费的通常会限制你大约10个小时,这对你来说可能不够,取决于你网站的繁忙程度。
查看http://verify-email.org/register/levels.html
如果您担心输入大量电子邮件,您可能会记录$_SERVER['REMOTE_ADDR']
,这将是电子邮件中数据库中客户端的IP地址,并检查以确保它在您之前是唯一的将其他记录保存到表格中。
至于如何实际验证输入的电子邮件的存在性和有效性,我相信您必须使用fsockopen并向服务器发出smtp命令。我确实发现这个php类试图做我们正在谈论的http://www.webdigi.co.uk/blog/wp-content/uploads/2009/01/smtpvalidateclassphp.txt
我怀疑它是否有效,但应该给你一个很好的起点。