phpmailer在阿里云服务器发送邮件失败,中文乱码
我的环境是:apache+mysql+php 首先查看是否开启了socket与openssl扩展 ? ? ?如果没有那就找到php.ini文件并打开,开启这这个扩展 将 php_sockets.dll
php_openssl.dll
? ? 发送邮件的代码中确保有这两句: $mail->SMTPSecure = 'ssl'; //设置使用ssl加密方式登录鉴权 $mail->Port = 465; 设置ssl连接smtp服务器的远程服务器端口号 465 ? 给防火墙添加465端口的访问权限 之前我在本地测试一直正常,换上阿里云服务器之后邮件发送失败 是因为阿里云默认没有开启465端口的访问权限 服务器开启465安全组,最新的阿里云ECS可以直接在安全策略中配置 ? ? 完成后重启php和服务器 已经可以成功接收到邮件了。 ? 补充一个小问题,我用alert弹出的中文显示乱码,本地测试是Ok的 这是原来的代码: exit("<script charset='UTF-8'>alert("留言成功!");location.href='".$_SERVER["HTTP_REFERER"]."'</script>"); 然后改成了下面这句就不再乱码了 echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>提示</title><script language=javascript>alert("留言成功!");location.href="'.$_SERVER["HTTP_REFERER"].'"</script></head></html>'; ? 再补充一下phpmailer发送邮件出现标题或者内容或者提示信息出现中文乱码的情况 网上教程有很多,并不适合我 我自己摸索出来的代码贴出来,大家可以试一试,行就行,不行您再找别的方案哈 将留言发送到邮箱 //引用phpmailer核心文件 require_once("PHPMailer/PHPMailer.php"); require_once("PHPMailer/SMTP.php"session_start(); $mail = new PHPMailerPHPMailerPHPMailer(); $mail->isSMTP(); 使用SMTP服务 $mail->CharSet = "utf8"; 编码格式为utf8,不设置编码的话,中文会出现乱码 $mail->Host = "smtp.xx.com"; 发送方的SMTP服务器地址 $mail->SMTPAuth = true; 是否使用身份验证 $mail->Username = "cyy@qq.com"; 发件服务器邮箱 $mail->Password = "xxxxxxxx";客户端授权密码,而不是邮箱的登录密码! $mail->SMTPSecure = "ssl"; 使用ssl协议方式 $mail->Port = 465;? qq端口465或587 $mail->setFrom("cyy@qq.com","cyy发的"); 设置发件人信息,如邮件格式说明中的发件人 $mail->addAddress("cyy2@qq.com","cyy2收的"); 设置收件人信息,如邮件格式说明中的收件人 $mail->addReplyTo("cyy@qq.com","cyy发的"); 设置回复人信息,指收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址 $mail->Subject = "邮件标题"; 邮件标题 $code=rand(100000,999999);验证码 $_SESSION["code"] = $code; return $code."----".session("code"); $mail->Body = "邮件内容是 <b>您的验证码是:$code</b>,如果非本人操作无需理会!"; $mail->Body = "邮件正文"$mail->AltBody = "This is the plain text纯文本"; 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用 if (!$mail->send()) { 发送邮件 echo "Message could not be sent."; echo "Mailer Error: " . $mail->ErrorInfo; 输出错误信息 } $_SERVER["HTTP_REFERER"].'"</script></head></html>'; ? 发现在网页端的邮箱中文的标题和正文都是正常的,但是用foxmail收取邮件出现乱码 原因是foxmail默认使用西欧编码,需要手动把乱码的文件编码改为utf-8,比较麻烦? 我又稍微修改了代码 $mail->Subject = "=?UTF-8?B?".base64_encode($mes_sub)."?="; 邮件标题 这句是标题转码,解决foxmail中标题乱码问题 $mail->Body = $content; 邮件正文 $mail->AltBody = $content;; 这里补充了纯文本格式,如果html格式乱码就用纯文本格式 成功解决!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |