让我解释一下我的话题.比方说,我正在为一个网上商店/目录创建一个小型的电子商务系统.客户有可能选择,他们是否希望接收通讯.如果他们这样做,那么逻辑上认为通讯应该在通讯形成并准备就绪时立即发送.

当然,通过从数据库中获取所有指定的用户电子邮件和循环使用循环邮件功能发送邮件,可以简单的做到这一点,但问题是我被告知这是不好的做法.简单而不便宜的方式是购买互联网服务发送通讯,但是需要PHP程序员呢?

所以我问你谦卑的同志,从你的角度来看可能是一个解决方案?

NB!你可能不会相信我,但不是垃圾邮件.

UPD:我可能已经解释了自己的错误,但我想听到一个解决方案,不仅是正确的方式发送邮件,而且还有关于正确的交付.因为不是每个邮件发送都是交付的.
当然有一些原因,这是不可预测的.例如,某些事情发生的一些地方,邮件丢失了(如果这样的事情是可能的话),但也有其他原因可能受到服务器或其他地方的影响.也许有需要和宿主谈谈吗?

没有理由不能将其写入 PHP,尽管我不会将其作为Webrequest / HTTP进程的一部分.我已经成功实施了每次邮寄或取消50万订阅者(取决于本地数据,因为这是一个位置特定的项目).这是一个内部项目,不幸的是没有代码/包,但我遇到了一些指针:

设置交货

>开始使用PHPmailer本身,来处理格式化,内容和头文件的编码,添加附件等.这部分功能很好,我不想从头开始写.
>电子邮件本身的“发送”只是在数据库中设置一些标志,是否/如何/应该发送给(订阅者的一部分).
>此标志设置完成后,它将自动由cronjob拾取,不再涉及网络服务器.
>我开始使用数百万个电子邮件地址严重污染的数据库,其中很多都是无效的,所以首先要验证所有的电子邮件地址格式,然后是主机:

> filter_var($email,FILTER_VALIDATE_EMAIL);超过订阅者(并且显然存储结果)摆脱了前几十万个无效电子邮件.
>从电子邮件中分离主机(并存储主机名),并验证(在DNS中有MX或至少A记录,但请记住:您可以发送电子邮件到IP地址foo @ [255.255.255.255],所以保持那些有效))摆脱了更多的部分.这里的电子邮件地址不会被永久禁用,而是显示状态标志,表示由于域名/ ip而被禁用.
>脚本被更改为要求在订阅/插入之前有效的电子邮件地址,这个废话“你会得到它@任何地方”订阅污染数据库是荒谬的.

>现在我结束了一个有潜力有效的电子邮件地址列表.本质上有三种方法来检测无效地址(请记住,所有这些都可以是临时的):

>服务器立即被拒绝.
>早期确定的服务器只是不听流量.
>在你以为你交付他们之后,他们就被弹跳了.

>奇怪的是,每个电子邮件服务器似乎有另一种格式的弹跳,首先解析,最终实际上很容易捕获使用VERP.而不是分析整个电子邮件,一个专用的电子邮件地址(让我们称之为邮件@ example.com)被配置为转发到邮箱,通过命令进行管理,如果我们发送电子邮件到user@server.tld,则返回路径是为邮件用户userserver.tld@example.com设置的.收到后可以轻松解析,并且在多少次反弹(邮箱不能存在,邮箱可能已满(是的,仍然!)等)后,您声明一个电子邮件地址不可用取决于您.
>现在,直接拒绝服务器.可能我们可以正确配置一些MTA和/或为其编写插件,但是随着电子邮件的时间敏感,我们必须在最后一个可用的交货时间内邮寄绝对可配置的控制(之后电子邮件不再对用户感兴趣),每个接收服务器的调节,一般来说,在我们所熟悉的PHP中编写一个邮件程序需要大约相同的时间,它们将SMTP协议直接用于接收服务器上的套接字25.以最小的努力量进行另一种传输的可能性,那么内置了PHPMailer中的默认选项. SMTP协议其实很简单,但有一些注意事项:

>很多接收服务器应用灰色列表:大多数的垃圾邮件机器都不会真的关心一个特定的邮件是否到达,他们只是把它们弄出来.因此,如果未知/尚未被信任的发件人发送邮件,它将被暂时拒绝.抓住(通常是代码451),并将电子邮件放在队列中供以后重试.
>一个邮件服务器,特别是较大的ISP和免费服务(gmail,hotmail / msn / live等)不会代替一大堆邮件,而不会反击:在第一个几百/千个之后,他们开始拒绝你.更多关于那个以后.

获得速度

>现在,我们有一个运行系统,但它需要快速.如果您只有10,000个地址发送到一小时内发送10,000封电子邮件,但是我们要求的最低限度是每小时约20万个.开始它是一个专门的服务器(实际上可以是相当低的电源,无论你做什么,大部分时间在电子邮件的传递是在网络,而不是在你的服务器上).
> IP的缓存:记住我们从电子邮件地址中的主机名请求的所有IP?我们把这些明显存储起来,一次又一次地查找到IP,造成相当大的滞后.然而,IP可能会改变:一个DNS记录,另一个MX在另一个地方…数据变得快速.大多数情况下,服务器实际上并没有发送任何信息(订阅报纸明显地突然出现),一个低优先级的cronjob正在运行,检查所有使用过时的IP的主机名(我们选择较旧的1天作为陈旧的)为IP地址,包括那些以前没有注册过的域名,所以为什么有人已经用他/她的全新电子邮件地址热心订阅了这个域名后呢?或者某个域的服务器问题解决了,等等.).实际上发送电子邮件现在不需要更多的域查找.
>重新使用SMTP连接:当您直接与端口25通话时,设置与服务器的连接所需的时间相对较长,才能交付电子邮件.您不必为每个电子邮件设置新的连接,您可以通过相同的连接发送下一个.有一些跟踪错误导致将默认值设置为每个连接约50个电子邮件(假设您有很多或更多的域).但是,由于电子邮件地址关闭并重新打开用于重试的连接失败,有时会有所帮助.总而言之,这真的有助于加快事情.
>一些明显的,很明显,我几乎忘了提到它:现场必须创建电子邮件的身体是浪费的:如果它是一般的邮件,准备好身体(我改变PHPMailer有点能够使用缓存的电子邮件),可能在前几天(如果你知道你星期五要发送一个邮件,你的服务器是空闲的,为什么不在星期三准备呢?如果它是个性化的,你还可以预先准备足够的时间,如果没有,至少有非个性化的部分等待去.
>多个进程.我提到大部分时间需要交付电子邮件是花在网络上吗?一个邮件过程几乎没有从您的电子邮件服务器获得最大的收益,几乎不显着的负载,邮件正在流出.播放多个进程邮寄不同部分的队列,看看你的服务器/连接是正确的,但记住2个非常重要的事情:

>不同的过程使你非常容易受到种族条件的限制:绝对确定你有一个全面的系统,永远不会发送相同的邮件两次(三次甚至更多).不仅严重地使用户烦恼,您的垃圾邮件也会上升一点.
>尽可能地将域保持在一起:从队列中随机挑选,您将失去与接收域的电子邮件的服务器保持打开连接的优势.

避免拒绝

>你会发送很多邮件.这正是垃圾邮件发送者的做法.但是,您不想被视为垃圾邮件发送者(毕竟,您不是,是吗?)?有许多机制将彻底增加您对接收服务器的可信度:
>具有正确的反向DNS:进程检查属于IP的DNS,如果第二级域匹配,则非常感谢发送邮件:您是否代表example.com发送邮件?确保服务器的反向DNS类似于somename.example.com.
>发布您的域的SPF记录:明确指出用于发送批量电子邮件的计算机是允许&期望使用From / Return-Path标头发送邮件.
>记住拒绝:服务器不喜欢它一次又一次地告诉你不同的电子邮件地址不存在.自动化机制,甚至是人类管理员,在我们处理所有未经验证的电子邮件地址(不再存在)之前,阻止了我们的服务器.以后我们没有采用双重选择,所以数据库被打错了,人们切换IP,从而电子邮件地址,恶作剧电子邮件地址等被污染.确保捕获这些无效,并给予足够或足够严重的故障,取消订阅.他们在做你没有什么好处,他们正在占用资源,如果他们真的想要你的邮件,邮箱可以在以后使用,他们只需要重新订阅.
> DKIM是另一种可能增加您的可信度的机制,但是由于我们还没有实现它,我不能很好地告诉你.
> MX记录:如果您的发送服务器也是域的接收服务器,则某些服务器仍然喜欢它.就像当时那样,我们只有一个MX,而邮件服务器还不是很忙,所以我们把它称为域的后备MX服务器.正常的MX服务器不是发送订阅的服务器,因为您尝试向(客户端等)发送重要电子邮件的服务器暂时阻止它,因为您已经发送了不太重要的邮件,因此非常烦恼.它收到MX的偏好最高,但如果失败,我们有一个很好的奖励,我们的订阅发送服务器仍然会交付,所以在危机中,我们仍然可以得到它,防止尴尬的反弹给客户尝试到达我们
告诉他们你.认真.很多主要的用户都可以通过免费电子邮件地址(如live.com)为您提供以某种方式注册的机会,或者有一些联系方式去寻求帮助和帮助.支持,如果您的电子邮件被拒绝.我有合法的理由发送这么多的电子邮件,可以肯定的是,你有这么多的订阅者,他们有可能会认真地看出每小时可以发送给他们的服务器的电子邮件数量.如果你有说服力和诚实的话,那么1000美元可能会变成万分之一甚至更高的地方.可能有合同,您必须履行的要求,并承诺您必须(并保持)允许这一点. ISP是一个分开的品牌,每个其他玩家都是不同的.不要打扰他们通常的呼叫,因为99%的时间只有你能找到的数字只会让人们愿意排除你​​的互联网连接,而这个连接明白了(或是被允许).滥用@电子邮件地址是一个开始的好地方,但看看您是否可以从某个地方开发更多的点对点电子邮件地址.准确,诚实和完整:您有多少订阅者与该ISP的电子邮件地址,您尝试邮寄的频率,您收到的错误或否认是什么,订阅和unscubscribe进程,和您实际提供给他们的客户的服务.另外,很好:发送这些邮件可能对您的业务有多么重要,恐慌,声称可怕的损失并不涉及他们.对事实和愿望的有礼貌的陈述,并询问他们是否可以帮助而不是要求解决方案走了很长的路.
> Throttling:尽可能多的尝试,一些服务器每小时接收一定数量的邮件和/或从您那里接收一天.了解这些数字(我们正在记录成功和失败),将它们设置为正常域的合理默认值,将其设置为对较大玩家的限制.

避免被标记为垃圾邮件

>第一条规则:不要垃圾邮件!
>第二条规则:永远!不是“一旦关闭”,而不是“他们没有订阅,但这可能是他们一生的交易”,而不是最好的意图,人们不得不要求你的电子邮件.
显然建立了正确的双重选择订阅机制.
> PHPMailer自己设置适当的标题,
>设置一个简单的取消订阅机制,通过网络(包括每个邮件中的链接),也可能是电子邮件和客户服务,如果你有它.确保customerervice可以直接取消订阅.
>如前所述:取消订阅(过多)失败反弹.
避免垃圾邮件处理一生的字眼.
>在您的电子邮件中谨慎使用url.
>避免添加链接到您的控制之外的域,除非你绝对确定你可以信任他们不要垃圾邮件,如果即使这样…
>为用户提供价值:通过google / yahoo / live webmail客户端的用户交互标记为垃圾邮件严重损害未来的成功(在网站注意事项:如果您注册,live / msn / hotmail将转发所有邮件您的域名由用户发送给垃圾邮件,学习喜欢它,一如既往地取消订阅,他们显然不想要您的商场,并且会伤害您的垃圾邮件评级).
>监控您的IP的黑名单.如果你出现在其中一个,那就再见了,所以要清除你的名字和确定案件是必须的.

测量成功率

>您可以控制整个过程,您可以肯定电子邮件在某处(尽管可能是MX的bitbucket或垃圾邮件文件夹),或者您已经记录了失败之所以.这照顾了“实际交付”的数字.
>有些人会尝试说服你添加到您的电子邮件(真实的或着名的1×1透明gif)的在线图像的链接,以衡量有多少人实际读取您的电子邮件.由于这些图像的高百分比阻挡了这些图像,这些数字在最大程度上是摇摇欲坠的,我们认为我们不应该打扰他们,他们的数字完全不可靠.
>如果您希望用户做某些事情,您最好的衡量实际成功率的方法会更容易.将参数添加到邮件中的链接,以便您可以衡量有多少用户到达您链接的站点,无论他们是否执行了所需的操作(观看视频,留下评论,购买的商品).

总而言之,所有的日志记录,用户界面,每个域/电子邮件/用户等的可配置设置.我们花了大约1,5个人月来构建&铁了怪物相比外包电子邮件可能相当投资,可能不是,这一切都取决于音量和音量.业务本身.

现在,我开始愚蠢地开始在PHP中编写一个MTA,我一个人非常喜欢它(这是我写了这么多文本的一个原因),以及极其通用的日志记录和设置功能,基于故障百分比等的每个主机警报正在使生活变得如此容易;)

通过PHP向许多用户发送邮件的安全方式的更多相关文章

  1. ios – 如何告诉ABPeoplePickerNavigationController仅列出具有电子邮件地址的联系人?

    解决方法我不相信有办法让iOS进行这种过滤.我也是在代码中做的.请注意,您需要查找各种电子邮件地址–您必须遍历您可以获得的字典.使用它是一个PITA肯定–我以前做过–你必须小心不要有内存泄漏.我所做的就像你建议的那样–我自己遍历所有联系人,然后我用表格弹出一个视图,然后选择他们想要的人的名字.我保持一个关联,所以我知道什么地址与什么名称相关联,然后使用系统电子邮件框架,然后填充发送地址.

  2. Swift iOS9新联系人框架 – 如何仅检索具有有效电子邮件地址的CNContact?

    您不能编写自定义谓词来过滤联系人,正如文档所说:“请注意,Contacts框架不支持通用谓词和复合谓词”但是当然你可以“手动”完成它,我给你看一个使用快速枚举的例子:

  3. 如何在Swift中与ABPeoplePickerNavigationController选择联系人?

    如果你不这样做,就不会在课堂上尝试这些方法.从而:>当您调用ABRecordcopyValue时,您的示例方法引用了人.这是你的选择器控制器.我假设你的意思是引用人,ABRecordRef!

  4. swift – 使用Firebase登录时“访问钥匙串时出错”

    PS.对不起,如果我错过任何东西,这是我第一次发布.尝试打开项目目标的功能钥匙串共享.这对我有用KeychainSharing

  5. android – 在Kindle Fire上,是否可以获取用户的电子邮件地址?

    Thisquestion一般会讨论Android设备,但是如果你试图在KindleFire上运行这个代码,你得到的就是用户的名字.有没有办法获得电子邮件地址?对不起,但你完全错了.我以前链接到Google登录对话框,显示KindleFire上存在的所有用户.请遵循以下代码:P/s:要使用GoogleAuthUtil类,可能需要google-oauth-client-1.15.0-rc.jar.

  6. Android GCM讯息需要太长时间才能到来

    我在应用程序中使用GCM,我有一个问题.大部分时间我马上收到邮件,但有时邮件会在5分钟后再次出现,就像他们被困在路上.这是正常吗?

  7. Windows – 获取用户的电子邮件地址?

    有没有办法通过Win32或.NET从Windows中获取用户的电子邮件地址?是否有包含此信息的注册表项或API?

  8. ubuntu – 如何将副本发送到电子邮件帐户中所有传入邮件的另一个电子邮件地址?(后缀)

    (后缀)这是可能的?

  9. ubuntu – 配置Exim转发电子邮件

    我设置了一个Ubuntu10.04VPS来管理sub.example.com,我已经将Exim配置为使用来自LinodeLibrary的thistutorial发送电子邮件.这是有效的,但除了发送电子邮件,我意识到我需要一个非根电子邮件地址(admin@sub.example.com)转发给我(me@gmail.com).我已经阅读了关于这个[1]的Exim文档,我并没有真正得到我应该做的事情(似

  10. DKIM从任何域签署外发邮件(使用Postfix和Ubuntu)

    我在我的邮件服务器(postfix和ubuntu)上安装了DKIM,因此它会签署外发电子邮件.我用这些说明:https://help.ubuntu.com/community/Postfix/DKIM但是,我需要它来签署来自任何域(在发件人地址)的电子邮件而不仅仅是我自己的电子邮件.我正在建立一个电子邮件通讯服务,客户将通过服务器发送自己的电子邮件.首先,我在/etc/dkim-filter.co

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部