codeigniter发邮件sendmail报错

最近将公司系统从Windows换成了Linux,大部分功能都能正常使用,唯独发送邮件通知功能时,出现了错误。通过var_dump($CI->email->print_debugger());打印调试错误时,报错:”Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method”。

下面是配置方法(在Windows环境下使用没有问题):

/**
 * 通过email发送提醒
 * @param unknown $message	邮件内容
 * @param unknown $subject	主题
 * @param unknown $to_email 收件地址
 * @param string $chaosong	抄送
 */
public function send_msg_qqmail($message,$subject,$to_email,$chaosong=''){
	$result=FALSE;
	
	$CI=& get_instance();
	$CI->load->library('email');
	$config['protocol'] = 'smtp';
	
	$config['smtp_host'] = 'ssl://smtp.qq.com';
	$config['smtp_user'] = '595*****@qq.com';
	$config['smtp_pass'] = "vhcll********";//填写腾讯邮箱开启POP3/SMTP服务时的授权码,即核对密码正确
	$config['smtp_port'] = 465;
	
	$config['charset'] = 'utf-8';
	$config['smtp_timeout'] = 30;
	$config['mailtype'] = 'text';
	$config['wordwrap'] = TRUE;
	$config['crlf'] = PHP_EOL;
	$config['newline'] = PHP_EOL;

	$CI->email->initialize($config);
	$CI->email->from('595*****@qq.com', '淘**');
	$CI->email->to($to_email);
	!empty($chaosong) && $CI->email->cc($chaosong);
	//$CI->email->bcc('595*****@jinzhijun.cn');
	$CI->email->subject($subject);
	$CI->email->message($message);

	$result=$CI->email->send();
	if(!$result){
		log_for_debug($CI->email->print_debugger(),"mail_debug");
		//var_dump($CI->email->print_debugger());
	}
	return $result;
}

但是在Linux下就出现了问题,本着面向搜索引擎编程的原则,立即将错误信息复制到百度(为什么不用谷歌?vpn账号到期了,穷的没钱续费【笑哭】)。

codeigniter发邮件sendmail报错

搜出来的结果,搜出来的结果有说端口号的问题,有说ssl插件问题的,有说 protocol 协议问题的,其中出现较多的问题是 newline配置问题。于是试着将“$config[‘newline’] = PHP_EOL;”换成“ $config[‘newline’] = “\r\n”; ”。在将这些都尝试之后,问题依旧存在。这就很尴尬了,就像你眼看着钥匙扣上的钥匙一把把试完,可是锁还没打开。

codeigniter发邮件sendmail报错

钥匙扣上的钥匙试完了没打开锁,能怎么办呢?那就再重新来一遍。因此重新再看一遍那些解决方案,特别是英文的(因为英文太菜,说不定就疏忽了某些细节)。果然,在一个老哥的回帖中找到一个细节。

codeigniter发邮件sendmail报错
https://stackoverflow.com/questions/45252547/unable-to-send-email-using-php-smtp-your-server-might-not-be-configured-to-send

他说:造成这种情况的一个常见原因是CodeIgniter与SMTP服务器使用的换行符不一样, 也许SMTP服务器需要的是“ \r\n ”,而CodeIgniter使用的是“ \n ”,要修复这个问题,只要正确配置换行符就可以了。第一次排查问题时使用的是在配置数组里设置的,即:$config['newline'] = "\r\n";但是这样问题没有解决,再细看老哥的解决方法发现 newline = "\r\n"的配置要放在 initialize ()之后

    $CI->email->initialize($config);
    $CI->email->set_newline("\r\n");

一试,果然解决问题,只是不知道为什么要在初始化之后再设置才行?算了赖得去了解了,再去完成几个bug,早点下班不香吗?

你要是看到这篇文章,并且知道知道原因,麻烦留个言。感谢!

为了防止有的同学像我一样粗心大意,再次说明解决办法是: newline = "\r\n"的配置要放在 initialize ()之后。下面是完整代码。

/**
 * 通过email发送提醒
 * @param unknown $message	邮件内容
 * @param unknown $subject	主题
 * @param unknown $to_email 收件地址
 * @param string $chaosong	抄送
 */
public function send_msg_qqmail($message,$subject,$to_email,$chaosong=''){
	$result=FALSE;
	
	$CI=& get_instance();
	$CI->load->library('email');
	$config['protocol'] = 'smtp';
	
	$config['smtp_host'] = 'ssl://smtp.qq.com';
	$config['smtp_user'] = '595*****@qq.com';
	$config['smtp_pass'] = "vhcll********";//填写腾讯邮箱开启POP3/SMTP服务时的授权码,即核对密码正确
	$config['smtp_port'] = 465;
	
	$config['charset'] = 'utf-8';
	$config['smtp_timeout'] = 30;
	$config['mailtype'] = 'text';
	$config['wordwrap'] = TRUE;
	$config['crlf'] = PHP_EOL;
	$config['newline'] = PHP_EOL;

	$CI->email->initialize($config);
	$CI->email->set_newline("\r\n");
	$CI->email->from('595*****@qq.com', '淘**');
	$CI->email->to($to_email);
	!empty($chaosong) && $CI->email->cc($chaosong);
	//$CI->email->bcc('595*****@jinzhijun.cn');
	$CI->email->subject($subject);
	$CI->email->message($message);

	$result=$CI->email->send();
	if(!$result){
		log_for_debug($CI->email->print_debugger(),"mail_debug");
		//var_dump($CI->email->print_debugger());
	}
	return $result;
}

原创文章,作者:Zeyu,如若转载,请注明出处:https://jinzhijun.cn/develop/141

(1)
ZeyuZeyu
上一篇 2020年11月11日 下午6:01
下一篇 2020年11月12日 下午6:34

相关推荐

  • php后期静态绑定

    最近在跑一套系统时碰到一个头大的问题,laravel的队列任务(通过另一个原生系统读取数据库)在执行时,会出现数据库连接断开的问题,导致队列任务刚启动时可以正常运行,有一段时间没有…

    2022年4月18日
    1.5K
  • VMware中CentOS 7设置文件夹共享的方法

    下午把虚拟机安装好了,但是还有一个不太给力的地方,就是本地代码每次编辑完总是要上传到服务器,之前windows的虚拟机是可以和物理机共享文件夹的,所以就尝试了一下通过文件夹共享来解…

    2021年8月16日
    1.9K
  • 计算机网络协议总结(转载)

    一、OSI七层协议 1、物理层: 很久很久以前,那时候还没有现在的外星人超级电脑,或者华为的P30。比较调皮的小明想要把自己机器上写好的一些个人游戏心得(如何玩好王者农药)发给小红…

    2022年5月31日
    1.5K
  • JS定时触发—–新订单提醒展示效果并提示音效(转)

    展示效果 php代码 版权声明:本文为lixing1359199697原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链…

    前端 2022年6月28日
    1.7K
  • PHP获取客户端相关访问信息

    (一)PHP通过IP获取客户端相关访问信息 (二)PHP解析HTTP_USER_AGENT 获取客户端操作系统 获取客户端操作系统  Windows NT 4.0 = N…

    2020年11月3日
    42.3K
  • 广东省互联网医院接入——远程确认

    今天公司互联网医院接入终于走到了远程确认这一步了,因为一直是摸着石头过河,中间做了不少弯路,这里做个记录,希望也在摸索的同行如果看到能有一个参考。当然写这个的时候,还只是远程演示了…

    技术开发 2021年8月18日
    1.3K
  • 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39(转)

    理解开发HD 钱包涉及的 BIP32、BIP44、BIP39 数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥)才可以对…

    2022年8月4日
    4.7K
  • 记一次生产环境救火-20210716

    今天起了个早,早早来到公司,本来吃完早餐,泡好咖啡,在工位上气定神闲的刷刷昨天的财经信息,准备开启今天的工作。想起昨天微信群里有人反映系统,系统加载较慢,于是打开阿里云后台,准备看…

    2021年7月16日
    1.3K
  • 扩充合并阿里图标库

    最近在开发系统时遇到一个问题,因为前端用的是网上的前端模板,该前端引入的是他自己在阿里巴巴图标库文件。但是当我想用其他图标时就出现问题了,这个图标库里没有我想用的图标,或者用的图标…

    2022年5月6日
    1.9K
  • PHP解密:zym加密 带乱码调试过程(转)

    欢迎阅读我的另一篇文章:PHP解密:魔方1代 PHP加密中的VMProtect分析,文中对 本贴 73# 层 提供的文件进行了分析 案例 1 实验样本 http…

    2021年12月18日
    2.2K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注