PHPMailer发送邮件报错Msg:stream_socket_enable_crypto():
我的PHPMailer发送邮件代码
代码如下 | 复制代码 |
header("Content-type:text/html;charset=utf-8"); $mail = new PHPMailer(); |
在使用PHPMailer发送邮件报错Msg:stream_socket_enable_crypto(): this stream does not support SSL/crypto,
出现这种情况请输出phpinfo()看下openssl这个扩展没有安装。
查找php安装时源码包的位置以/usr/local/src/php/php-5.3为例子
代码如下 | 复制代码 |
cd /usr/local/src/php/php-5.3/ext/openssl /usr/local/php/bin/phpize |
可能会出现下面的错误
代码如下 | 复制代码 |
Cannot find config.m4. Make sure that you run ‘/usr/local/php/bin/phpize’ in the top level source directory of the module |
解决办法:
代码如下 | 复制代码 |
mv config0.m4 config.m4 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ |
/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ 改目录下回生成一个openssl.so文件,找到php的配
置文件,在扩展区域添加
代码如下 | 复制代码 |
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/openssl.so |
如果你配置了还不能发送邮箱我们可以尝试在linux中直接使用mail函数直接发送邮件哦。
今天在使用phpmailer发送邮件时居然提示SMTP Error: Could not authenticate,这个感觉是smtp设置的问题,下面我在网上找到了几种解决办法。今天在使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误,其中密码帐号都是正确的,邮箱也设置开启了SMTP功能。
上谷歌百度了一遍,有的说是服务器禁用了端口,有的说把class.phpmailer.php中的
代码如下 | 复制代码 |
function IsSMTP() { function IsSMTP() { |
测试以后还是不行,心中郁闷的一米。最后在一篇博客中找到了解决方法,先分享出来让更多遇到同样问题的人能得到帮助!
这个错误说明虚拟主机不支持PHPMailer默认调用的fsockopen函数,找到class.smtp.php文件,搜索fsockopen,就找到了这样一段代码:
代码如下 | 复制代码 |
// connect to the smtp server |
方法1:将fsockopen函数替换成pfsockopen函数
首先,在php.ini中去掉下面的两个分号
;extension=php_sockets.dll
;extension=php_openssl.dll
然后重启一下
因为pfsockopen的参数与fsockopen基本一致,所以只需要将@fsockopen替换成@pfsockopen就可以了。
方法2:使用stream_socket_client函数
一般fsockopen()被禁,pfsockopen也有可能被禁,所以这里介绍另一个函数stream_socket_client()。
stream_socket_client的参数与fsockopen有所不同,所以代码要修改为:
代码如下 | 复制代码 |
$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno, $errstr, $tval); |
这样就可以了。
如果上面办法还是没有解决可能是邮箱自动过滤你机器自动登录邮箱发邮件了哦,我是使用下面办法解决的
刚开始使用的qq的帐号,提示上面错误。换成新注册的163帐号可以正常发送。
之后换了一个qq等级比较高的帐号,这下可以正常发送,没有报任何错误。
因为收件人用的是qq邮箱帐号,所以发件帐号用qq的邮箱比较好,这样发送过多不会轻易的被拦截或判为垃圾邮件。
所以结论就是配置中使用一个qq等级比较高的帐号(我的一个小号等级2个月亮可以正常使用,当然等级越高越好,)
ps:也要查看邮箱中“设置邮件地址黑名单”及“收信规则”,有时系统会自动将一些邮箱自动加入黑名单的
PHPMailer是别人封装好的一个发送邮件的库,用起来很方便。其支持mail、sendmail和smtp的方式可以到https://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list去下载最新版本的。下面通过gmail smtp发送邮件为例来说明smtp使用方法。
代码如下 | 复制代码 |
$mail = new PHPMailer(); if(!$mail->Send()) { |
上面是核心代码,下面我们综合一下实例。
按如下示例编写代码即可实现php在线发送邮件.
一:前台表单
代码如下 | 复制代码 |
<html> |
二:后台PHP程序
代码如下 | 复制代码 |
$mail->From = "user@xxxx.com"; //邮件发送者email地址 //$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件 $mail->Subject = "PHPMailer测试邮件"; //邮件标题 if(!$mail->Send()) echo "邮件发送成功"; |
mail函数,发送邮件
语法: mail(to,subject,message,headers,parameters)
to 规定邮件的接收者
subject 规定邮件的主题。该参数不能包含任何换行字符
message 规定要发送的消息
headers 规定额外的报头,比如 From, Cc 以及 Bcc
parameters 规定 sendmail 程序的额外参数。
碰到的主要问题是乱码问题,刚开始是某些客户端接收邮件时好(比如QQ邮箱,估计带自动那个识别编码)的有些不foxmail、ipad显示乱码,解决方式正确的设置这个mail的headers就行了,下面是我使用的完美的无乱码的例子。
在PHP中配置php.ini文件过程分为两个步骤:
1.先找到你放置所有PHP,Apache,MySQL文件的地方,在PHP文件夹里你可以发现有一个文件:php.ini,打开后,找到mail function地方,将原来的配置代码改为如下(仅对windows系统):
[mail function]
; For Win32 only.
SMTP =smtp.sohu.com
mtp_port=25
; For Win32 only.
sendmail_from = 填上你的电子邮件全称。
此处为以sohu的邮件服务器设置,如果你用163的邮箱,则设置为:smtp.163.com
2.在C盘搜索php.ini,选择不是快捷方式的那一个php.ini,应该在C/WINDOWS里面的,打开它,如上面一样修改它,保存。
设置完后,记得重启Apache服务器,然后mail()函数就可以用了。
例
代码如下 | 复制代码 |
<?php $headers .= "Content-type:text/html; charset=utf-8"; mail($to,$subject,$message,$headers); |
上面函数不可以带附件了,下面我们升级一下
代码如下 | 复制代码 |
<?php class Mail { private $filename; private $boundary; private $eol; //每行末尾所加的换行符类型
public function setFromaddr($fromaddr) { public function getTopic() {
public function getContent() {
public function setToaddr($toaddr) {
public function getDomain() { public function setDomain($domain) {
$this->boundary= '--'.substr(md5(time().rand(1000,2000)),0,16); } private function getUniq_id(){ $this->uniqid= md5(microtime().time().rand(1,100)); } private function outputCommonHeader(){ private function mime_content_type ( $f )
return 1;
if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ return 1; /* $this->attachmentToBase64($this->attach); if(mail($this->toaddr,$this->topic,$this->msg,$this->header)){ return 1; } return 1; public function send(){ if(empty($this->attach)&&empty($this->cc)){ }else if(empty($this->attach)){ }else if(empty($this->cc)){ }else if(!empty($this->toaddr)&&!empty($this->topic)&&!empty($this->cc)&&!empty($this->content)&&!empty($this->attach)){ |
示例代码,有些变量需要上下文环境:
代码如下 | 复制代码 |
$m = new Mail(); |
优点:使用方便就一个简单的函数
缺点:需要php.ini支持该函数,如果某些服务器不支持而又不能改环境那就不行了而且总是不稳定,发的有时能收到有时不能
phpmailer发送邮件功能很强大,今天真正的体验一下,简单说一下配置,本人是在thinkphp中是用的
配置步骤:
1.后台配置发送邮件类,位置admin/common/common.php
中
代码如下 | 复制代码 |
function sendmail($tomail,$title,$content) /*邮件设置信息*/ Vendor('phpmailer.class#phpmailer'); $mail->CharSet ="UTF-8";//设定邮件编码 } |
2:配置文件中配置参数:
代码如下 | 复制代码 |
/*邮件设置*/ |
3.测试发送代码:
代码如下 | 复制代码 |
sendmail(’11234@126.com‘,‘您好’,‘我是内容’); |
相关文章
Java8 实现stream将对象集合list中抽取属性集合转化为map或list
这篇文章主要介绍了Java8 实现stream将对象集合list中抽取属性集合转化为map或list的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05- 这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
解决:failed to open stream: No such file or directory in
本教程来给各位同学介绍failed to open stream: No such file or directory in解决办法,有需要了解的朋友可进入参考。 Warning: include_once(./include/main.i...2016-11-25- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20- 这篇文章主要介绍了c#之FileStream对象读写大文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要分享了个人使用C# FileStream实现的读写的文本操作的小程序,主要是复习下对filestream的理解,希望对大家学习C#能够有所帮助...2020-06-25
- 测试代码如下:复制代码 代码如下:<?php$fp=fopen("http://www.sina.com.cn", 'r');$stream_meta = stream_get_meta_data($fp);print_r($stream_meta);?>在我本机输出如下:Array( [wrapper_data] => Array...2013-10-04
- 这篇文章主要介绍了Java8之Stream流代替For循环操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-19
- 这篇文章主要介绍了c#使用netmail方式发送邮件的示例,大家参考使用吧...2020-06-25
- 这篇文章主要介绍了C#中FileStream的对比以及使用方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
- PHPMailer在SAE上无法发送邮件怎么回事呢,我们以前在php5.2.7版本中使用了PHPMailer是可以发,但移到sae中发现无法发邮件了,那么此问题如何解决 在SAE上直接用5.2.7...2016-11-25
- Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。...2016-09-01
- 本文我们整理了三个android后台发送邮件的方法及示例,第一个是不借助Intent在android后台发送Email,第二个是用在收集应用的异常信息,第三个是分享一个android后台发送邮...2016-09-20
网上找到的两个PHP发送邮件的例子,很不错,贴出来给初学者参考吧(不知道是否有兄弟曾贴过),呵呵(2
Advanced Example Here we will show the full capabilities of the PHP mail function. PHP Code: <?php echo "<html><body>"; $recipient = "Kris Arndt <karn@nu...2016-11-25- Stream 和 byte[] 之间的转换...2020-06-25
C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换
本文主要介绍字符串string和内存流MemoryStream及比特数组byte[]之间相互转换的方法,需要的小伙伴可以参考一下。...2020-06-25- stream_context_create创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。...2016-11-25
- Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作,这篇文章主要给大家介绍了Java8中Stream的一些神操作,需要的朋友可以参考下...2021-11-02
- 这篇文章主要介绍了Perl中使用MIME::Lite发送邮件实例,本文介绍了使用sendmail方式发送、发送HTML格式邮件、smtp方式发送邮件等内容,需要的朋友可以参考下...2020-06-29