我目前正在针对CodeIngiter电子邮件库与外部进行演示。我不了解SMTP以外的几种电子邮件配置协议之间的区别。有一个可用的问题,但似乎令人困惑,我赞赏指出明显差异的简单方法。
我也无法在CodeIgniter手册中找到任何有关它的信息,只是简单地指出存在的情况。
答案 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
,在配置表中为:
协议:mail
,sendmail
或smtp
邮件发送协议。
它会这样使用:
$config = ['protocol' => 'sendmail'];
$this->email->initialize($config);
这些值是什么意思?
默认值为mail
。
这意味着CodeIgniter库将使用内部mail()
PHP function尝试发送邮件。
它如何工作? PHP如何知道如何发送邮件?
在Unix / Linux上,它调用
sendmail
二进制文件,然后使用邮件 配置以路由电子邮件。在Windows上,它发送到SMTP 服务器。在这两种情况下,系统管理员都将设置邮件系统。
在任何情况下,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
值意味着CodeIgniter库将直接连接到SMTP服务器以发送邮件。
可以使用相关的smtp_*
选项配置连接的执行方式,这些选项包括smtp_host
,smtp_user
,smtp_pass
,smtp_port
等...
当您不是服务器管理员(例如在共享主机环境中)并且因此无法为服务器配置SMTP提供程序时,此选项非常有用。
最好选择此选项,而不是其他选项,因为您的应用程序将不再取决于服务器的正确配置。
这里的主要问题是类和文档错误地使用了protocol
一词。
SMTP是电子邮件协议。
选项mail
,sendmail
和smtp
更像端点或发送方法,即库应该用于发送邮件。
我希望这可以使文档更加清晰。