邮件未在 php 中发送

Posted

技术标签:

【中文标题】邮件未在 php 中发送【英文标题】:Mail is not sending in php 【发布时间】:2014-03-06 13:53:57 【问题描述】:

我已经按照一个教程从 php 发送邮件。

 public function send_credentials($beneficiary_user)

  $this->load->library(‘email’);
  $email_config = Array(
        'protocol'  => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => '465',
        'smtp_user' => 'app123testing@gmail.com',
        'smtp_pass' => 'apptesting',
        'mailtype'  => 'html',
        'starttls'  => true,
        'newline'   => "\r\n"
    );
    $this->email->from('app123testing@gmail.com', 'invoice');
    $this->email->to('anilapu@navaratan.com');
    $this->email->subject('Invoice');
    $this->email->message('Test');

    $this->email->send();


我必须做哪些其他设置才能使其正常工作 *运行后 echo $this->email->print_debugger();.我得到了*

无法使用 PHP mail() 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件。

用户代理:CodeIgniter
     日期:2014 年 2 月 9 日星期日 14:58:44 +0530
     来自:“发票”
     返回路径:
     回复:“app123testing@gmail.com”
     X 发件人:app123testing@gmail.com
     X-Mailer: CodeIgniter
     X 优先级:3(正常)
     消息 ID:
     哑剧版:1.0
     内容类型:多部分/替代;边界="B_ALT_52f74a4c41e88"
      =?utf-8?Q?发票?=
      这是 MIME 格式的多部分消息。
      您的电子邮件应用程序可能不支持这种格式。
     --B_ALT_52f74a4c41e88
     内容类型:文本/纯文本;字符集=utf-8
     内容传输编码:8bit
     测试
     --B_ALT_52f74a4c41e88
     内容类型:文本/html;字符集=utf-8
     内容传输编码:quoted-printable
    测试
    --B_ALT_52f74a4c41e88--

【问题讨论】:

你能描述你得到的错误吗,无论是在控制台还是在你的错误日志中 你没有对你的 $email_config 数组做任何事情。你应该在实例化它时将它传递给电子邮件库。 调用$this->email->initialize($config);来初始化你设置的配置变量,或者在构造函数中传递它也可以$this->load->library('email', $config); 好收获@RainFromHeaven。完全错过了。 尝试发送电子邮件后,运行以下代码:echo $this->email->print_debugger() 并告诉我们它返回的内容。 【参考方案1】:

由于我们在 cmets 中找到了您问题的答案,因此写下答案似乎是谨慎的。

问题是您没有对电子邮件配置数组 ($email_config) 做任何事情。虽然您可能在那里定义了正确的设置,也可能没有,但它们没有任何意义,因为它们没有被正确使用。

因此,至少,您必须更改代码以反映以下更改:

$email_config = Array(
    'protocol'  => 'smtp',
    'smtp_host' => 'ssl://smtp.googlemail.com',
    'smtp_port' => '465',
    'smtp_user' => 'app123testing@gmail.com',
    'smtp_pass' => 'apptesting',
    'mailtype'  => 'html',
    'starttls'  => true,
    'newline'   => "\r\n"
);

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

请注意,这只会解决您的方法的问题,我无法验证您的设置/访问凭据的可信度。

编辑:

根据 jtheman 的建议,我决定深入挖掘。你可能想看看这个https://***.com/a/17274496/2788532。

编辑#2:

您可以使用以下代码从 CI 的电子邮件类中获取有用的错误消息(当然是在您尝试发送电子邮件之后):

<?php echo $this->email->print_debugger(); ?>

【讨论】:

正确!其他方法可能是:1. 尝试 smtp.gmail.com,2. 端口 587,3. 检查您的防火墙等 我已经试过了。但我不知道我在哪里犯错 我必须把它放在哪里。因为当我把它放在 send_credentials 中时,它会禁用剩余代码@RainFromHeaven 你能看到 echo $this->email->print_debugger(); 的结果吗?我已经添加到我的问题@RainFromHeaven 我在受益人控制器中定义了 send_credentials。我使用了 email.php【参考方案2】:

只需在您编写发送电子邮件代码的函数开头添加此代码

$config = Array(
          'protocol' => 'sendmail',
          'mailtype' => 'html', 
          'charset' => 'utf-8',
          'wordwrap' => TRUE

      );
     $this->email->initialize($config);

电子邮件将转发,但错误将显示相同的错误

【讨论】:

【参考方案3】:

你可以试试这个

    打开系统/库/email.php

    编辑

    var $newline = "\n"; var $crlf = "\n";

    var $newline = "\r\n"; var $crlf = "\r\n";

【讨论】:

【参考方案4】:

进行这样的更改

'smtp_crypto'=>'ssl', //add this one
 'protocol' => 'smtp',
 'smtp_host' => 'smtp.gmail.com',
 'smtp_port' => 465,

【讨论】:

以上是关于邮件未在 php 中发送的主要内容,如果未能解决你的问题,请参考以下文章

电子邮件已发送,但未在收件箱中发送。它是在垃圾邮件中。为什么会这样?

symfony2 电子邮件未在命令中发送

Laravel 密码重置电子邮件未在 Heroku 上使用 gmail 发送

邮件未在 rails 上使用 devise、heroku 和邮戳发送

Firebause身份验证:已发送但未在特殊电子邮件地址(如*@gmx.at)上收到的电子邮件

SendUsingAccount SendAs 权限但未在索引中找到