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

时间:2013-11-06 15:04:10

标签: php codeigniter

我正在尝试向注册我网站的注册人发送电子邮件地址,但我的代码的这一部分未运行。我试图找出原因。我已经按照所有必要的文件。我用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();

以下是application / config目录中email.com的配置。

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

1 个答案:

答案 0 :(得分:3)

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

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

你可以通过更多的挖掘来解决问题的根源,甚至可能更正 - 但是如果你需要移动应用程序,或者提出更多问题,那么你又会遇到同样的问题服务器

只需按照email class documentation使用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更有意义并节省一些头痛和工作。