1

我正在尝试向注册我的网站的注册者发送一个电子邮件地址,但是我的这部分代码没有运行。我试图找出原因。我已遵循所有必要的文档。我将此部分替换为 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;
4

1 回答 1

3

我知道这似乎没有必要,但我通常总是将 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 会更有意义,并且可以省去一些麻烦和工作。

于 2013-11-06T18:29:12.523 回答