邮件未在 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 中发送的主要内容,如果未能解决你的问题,请参考以下文章
电子邮件已发送,但未在收件箱中发送。它是在垃圾邮件中。为什么会这样?
Laravel 密码重置电子邮件未在 Heroku 上使用 gmail 发送
邮件未在 rails 上使用 devise、heroku 和邮戳发送