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向Postgresql中插入时间格式问题

    最近在对接互联网医院监管前置机时,向前置机Postgresql数据库插入数据时出现了一个问题,就是我在数据插入前置机前把时间用date(‘Y-m-d h:i:s&#82…

    2021年7月23日
    1.5K
  • docker的备份和迁移

    1.查看容器 2.容器保存为镜像 php是容器名称 myphp是新的镜像名称 此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器 然后查询镜像,看一下结果 3.…

    2020年11月17日
    1.6K
  • 记录一下宝塔搭建Redis遇到的一个小问题

    最近在对接广东省互联网医院监管平台时,发现广东这边是要求平台必须要有医生和患者要有视频通话功能。因为原本的消息通话是用的网易IM,所以音视频也选的网易。网易音视频能实现通话视频云录…

    2021年6月29日
    1.6K
  • CentOS修改yum源

    1. 修改yum源 最近在搭建以太坊节点时,要用到golang编译,但是服务器供应商那边给安装的contos系统默认的yum源没有golang,所以,这边给系统修改成阿里云的yum…

    2020年11月30日
    40.5K
  • 以太坊节点面面观:全节点与轻节点(转)

    收看本系列文章的读者,应该都对于区块链的基本原理和架构有些概念,如果没有,推荐您先去Google搜寻区块链、比特币、以太坊这些关键字了解一下。我们将在这些基础概念之上,来谈区块链的…

    2020年11月30日
    6.9K
  • JS定时触发—–新订单提醒展示效果并提示音效(转)

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

    前端 2022年6月28日
    1.8K
  • centos7下宝塔安装DocHub记录

    最近看到一篇利用文库上传文档作副业的文章,然后把网盘里的各种文档试着上传了一下,结果上传了80多个文档,就成功了2个文档,这成功率,简直不能忍。 趁着周末在家两天,在网上搜了一天的…

    2021年7月26日
    3.1K
  • 广东互联网医院监管对接_前置机FTP文件上传

    最近在广东省互联网医院监管对接过程中,有些文件需要同步到前置机上,我这里用到的解决方案是通过ftp上传文件功能实现的,这里记录一下一些遇到的问题。 1.安装,配置ftp服务器软件 …

    2021年5月26日
    1.7K
  • 记一次生产环境救火-20210716

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

    2021年7月16日
    1.4K
  • 虚拟机centos安装kooder

    前天在群晖上安装了一个gitlab,在github上拉了一些项目,想着搜索项目中代码的内容,但是问题就出现了,搜索只能搜项目名和简介。难道要把所有项目拉下来搜索?于是在网上找解决方…

    2022年3月14日
    2.8K

发表回复

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