CodeIngiter电子邮件协议sendmail,mail和SMTP之间的区别?

时间:2019-04-09 09:06:32

标签: codeigniter codeigniter-3

我目前正在针对CodeIngiter电子邮件库与外部进行演示。我不了解SMTP以外的几种电子邮件配置协议之间的区别。有一个可用的问题,但似乎令人困惑,我赞赏指出明显差异的简单方法。

我也无法在CodeIgniter手册中找到任何有关它的信息,只是简单地指出存在的情况。

1 个答案:

答案 0 :(得分:1)

我觉得这里很混乱。

SMTP简单邮件传输协议,实际上是用于电子邮件的基础协议。现有的每个解决方案,库或服务都基于此。

CodeIgniter为我们提供了一个有用的library class Mail,它基本上是一个面向对象的包装器,旨在简化PHP应用程序中的邮件发送。例如,它允许您执行以下操作:

$this->load->library('email');

$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');

$this->email->send();

这是相当简单易读的。

现在,可以用许多不同的方式配置此类。我同意该文档在解释它方面做得很差。我想这句话可能会让您感到困惑: Multiple Protocols: Mail, Sendmail, and SMTP,在配置表中为:

协议mailsendmailsmtp 邮件发送协议。

它会这样使用:

$config = ['protocol' => 'sendmail'];
$this->email->initialize($config);

这些值是什么意思?


邮件

默认值为mail

这意味着CodeIgniter库将使用内部mail() PHP function尝试发送邮件。

它如何工作? PHP如何知道如何发送邮件?

  

在Unix / Linux上,它调用sendmail二进制文件,然后使用邮件   配置以路由电子邮件。在Windows上,它发送到SMTP   服务器。在这两种情况下,系统管理员都将设置邮件系统。

Thanks to this SO answer

在任何情况下,sendmail二进制文件都将使用SMTP服务器发送邮件,这是由管理员配置的。

发送邮件

第二个可能的值为sendmail

在配置中使用sendmail值意味着CodeIgniter库将直接使用sendmail二进制文件,而无需使用PHP mail()函数。

可以通过选项mailpath(默认为/usr/sbin/sendmail)来配置二进制文件的路径。

这意味着它只能在Linux / Unix平台上使用,因为Windows没有任何sendmail二进制文件。

现在为什么您要直接使用sendmail二进制文件,因为PHP内部的mail()函数已经使用了它(并且与Windows兼容)?

好吧,托管服务提供商可以在您的PHP环境中禁用mail()内部功能之一。或者,您可能想调用一个特殊的sendmail二进制文件,该二进制文件与PHP内部函数使用的二进制文件不同。

在任何情况下,sendmail二进制文件都将使用SMTP服务器发送邮件,这是由管理员配置的。

SMTP

最后一个可能的值为smtp

在配置中使用smtp值意味着CodeIgniter库将直接连接到SMTP服务器以发送邮件。

可以使用相关的smtp_*选项配置连接的执行方式,这些选项包括smtp_hostsmtp_usersmtp_passsmtp_port等...

当您不是服务器管理员(例如在共享主机环境中)并且因此无法为服务器配置SMTP提供程序时,此选项非常有用。

最好选择此选项,而不是其他选项,因为您的应用程序将不再取决于服务器的正确配置。


摘要

这里的主要问题是类和文档错误地使用了protocol一词。

SMTP是电子邮件协议。

选项mailsendmailsmtp更像端点发送方法,即库应该用于发送邮件。

我希望这可以使文档更加清晰。