通过PHP向许多用户发送邮件的安全方式

通过PHP向许多用户发送邮件的安全方式,php,mysql,email,e-commerce,Php,Mysql,Email,E Commerce,让我解释一下我在标题中的意思。比如说,我正在为一个网上商店/目录创建一个小型电子商务系统。客户可以选择是否希望收到时事通讯。如果他们这样做了,那么合乎逻辑地认为应该在新闻稿形成并准备好后立即发送新闻稿 当然,可以通过从数据库获取所有指定的用户电子邮件并使用for循环通过mail函数在循环中发送邮件来实现,但问题是,有人告诉我,这是一种不好的做法。简单且不便宜的方法是购买互联网服务来发送时事通讯,但是php程序员需要什么呢 所以,我问你们谦卑的同志们,从你们的观点来看,什么是解决办法 注意!你可能

让我解释一下我在标题中的意思。比如说,我正在为一个网上商店/目录创建一个小型电子商务系统。客户可以选择是否希望收到时事通讯。如果他们这样做了,那么合乎逻辑地认为应该在新闻稿形成并准备好后立即发送新闻稿

当然,可以通过从数据库获取所有指定的用户电子邮件并使用
for
循环通过
mail
函数在循环中发送邮件来实现,但问题是,有人告诉我,这是一种不好的做法。简单且不便宜的方法是购买互联网服务来发送时事通讯,但是php程序员需要什么呢

所以,我问你们谦卑的同志们,从你们的观点来看,什么是解决办法

注意!你可能不会相信我,但这不是垃圾邮件

UPD:我可能解释错了,但我希望听到一个解决方案,不仅是关于正确的邮件发送方式,而且是关于正确的投递方式。因为并非每次发送的邮件都会被送达。
当然也有一些不可预测的原因。例如,在途中的某个地方,有东西坏了,邮件丢失了(如果可能的话),但也有其他原因可能受到服务器或其他地方的影响。可能需要与hoster讨论此问题?

通过SMTP身份验证:

使用类似的方式,或者是使用简单的
邮件()功能的更好选择,因为它可以很容易地标记为垃圾邮件。需要考虑的邮件问题实在太多了——其中大多数问题都是通过使用已有的库来解决的

手动发送大量电子邮件时需要解决的几个问题:

  • 使用不正确的标题

  • 处理跳转消息

  • 由于电子邮件涌入,脚本超时

编辑:


可能不是你想要的答案。但是,我强烈建议你投资或。由于此过程不是出于教育目的,而是出于商业目的,我强烈建议使用上述服务。

只需使用PHP邮件和学习如何构建自定义标题,您可以附加第四个参数,exmaple如下

<?php
// multiple recipients
$to  = 'aidan@example.com' . ', '; // note the comma
$to .= 'wez@example.com';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
<html>
   ...
</html>
';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
?>


源:

< P>创建邮件队列子系统,它可能包括表如Mayl队列、Mail状态、Mail附件、Mail接收和Mail模板等。

< P>您可以考虑PHPMALER。

您可以添加多个收件人和一个特殊的回调函数,用于处理发送的每封邮件的返回消息。(有关示例,请访问链接)


我不认为通过php捕获“邮件传递失败”错误邮件是可能的,除非您通过SMTP使用PHPMailer,并且偶尔注意从您的传出电子邮件收集中收到的任何收件人返回的邮件。

我明白了您的问题,但在回答之前,让我先考虑一下常见问题。首先,我强烈建议使用像Mail Chimp这样的服务。它对小的工作是免费的,并且有很多很酷的功能,比如跟踪有多少电子邮件被打开,有多少被点击,有多少邮件在发送时失败。。。想一想,帮自己一个忙,不要重新发明轮子

现在,为了了解目的,让我们来回答你的问题

要记住的第一件事是强制执行您的列表,使其成为一个好的列表。怎么做?好的,对于一个好的列表,我指的是一个有效的电子邮件地址列表。简单地在你的页面上放一个新闻稿表单,只有一个字段(可能是验证码,但我认为没有必要)

将所有输入保存到数据库表中,默认情况下字段“isValid”设置为false,并保存任何类型的唯一哈希。然后,您发送一封确认电子邮件,其中包含一个用于确认的链接(生成哈希),单击该链接将使“isValid”标志为true,以及一个用于取消的链接(始终在所有电子邮件中发送此取消链接)

这就是商店和严肃网站所做的。任何强迫你的客户/访客接受的行为都是不道德的行为(即垃圾邮件)

第二件事,使用一个好的托管服务。垃圾邮件发送者通常使用太便宜的服务,而主要的电子邮件服务将来自这些地址的所有信息都列入黑名单

我知道,如果我答错了你的问题,你应该问问自己。不,我不知道,技术性的东西现在就来了

为什么不好的做法是将邮件函数放在for循环中?简单。因为函数mail每次被调用时都会执行多个操作。PHP,将打开到邮件服务器的连接,发送要解析的数据,请求发送,注册邮件服务器状态,关闭连接,启动状态,以完成调用的邮件功能并清理内存混乱

从编程的角度来看,这种连接开销是人们称之为不良实践的问题。使用SMTP/IMAP解决方案更好,因为它优化了此过程

关于技术方面的问题,我看到了你关于交付的问题。正如我所说,你们有一些方法来确保你们的邮件列表足够好。但如果发生另一个异常,比如客户服务器上出现断电+无中断故障,该怎么办

PHP保持“请求邮件服务器发送,邮件服务器已发送”的状态。如果邮件服务器发送了您的消息,PHP将返回true。句号

如果客户端无法接收或拒绝,您应该检查电子邮件标题和电子邮件状态。这些都在电子邮件服务器上。同样,这些信息可以通过SMTP/POP/IMAP扩展访问,而不是通过邮件功能

如果你想更进一步,可以阅读IMAP文档,搜索电子邮件类(phpclasses.org,pear和pecl是最好的搜索地方)

额外提示:RFC可能很有用,因为您可以更好地了解电子邮件服务器之间的真正对话

额外提示2:访问gmail或