您现在的位置是:网站首页 > PHP>PHPMailer 发送邮件本地正常发送,上传到服务器无法发送原因及解决方法
PHPMailer 发送邮件本地正常发送,上传到服务器无法发送原因及解决方法
- PHP
- 2019-06-10
- 820人已阅读
简介前台段时间开发一个发送邮件功能,使用的是PHPMailer,开始本地测试都正常,但是项目上线上传到服务器就无法发送,然后各种排查最终找到原因及解决方法
PHPMailer 的特点:
- 在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。
- 平台应用广泛,支持 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
- 支持嵌入图像,附件,HTML 邮件。
- 可靠的强大的调试功能。
- 支持 SMTP 认识。
- 自定义邮件头。
- 支持 8bit、base64、binary 和 quoted-printable 编码。
PHPMailer 安装及下载方式:
- 从 github 上下载:https://github.com/PHPMailer/PHPMailer/
- github 有时会访问不了,可以到这里下载:IT学无止境下载PHPMailer
- 使用 composer 安装
composer require phpmailer/phpmailer
发送之前需要拥有自己的邮件服务器,测试的时候可以用自己申请的免费邮箱最方便了,不需要自己再搭建服务器了,但是需要配置邮箱开启 SMTP 服务,大部分公共邮箱(163、126、QQ等)为了安全默认都是关闭的。
网易邮箱配置如下:
服务器名称 | 服务器地址 | SSL协议端口号 | 非SSL协议端口号 |
---|---|---|---|
IMAP | imap.163.com | 993 | 143 |
SMTP | smtp.163.com | 465/994 | 25 |
POP3 | pop.163.com | 995 | 110 |
QQ 邮箱配置如下:
邮箱 | POP3服务器(端口995) | SMTP服务器(端口465或587) |
---|---|---|
qq.com | pop.qq.com | smtp.qq.com |
注意:除了网易和QQ邮箱其它邮箱也是可以的。
PHP 代码示例:
/**
* 邮箱发送方法
**/
function sendMail($to, $title, $content) {
Vendor('PHPMailer.PHPMailerAutoload'); // 引入PHPMailer类
$mail = new PHPMailer(); // 实例化
$mail->IsSMTP(); // 使用SMTP
$mail->Host = 'smtp.163.com'; // SMTP服务器
$mail->Port = 465; // 服务器的端口号 25 或者 465 具体要看邮箱服务器支持
$mail->SMTPSecure = "ssl"; // 允许 TLS 或 SSL 协议
$mail->SMTPAuth = true; //启用 SMTP 认证
$mail->Username = '邮箱用户名'; // SMTP 用户名 即邮箱的用户名
$mail->Password = '邮箱密码或授权码' ; // SMTP 密码 部分邮箱是授权码(例如163邮箱)
$mail->From = '发件人地址'; // 发件人地址(也就是你的邮箱地址)
$mail->FromName = '发件人姓名'; // 发件人姓名
$mail->AddAddress('aaaa@126.com',"尊敬的客户"); // 收件人
//$mail->addAddress('ellen@example.com'); // 可添加多个收件人
$mail->addReplyTo('xxxx@163.com', 'info'); // 回复的时候回复给哪个邮箱 建议和发件人一致
//$mail->addCC('cc@example.com'); // 抄送
//$mail->addBCC('bcc@example.com'); // 密送
//发送附件
// $mail->addAttachment('../xy.zip'); // 添加附件
// $mail->addAttachment('../thumb-1.jpg', 'new.jpg'); // 发送附件并且重命名
$mail->WordWrap = 50; // 设置每行字符长度
$mail->IsHTML('true'); // 是否HTML格式邮件
$mail->CharSet = 'utf-8'; // 设置邮件编码
$mail->Subject = '这里是邮件标题'; // 邮件主题
$mail->Body = '这里是邮件内容
'.date('Y-m-d H:i:s'); // 邮件内容
$mail->AltBody = "这是一个纯文本的身体在非营利的HTML电子邮件客户端"; //邮件正文不支持HTML的备用显示
if(!$mail->Send()){
//如果失败打印错误
var_dump($mail->ErrorInfo);
}else{
return true;
}
}
注意:现在很多运营商都对 25 端口进行了管控,所以建议使用安全端口 SSL 类型的端口,不然在本地测试可以正常发送,上传至服务器就无法发送了,这就是因为运营商那里进去了屏蔽限制。以下是阿里云的说明:
版权声明:本文为博主原创文章,欢迎大家转载。 https://www.itxwzj.com/technology/24/PHPmailer-sends-mail-locally-normally-upload-to-server-cant-send-reasons-and-solutions
最新评论
站长大王来回复你了,长点心吧!