4 回答

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
codeigniter 提供替代類型(Mail、Sendmail 和 SMTP)檢查您的 cpanel 外發(fā)電子郵件配置或要求您的提供商檢查 php 的 mail() 配置

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
在我的例子中,從phpinfo() > intl > ICU 版本是4.6 。哪個(gè)太舊了。
將其更新到最新版本對我有用。

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
您需要在您的服務(wù)器上設(shè)置 MTA(郵件傳輸代理)。
例如:Postfix 或 exim,在某些情況下 nullmailer 可以解決問題
可能您可以連接到提供商的 SMTP 中繼

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
我今天遇到了這個(gè),很驚訝地看到圖書館開箱即用。似乎是 CI 的電子郵件庫中的一個(gè)問題:
/**
* Validate email for shell
*
* Applies stricter, shell-safe validation to email addresses.
* Introduced to prevent RCE via sendmail's -f option.
*
* @see https://github.com/codeigniter4/CodeIgniter/issues/4963
* @see https://gist.github.com/Zenexer/40d02da5e07f151adeaeeaa11af9ab36
* @license https://creativecommons.org/publicdomain/zero/1.0/ CC0 1.0, Public Domain
*
* Credits for the base concept go to Paul Buonopane <paul@namepros.com>
*
* @param string $email
*
* @return boolean
*/
protected function validateEmailForShell(&$email)
{
if (function_exists('idn_to_ascii') && $atpos = strpos($email, '@'))
{
$email = static::substr($email, 0, ++$atpos)
. idn_to_ascii(static::substr($email, $atpos), 0, INTL_IDNA_VARIANT_UTS46);
}
return (filter_var($email, FILTER_VALIDATE_EMAIL) === $email && preg_match('#\A[a-z0-9._+-]+@[a-z0-9.-]{1,253}\z#i', $email));
}
我沒有時(shí)間研究這個(gè)方法的全部內(nèi)容(已經(jīng)浪費(fèi)了幾個(gè)小時(shí)?。?,但能夠繞過它并成功發(fā)送電子郵件。創(chuàng)建App/Libraries/Email.php以覆蓋有問題的方法:
<?php namespace App\Libraries;
class Email extends \CodeIgniter\Email\Email{
protected function validateEmailForShell(&$email){
return TRUE;
}
}
然后讓服務(wù)返回你的子類App/Config/Services.php:
public static function email(bool $getShared=TRUE){
return $getShared ? static::getSharedInstance('email') : new \App\Libraries\Email();
}
- 4 回答
- 0 關(guān)注
- 581 瀏覽
添加回答
舉報(bào)