4 回答

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

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

TA貢獻1830條經驗 獲得超3個贊
我今天遇到了這個,很驚訝地看到圖書館開箱即用。似乎是 CI 的電子郵件庫中的一個問題:
/**
* 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 <[email protected]>
*
* @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));
}
我沒有時間研究這個方法的全部內容(已經浪費了幾個小時?。?,但能夠繞過它并成功發送電子郵件。創建App/Libraries/Email.php以覆蓋有問題的方法:
<?php namespace App\Libraries;
class Email extends \CodeIgniter\Email\Email{
protected function validateEmailForShell(&$email){
return TRUE;
}
}
然后讓服務返回你的子類App/Config/Services.php:
public static function email(bool $getShared=TRUE){
return $getShared ? static::getSharedInstance('email') : new \App\Libraries\Email();
}
- 4 回答
- 0 關注
- 568 瀏覽
添加回答
舉報