如何处理不存在的电子邮件

时间:2013-09-24 14:09:36

标签: laravel laravel-4 newsletter

我正在创建一个应用程序,允许注册一个时事通讯,然后进行管理。 如果字段为空则有正常验证,如果是电子邮件类型,则为唯一的ecc .. 但是我如何检查电子邮件是否确实存在? 如果有人输入了假邮件,那么该邮件就会输入到数据库中,这会弄乱数据库。还有其他烦恼。 是否可以检查邮件是否确实存在?

否则可以在10天后自动删除未注册的用户?

2 个答案:

答案 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

我怀疑它是否有效,但应该给你一个很好的起点。