为什么 Codeigniter 电子邮件类不使用 sendmail 发送邮件


Why isn't the Codeigniter email class sending mail with sendmail?

我正在尝试向注册我的网站的注册者发送电子邮件地址,但是我的代码的这一部分没有运行。我试图找出原因。我已经遵循了所有必要的文档。我用 php 的邮件函数替换了本节进行调试,看看它是否会在我的服务器上发送电子邮件,它会。有人对它可能是什么有任何想法吗?

// User was successfully created and the user needs to verify their account.
// Send registered an email informing them how to validate their account.
$this->load->library('email');
$this->email->from('owner@owner.com', 'Owner Name');
$this->email->to($post_email_address);
$this->email->subject('Site Name Here Registration');
$this->email->message('Thank you for registering for our site. Here is your registration key to activate your account: '.$registration_key.' Please click on the following link to activate your account.<br />'.anchor('project-manager/login/verify/'.$registration_key, 'Click Here To Activate Your Account', ''));
$this->email->send();

以下是应用程序/配置目录中 email.com 的配置。

<?php 
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
我知道

这似乎没有必要,但我通常总是将SMTP与邮件类一起使用。有太多的服务器配置问题可能导致邮件无法发送。有时匿名(例如"nobody"或"www-data")用户被限制使用sendmail-如果服务器未正确配置suexec,这是一个非常常见的问题。

此外,使用 SMTP 依赖于已知工作的邮件服务器的已知良好的 DNS/SPF 设置 - 在您使用的各个应用程序服务器上可能不是这种情况。

您可能会通过更多的挖掘来找到问题的根源,甚至可能得到纠正 - 但是如果您需要移动应用程序或启动更多服务器,那么您将再次遇到相同的问题。

只需按照电子邮件类文档使用 SMTP,这实际上只是相应地更改$config['protocol']的问题,然后添加 SMTP 主机/用户/传递变量。设置一个电子邮件帐户,然后试一试。邮件转发设置也可以更优雅地处理noreply之类的事情。

要尝试一下,只需覆盖控制器中的$config数组,例如:

$myTempConfig['protocol']  = 'smtp'; 
$myTempConfig['smtp_host'] = 'mail.somedomain.com';
$myTempConfig['smtp_user'] = 'username';
$myTempConfig['smtp_pass'] = 'swordfish';
$myTempConfig['smtp_port'] = 25;
$myTempConfig['smtp_timeout'] = 30; // adjust as needed for busy mail servers

然后致电:

 $this->email->initialize($myTempConfig)

所以它会加载设置。如果你愿意,你可以称之为$config,我只是喜欢在这样做时明确我在做什么。

最好摆脱这个问题并一劳永逸地解决它。一旦你设置了SMTP设置,你的代码就可以工作了,无论你把它放在哪里。

大多数体面的托管都正确使用 suexec,这意味着邮件类将使用 sendmail "正常工作"。但是,如果您倾向于使用平台即服务提供商或您自己的服务器部署大量内容,那么使用 SMTP 并节省一些麻烦和工作会更有意义。