如何确保我不会从 php 的测试站点向客户发送任何电子邮件

Posted

技术标签:

【中文标题】如何确保我不会从 php 的测试站点向客户发送任何电子邮件【英文标题】:How can I make sure that I don't send any email to customers from testing site in php 【发布时间】:2012-11-18 10:26:25 【问题描述】:

我必须复制我现有的网站,以便在家中进行测试。我已经得到了公司的许可。

但在数据库中,我有超过 10,000 条带有电子邮件的客户记录。 我不想在各种测试期间弄乱网站时不小心向他们发送任何电子邮件。

避免这种情况的最佳方法是什么

我确实需要电子邮件功能来测试其他东西

【问题讨论】:

简单!清空用户数据库,只保留您自己(可能还有其他开发人员)的电子邮件 另外,配置开发服务器不向“外部”发送邮件。 让我匆忙补充一下,我的意思是数据库的本地副本而不是生产副本:) 如果您的代码在本地机器上,请使用 MSMTP 或其他方式设置本地邮件服务器,然后配置您的自定义邮件功能以使用本地服务器。巴姆。完全控制。 或在本地数据库中运行更新命令,将电子邮件地址字段设置为任何内容。不要使用WHERE 子句,所有记录都会立即更新 【参考方案1】:

更改所有电子邮件地址,例如将email@domain.com 更改为email#domain.com。测试完成后,您可以将# 替换为@

【讨论】:

“我确实需要电子邮件功能来测试其他东西” 这意味着 OP 仅使用mail()。不考虑任何通过 SMTP 直接通信的灵活替代方案。【参考方案2】:

如果您不想更改代码或数据库中的数据,并且如果您在本地计算机上使用 postfix,则可以将所有外发邮件重写到您的地址。更多信息:http://www.postfix.org/ADDRESS_REWRITING_README.html

【讨论】:

【参考方案3】:

您可以使用的最防白痴的方法通常是最适合这些事情的方法,因为我们都有那些可能出错的日子。当一个错误真的会毁了你的一天时,最好小心,即使是近乎偏执的人。

以下是一些可能有效的方法:

默认无能配置

绝对最安全的系统是将生产服务器的 SMTP 服务器配置保存在生产服务器上,保存在生产服务器上。您的开发副本将具有其他一些 SMTP 配置,例如测试 GMail SMTP 帐户。通常,GMail 将普通帐户每天限制为 500 封电子邮件,所以如果你真的搞砸了,你很快就会达到这个限制。

替换数据库中的客户电子邮件

要考虑的另一件事是清理数据库中的所有客户电子邮件,删除它们并用mytestaccount+0000@gmail.commytestaccount0001@gmail.com 替换它们,如果你想实际接收和检查它们,利用@987654325 的事实@ 和后续内容在传递到 GMail 时会被忽略,从而有效地为您提供无限的潜在电子邮件地址。

举个例子:

UPDATE customers SET email=CONCAT('mytestaccount+', customer.id, '@gmail.com')

您必须将其自定义为您想要的任何电子邮件地址。这样做的一个好处是,您的开发驱动器上不会有一份有价值的客户电子邮件地址列表以及任何相关的备份。为了彻底,您可能还应该打乱散列密码,这样数据库对潜在的黑客来说基本上毫无价值。太多次密码从未正确保护的备份中被刮掉。

使客户电子邮件无法送达

下一个最佳方法是将“.test”添加到系统中您不想发送的每封封电子邮件的末尾,这样它就会硬退回而不是转到某人的收件箱。

这基本上是一个单行:

UPDATE customers SET email=CONCAT(email, '.test')

在交付时覆盖电子邮件

您始终可以包含一些条件逻辑,例如您将故意替换电子邮件的收件人。这可能会有风险,因为您可能会意外禁用该开关,但请一如既往地小心。

实际上,这看起来像:

if ($i_should_not_spam_customer_accounts_accidentally)

  $mail->to = "nobody@nowhere"

使用 API 驱动的服务

一些邮件服务提供商有一个 API,可以在测试电子邮件时为您提供帮助。我是PostageApp 的联合创始人,该服务的设计目的是让您可以使用专门配置为接收但不发送电子邮件的 API 密钥发送消息。 MailGun 等其他服务也可以以类似的方式使用。

无单点故障

不过,远离悲剧的逻辑测试并不是一种好感觉。在您遭遇惨败之前,您应该确保有几件事出了问题。

【讨论】:

谢谢一点,非常好。还有一件事,我认为可能有一些用 100 多个 php 文件编写的硬编码电子邮件地址,我无法像经理和其他分销商那样找到它们。我怎样才能摆脱它们。使用正则表达式或您有其他想法 一般电子邮件正则表达式类似于/\b(\S+\@\S+\.\w+)\b/,可用于搜索和替换您的所有源文件。只要确保您已将所有内容都签入版本控制系统,因此如果您搞砸了您的转换,您可以快速撤消它,并验证您所做的更改。 gitperl 在这里是一个有效的组合:perl -pi -e 's/\b(\S+\@\S+\.\w+)\b/nobody@nowhere.nil/g' * 尽管还有其他方法可以实现相同的目标。 这就是为什么将电子邮件地址放在配置文件中总是一个更好的主意。很容易有一个特殊的“开发模式”配置发送到测试帐户,并且不会因混淆“Testy Testerpants”采购订单而惹恼您的同事。 谢谢哥们,实际上该网站由过去 10 年的 10 位不同程序员管理,所以我可以做很多事情。它在php4中,主页中有html框架

以上是关于如何确保我不会从 php 的测试站点向客户发送任何电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 向客户端发送多个 HTTP 2.0 流

从外部站点向 Laravel 发送 POST 请求

如何将 GET 请求从我的烧瓶应用程序发送到另一个站点?

php nginx反向代理

如何在 Visual Studio 负载测试中为每个用户从不同的客户端 IP 向服务器发送请求

如何确保可以从我的设备网络访问 GCM 服务器?